gnuastro-commits
[Top][All Lists]
Advanced

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

[gnuastro-commits] master 1c30d220: MakeCatalog: multi-word options with


From: Mohammad Akhlaghi
Subject: [gnuastro-commits] master 1c30d220: MakeCatalog: multi-word options with hyphen for readability
Date: Sun, 5 Feb 2023 11:23:27 -0500 (EST)

branch: master
commit 1c30d220702f84cfbae7d1f2eb4ce5f49f993edb
Author: Mohammad Akhlaghi <mohammad@akhlaghi.org>
Commit: Mohammad Akhlaghi <mohammad@akhlaghi.org>

    MakeCatalog: multi-word options with hyphen for readability
    
    Until now, almost all of MakeCatalog's options that contained more than one
    word were simply stuck after each other. For example '--areaarcsec2' or
    '--halfmaxarea' this was very hard to read and write; therefore increasing
    the possibility of miss-typing debugging the source of the problem!
    
    With this commit, a hyphen has been placed in the names of all such options
    in MakeCatalog (the full list is available in the changed 'NEWS' file of
    this commit). In the process, the following changes have also been made:
    
     - The number of MakeCatalog's measurements have become VERY long and
       having them in a single section of the book was making it increasingly
       hard to navigate and find the measurement you needed. Therefore with
       this commit, the "MakeCatalog measurements" section was broken into
       multiple sub-sections that group the various measurements by context.
    
     - The '--axis-ratio' and '--position-angle' options of three installed
       scripts were also updated:
       * astscript-radial-profile
       * astscript-psf-stamp
       * astscript-psf-unite
    
     - Most short options of MakeCatalog's measurements have been removed to
       avoid interfering with the alphabetical sorting of '--help'.
---
 NEWS                              |  130 +++-
 bin/mkcatalog/args.h              |  384 +++++-----
 bin/mkcatalog/columns.c           |  170 ++---
 bin/mkcatalog/ui.c                |    4 +-
 bin/mkcatalog/ui.h                |   61 +-
 bin/script/psf-select-stars.in    |    4 +-
 bin/script/psf-stamp.in           |   16 +-
 bin/script/psf-unite.in           |   14 +-
 bin/script/radial-profile.in      |   64 +-
 doc/gnuastro.texi                 | 1468 +++++++++++++++++++------------------
 lib/box.c                         |    4 +-
 tests/during-dev.sh               |    9 +-
 tests/mkcatalog/aperturephot.sh   |    6 +-
 tests/mkcatalog/objects-clumps.sh |    2 +-
 tests/script/psf-select-stars.sh  |    2 +-
 15 files changed, 1268 insertions(+), 1070 deletions(-)

diff --git a/NEWS b/NEWS
index 51538220..9f0cf83b 100644
--- a/NEWS
+++ b/NEWS
@@ -58,6 +58,10 @@ See the end of the file for license conditions.
      'EXTNAME' keyword in FITS).
 
    MakeCatalog:
+   - Book: with the increasing number of possible measurements the
+     "MakeCatalog measurements" section of the Gnuastro book has been
+     broken into separate sub-section and contextually similar measurements
+     are grouped separartely there.
    --sigclip-mean-sb: surface brightness (over one pixel's area in
      arcsec^2) of the sigma-clipped mean of the values. This is useful in
      scenarios where you want to compare surface brightness values
@@ -159,6 +163,26 @@ See the end of the file for license conditions.
 
 ** Removed features
 
+  MakeCatalog
+  - Removed the short option format for the following measurements
+    (columns). This was done because the short options affect the sorting
+    in the output of '--help', making it hard to find the options
+    visually. Because most measurements do not have a short format, we have
+    seen that the short format is rarely used. Only the most commonly used
+    measurements keep their short format, and only when they don't affect
+    the alphabetic sorting of the output of '--help':
+       --area                     (short option was 'a')
+       --axis-ratio               (short option was 'Q')
+       --magnitude-error          (short option was 'G')
+       --num-clumps               (short option was 'c')
+       --position-angle           (short option was 'p')
+       --semi-major               (short option was 'A')
+       --semi-minor               (short option was 'B')
+       --sn                       (short option was 'n')
+       --sum                      (short option was 'b')
+       --upperlimit-mag           (short option was 'u')
+
+
 ** Changed features
 
   Configuration:
@@ -173,15 +197,97 @@ See the end of the file for license conditions.
     won't be needing it either.
 
   MakeCatalog:
-  --sum: new name for the old '--brightness' column. "Brightness" has a
-    specific meaning in astronomy/physics and has units of
-    energy/time. However, astronomical images aren't in this unit, they
-    are usually in counts, or can have an arbitray units (like
-    nanomaggy). The new name is derived from what this column does (sum of
-    pixel values) to avoid confusions.
-  --sumerr: new name for '--brightnesserr'.
-  --clumpssum: new name for '--clumpbrightness'.
-  --sumnoriver: new name for '--brightnessnoriver'.
+  - "Sum" used instead of "brightness"
+    --sum: new name for the old '--brightness' column. "Brightness" has a
+      specific meaning in astronomy/physics and has units of
+      energy/time. However, astronomical images aren't in this unit, they
+      are usually in counts, or can have an arbitray units (like
+      nanomaggy). The new name is derived from what this column does (sum
+      of pixel values) to avoid confusions.
+    --sum-error: new name for '--brightnesserr'.
+    --clumps-sum: new name for '--clumpbrightness'.
+    --sum-no-river: new name for '--brightnessnoriver'.
+  - Using a hyphen to help in readability and usability:
+       Old name                         New name
+       ========                         ========
+       --areaarcsec2                    --area-arcsec2
+       --areamaxv                       --area-max-val
+       --areaminv                       --area-min-val
+       --areaxy                         --area-xy
+       --axisratio                      --axis-ratio
+       --clumpsarea                     --clumps-area
+       --clumpsgeow1                    --clumps-geo-w1
+       --clumpsgeow2                    --clumps-geo-w2
+       --clumpsgeow3                    --clumps-geo-w3
+       --clumpsgeox                     --clumps-geo-x
+       --clumpsgeoy                     --clumps-geo-y
+       --clumpsgeoz                     --clumps-geo-z
+       --clumpsmagnitude                --clumps-magnitude
+       --clumpsw1                       --clumps-w1
+       --clumpsw2                       --clumps-w2
+       --clumpsw3                       --clumps-w3
+       --clumpsx                        --clumps-x
+       --clumpsy                        --clumps-y
+       --clumpsz                        --clumps-z
+       --fracmax                        --frac-max
+       --fracmaxarea1                   --frac-max1-area
+       --fracmaxarea2                   --frac-max2-area
+       --fracmaxradius1                 --frac-max1-radius
+       --fracmaxradius2                 --frac-max2-radius
+       --fracmaxsum1                    --frac-max1-sum
+       --fracmaxsum2                    --frac-max2-sum
+       --geoarea                        --geo-area
+       --geoareaxy                      --geo-area-xy
+       --geoaxisratio                   --geo-axis-ratio
+       --geopositionangle               --geo-position-angle
+       --geosemimajor                   --geo-semi-major
+       --geosemiminor                   --geo-semi-minor
+       --geow1                          --geo-w1
+       --geow2                          --geo-w2
+       --geow3                          --geo-w3
+       --geox                           --geo-x
+       --geoy                           --geo-y
+       --geoz                           --geo-z
+       --halfmaxarea                    --half-max-area
+       --halfmaxradius                  --half-max-radius
+       --halfmaxsb                      --half-max-sb
+       --halfmaxsum                     --half-max-sum
+       --halfsumarea                    --half-sum-area
+       --halfsumradius                  --half-sum-radius
+       --halfsumsb                      --half-sum-sb
+       --hostobjid                      --host-obj-id
+       --idinhostobj                    --id-in-host-obj
+       --magnitudeerr                   --magnitude-error
+       --maxvx                          --max-val-x
+       --maxvy                          --max-val-y
+       --maxvz                          --max-val-z
+       --maxx                           --max-x
+       --maxy                           --max-y
+       --maxz                           --max-z
+       --minvx                          --min-val-x
+       --minvy                          --min-val-y
+       --minvz                          --min-val-z
+       --minx                           --min-x
+       --miny                           --min-y
+       --minz                           --min-z
+       --numclumps                      --num-clumps
+       --objid                          --obj-id
+       --positionangle                  --position-angle
+       --riverave                       --river-mean
+       --rivernum                       --river-number
+       --sberror                        --sb-error
+       --semimajor                      --semi-major
+       --semiminor                      --semi-minor
+       --sigclip-mean-sb-err            --sigclip-mean-sb-delta
+       --skystd                         --sky-std
+       --surfacebrightness              --sb
+       --upperlimitmag                  --upperlimit-mag
+       --upperlimitonesigma             --upperlimit-onesigma
+       --upperlimitquantile             --upperlimit-quantile
+       --upperlimitsb                   --upperlimit-sb
+       --upperlimitsigma                --upperlimit-sigma
+       --upperlimitskew                 --upperlimit-skew
+       --weightarea                     --weight-area
 
   MakeNoise:
   --bgnotmag: new name for the old '--bgisbrightness' option. See the
@@ -208,6 +314,12 @@ See the end of the file for license conditions.
   astscript-psf-select-stars:
   - Now uses the Gaia DR3 dataset by default (until now it was using eDR3).
 
+  astscript-psf-stamp:
+  astscript-psf-unite:
+  astscript-radial-profile:
+  --axis-ratio: new name for old '--axisratio'
+  --position-angle: new name for old '--positionangle'
+
   Library:
   - gal_blank_remove_rows: new 'onlydim0' argument to ignore vector columns
     when checking for blanks.
diff --git a/bin/mkcatalog/args.h b/bin/mkcatalog/args.h
index 37275bdb..1db8293a 100644
--- a/bin/mkcatalog/args.h
+++ b/bin/mkcatalog/args.h
@@ -414,11 +414,11 @@ struct argp_option program_options[] =
       UI_GROUP_OTHERSETTINGS
     },
     {
-      "fracmax",
+      "frac-max",
       UI_KEY_FRACMAX,
       "FLT[,FLT]",
       0,
-      "Fraction(s) in --fracmaxarea1 or --fracmaxarea2.",
+      "Fraction(s) in --frac-max* options.",
       UI_GROUP_OTHERSETTINGS,
       &p->fracmax,
       GAL_TYPE_STRING,
@@ -432,7 +432,7 @@ struct argp_option program_options[] =
       UI_KEY_SPATIALRESOLUTION,
       "FLT",
       0,
-      "Spatial resolution (for surface brightness error).",
+      "Spatial resolution (for surf. brightness err).",
       UI_GROUP_OTHERSETTINGS,
       &p->spatialresolution,
       GAL_TYPE_FLOAT32,
@@ -467,7 +467,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "objid",
+      "obj-id",
       UI_KEY_OBJID,
       0,
       0,
@@ -481,7 +481,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "hostobjid",
+      "host-obj-id",
       UI_KEY_HOSTOBJID,
       0,
       0,
@@ -495,7 +495,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "idinhostobj",
+      "id-in-host-obj",
       UI_KEY_IDINHOSTOBJ,
       0,
       0,
@@ -516,7 +516,7 @@ struct argp_option program_options[] =
     /* Position related columns (pixel). */
     {
       0, 0, 0, 0,
-      "Positional columns (pixel)",
+      "Positional (pixel/image) measurements",
       UI_GROUP_COLUMNS_POSITION_PIXEL
     },
     {
@@ -562,7 +562,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "geox",
+      "geo-x",
       UI_KEY_GEOX,
       0,
       0,
@@ -576,7 +576,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "geoy",
+      "geo-y",
       UI_KEY_GEOY,
       0,
       0,
@@ -590,7 +590,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "geoz",
+      "geo-z",
       UI_KEY_GEOZ,
       0,
       0,
@@ -604,11 +604,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "minvx",
-      UI_KEY_MINVX,
+      "min-val-x",
+      UI_KEY_MINVALX,
       0,
       0,
-      "Minimum value's X axis position",
+      "Minimum value's X axis position.",
       UI_GROUP_COLUMNS_POSITION_PIXEL,
       0,
       GAL_TYPE_INVALID,
@@ -618,11 +618,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "maxvx",
-      UI_KEY_MAXVX,
+      "max-val-x",
+      UI_KEY_MAXVALX,
       0,
       0,
-      "Maximum value's X axis position",
+      "Maximum value's X axis position.",
       UI_GROUP_COLUMNS_POSITION_PIXEL,
       0,
       GAL_TYPE_INVALID,
@@ -632,11 +632,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "minvy",
-      UI_KEY_MINVY,
+      "min-val-y",
+      UI_KEY_MINVALY,
       0,
       0,
-      "Minimum value's Y axis position",
+      "Minimum value's Y axis position.",
       UI_GROUP_COLUMNS_POSITION_PIXEL,
       0,
       GAL_TYPE_INVALID,
@@ -646,11 +646,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "maxvy",
-      UI_KEY_MAXVY,
+      "max-val-y",
+      UI_KEY_MAXVALY,
       0,
       0,
-      "Maximum value's Y axis position",
+      "Maximum value's Y axis position.",
       UI_GROUP_COLUMNS_POSITION_PIXEL,
       0,
       GAL_TYPE_INVALID,
@@ -660,11 +660,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "minvz",
-      UI_KEY_MINVZ,
+      "min-val-z",
+      UI_KEY_MINVALZ,
       0,
       0,
-      "Minimum value's Z axis position",
+      "Minimum value's Z axis position.",
       UI_GROUP_COLUMNS_POSITION_PIXEL,
       0,
       GAL_TYPE_INVALID,
@@ -674,8 +674,8 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "maxvz",
-      UI_KEY_MAXVZ,
+      "max-val-z",
+      UI_KEY_MAXVALZ,
       0,
       0,
       "Maximum value's Z axis position",
@@ -688,7 +688,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "minx",
+      "min-x",
       UI_KEY_MINX,
       0,
       0,
@@ -702,7 +702,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "maxx",
+      "max-x",
       UI_KEY_MAXX,
       0,
       0,
@@ -716,7 +716,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "miny",
+      "min-y",
       UI_KEY_MINY,
       0,
       0,
@@ -730,7 +730,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "maxy",
+      "max-y",
       UI_KEY_MAXY,
       0,
       0,
@@ -744,7 +744,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "minz",
+      "min-z",
       UI_KEY_MINZ,
       0,
       0,
@@ -758,7 +758,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "maxz",
+      "max-z",
       UI_KEY_MAXZ,
       0,
       0,
@@ -772,7 +772,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "clumpsx",
+      "clumps-x",
       UI_KEY_CLUMPSX,
       0,
       0,
@@ -786,7 +786,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "clumpsy",
+      "clumps-y",
       UI_KEY_CLUMPSY,
       0,
       0,
@@ -800,7 +800,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "clumpsz",
+      "clumps-z",
       UI_KEY_CLUMPSZ,
       0,
       0,
@@ -814,7 +814,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "clumpsgeox",
+      "clumps-geo-x",
       UI_KEY_CLUMPSGEOX,
       0,
       0,
@@ -828,7 +828,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "clumpsgeoy",
+      "clumps-geo-y",
       UI_KEY_CLUMPSGEOY,
       0,
       0,
@@ -842,7 +842,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "clumpsgeoz",
+      "clumps-geo-z",
       UI_KEY_CLUMPSGEOZ,
       0,
       0,
@@ -863,7 +863,7 @@ struct argp_option program_options[] =
     /* Position related columns (WCS). */
     {
       0, 0, 0, 0,
-      "Positional columns (WCS)",
+      "Positional (WCS) measurements",
       UI_GROUP_COLUMNS_POSITION_WCS
     },
     {
@@ -937,7 +937,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "geow1",
+      "geo-w1",
       UI_KEY_GEOW1,
       0,
       0,
@@ -951,7 +951,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "geow2",
+      "geo-w2",
       UI_KEY_GEOW2,
       0,
       0,
@@ -965,7 +965,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "geow3",
+      "geo-w3",
       UI_KEY_GEOW2,
       0,
       0,
@@ -979,7 +979,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "clumpsw1",
+      "clumps-w1",
       UI_KEY_CLUMPSW1,
       0,
       0,
@@ -993,7 +993,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "clumpsw2",
+      "clumps-w2",
       UI_KEY_CLUMPSW2,
       0,
       0,
@@ -1007,7 +1007,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "clumpsw3",
+      "clumps-w3",
       UI_KEY_CLUMPSW3,
       0,
       0,
@@ -1021,7 +1021,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "clumpsgeow1",
+      "clumps-geo-w1",
       UI_KEY_CLUMPSGEOW1,
       0,
       0,
@@ -1035,7 +1035,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "clumpsgeow2",
+      "clumps-geo-w2",
       UI_KEY_CLUMPSGEOW2,
       0,
       0,
@@ -1049,7 +1049,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "clumpsgeow3",
+      "clumps-geo-w3",
       UI_KEY_CLUMPSGEOW3,
       0,
       0,
@@ -1070,7 +1070,7 @@ struct argp_option program_options[] =
     /* Brightness/pixel-value related columns. */
     {
       0, 0, 0, 0,
-      "Brightness/magnitude (only using pixel value/error) related columns",
+      "Brightness/magnitude (only using pixel value/error) measurements",
       UI_GROUP_COLUMNS_BRIGHTNESS
     },
     {
@@ -1088,8 +1088,8 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "sumerr",
-      UI_KEY_SUMERR,
+      "sum-error",
+      UI_KEY_SUMERROR,
       0,
       0,
       "Error (1-sigma) in measuring sum.",
@@ -1102,7 +1102,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "clumpssum",
+      "clumps-sum",
       UI_KEY_CLUMPSSUM,
       0,
       0,
@@ -1116,7 +1116,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "sumnoriver",
+      "sum-no-river",
       UI_KEY_SUMNORIVER,
       0,
       0,
@@ -1200,8 +1200,8 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "magnitudeerr",
-      UI_KEY_MAGNITUDEERR,
+      "magnitude-error",
+      UI_KEY_MAGNITUDEERROR,
       0,
       0,
       "Magnitude error of objects or clumps.",
@@ -1214,7 +1214,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "clumpsmagnitude",
+      "clumps-magnitude",
       UI_KEY_CLUMPSMAGNITUDE,
       0,
       0,
@@ -1242,7 +1242,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "upperlimitmag",
+      "upperlimit-mag",
       UI_KEY_UPPERLIMITMAG,
       0,
       0,
@@ -1256,7 +1256,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "upperlimitonesigma",
+      "upperlimit-onesigma",
       UI_KEY_UPPERLIMITONESIGMA,
       0,
       0,
@@ -1270,7 +1270,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "upperlimitsigma",
+      "upperlimit-sigma",
       UI_KEY_UPPERLIMITSIGMA,
       0,
       0,
@@ -1284,7 +1284,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "upperlimitquantile",
+      "upperlimit-quantile",
       UI_KEY_UPPERLIMITQUANTILE,
       0,
       0,
@@ -1298,7 +1298,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "upperlimitskew",
+      "upperlimit-skew",
       UI_KEY_UPPERLIMITSKEW,
       0,
       0,
@@ -1312,11 +1312,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "riverave",
-      UI_KEY_RIVERAVE,
+      "river-mean",
+      UI_KEY_RIVERMEAN,
       0,
       0,
-      "Average river value surrounding a clump.",
+      "Mean river value surrounding a clump.",
       UI_GROUP_COLUMNS_BRIGHTNESS,
       0,
       GAL_TYPE_INVALID,
@@ -1326,7 +1326,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "rivernum",
+      "river-num",
       UI_KEY_RIVERNUM,
       0,
       0,
@@ -1368,7 +1368,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "skystd",
+      "sky-std",
       UI_KEY_SKYSTD,
       0,
       0,
@@ -1441,15 +1441,16 @@ struct argp_option program_options[] =
 
 
 
+
     /* Brightness/pixel-value related columns. */
     {
       0, 0, 0, 0,
-      "Surface brightness related columns (all: mag/arcsec^2)",
+      "Surface brightness measurements (all: mag/arcsec^2)",
       UI_GROUP_COLUMNS_SURFACEBRIGHTNESS
     },
     {
-      "surfacebrightness",
-      UI_KEY_SURFACEBRIGHTNESS,
+      "sb",
+      UI_KEY_SB,
       0,
       0,
       "Surface brightness.",
@@ -1462,11 +1463,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "sberror",
+      "sb-error",
       UI_KEY_SBERROR,
       0,
       0,
-      "Surface brightness error.",
+      "Surface brightness error from STD/VAR image.",
       UI_GROUP_COLUMNS_SURFACEBRIGHTNESS,
       0,
       GAL_TYPE_INVALID,
@@ -1476,7 +1477,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "upperlimitsb",
+      "upperlimit-sb",
       UI_KEY_UPPERLIMITSB,
       0,
       0,
@@ -1504,11 +1505,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "sigclip-mean-sb-err",
-      UI_KEY_SIGCLIPMEANSBERR,
+      "sigclip-mean-sb-delta",
+      UI_KEY_SIGCLIPMEANSBDELTA,
       0,
       0,
-      "Error in SB of sigclip-mean (1 pix area).",
+      "sigclip-mean-sb delta from sigclip'd STD.",
       UI_GROUP_COLUMNS_SURFACEBRIGHTNESS,
       0,
       GAL_TYPE_INVALID,
@@ -1531,7 +1532,34 @@ struct argp_option program_options[] =
       GAL_OPTIONS_NOT_SET,
       ui_column_codes_ll
     },
-
+    {
+      "half-sum-sb",
+      UI_KEY_HALFSUMSB,
+      0,
+      0,
+      "Surface brightness within --halfsumarea.",
+      UI_GROUP_COLUMNS_SURFACEBRIGHTNESS,
+      0,
+      GAL_TYPE_INVALID,
+      GAL_OPTIONS_RANGE_ANY,
+      GAL_OPTIONS_NOT_MANDATORY,
+      GAL_OPTIONS_NOT_SET,
+      ui_column_codes_ll
+    },
+    {
+      "half-max-sb",
+      UI_KEY_HALFMAXSB,
+      0,
+      0,
+      "Surface brightness within half the maximum.",
+      UI_GROUP_COLUMNS_SURFACEBRIGHTNESS,
+      0,
+      GAL_TYPE_INVALID,
+      GAL_OPTIONS_RANGE_ANY,
+      GAL_OPTIONS_NOT_MANDATORY,
+      GAL_OPTIONS_NOT_SET,
+      ui_column_codes_ll
+    },
 
 
 
@@ -1540,11 +1568,11 @@ struct argp_option program_options[] =
     /* Morphology/shape related columns. */
     {
       0, 0, 0, 0,
-      "Morphology/shape related columns",
+      "Morphology/shape (non-parametric) measurements",
       UI_GROUP_COLUMNS_MORPHOLOGY
     },
     {
-      "numclumps",
+      "num-clumps",
       UI_KEY_NUMCLUMPS,
       0,
       0,
@@ -1572,7 +1600,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "areaarcsec2",
+      "area-arcsec2",
       UI_KEY_AREAARCSEC2,
       0,
       0,
@@ -1586,11 +1614,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "areaminv",
-      UI_KEY_MINVNUM,
+      "area-min-val",
+      UI_KEY_MINVALNUM,
       0,
       0,
-      "Number of pixels with minimum value.",
+      "Number of pixels used in '--min-val-*'.",
       UI_GROUP_COLUMNS_POSITION_PIXEL,
       0,
       GAL_TYPE_INVALID,
@@ -1600,11 +1628,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "areamaxv",
-      UI_KEY_MAXVNUM,
+      "area-max-val",
+      UI_KEY_MAXVALNUM,
       0,
       0,
-      "Number of pixels with maximum value.",
+      "Number of pixels used in '--max-val-*'.",
       UI_GROUP_COLUMNS_POSITION_PIXEL,
       0,
       GAL_TYPE_INVALID,
@@ -1614,7 +1642,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "areaxy",
+      "area-xy",
       UI_KEY_AREAXY,
       0,
       0,
@@ -1628,7 +1656,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "clumpsarea",
+      "clumps-area",
       UI_KEY_CLUMPSAREA,
       0,
       0,
@@ -1642,7 +1670,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "weightarea",
+      "weight-area",
       UI_KEY_WEIGHTAREA,
       0,
       0,
@@ -1656,7 +1684,7 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "geoarea",
+      "geo-area",
       UI_KEY_GEOAREA,
       0,
       0,
@@ -1670,11 +1698,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "geoareaxy",
+      "geo-area-xy",
       UI_KEY_GEOAREAXY,
       0,
       0,
-      "Projected geoarea in first two dimensions.",
+      "Projected geo-area in first two dimensions.",
       UI_GROUP_COLUMNS_MORPHOLOGY,
       0,
       GAL_TYPE_INVALID,
@@ -1684,11 +1712,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "semimajor",
-      UI_KEY_SEMIMAJOR,
+      "fwhm",
+      UI_KEY_FWHM,
       0,
       0,
-      "RMS along major axis (in pixels).",
+      "Full width at half max (non-parametric).",
       UI_GROUP_COLUMNS_MORPHOLOGY,
       0,
       GAL_TYPE_INVALID,
@@ -1698,11 +1726,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "semiminor",
-      UI_KEY_SEMIMINOR,
+      "half-max-area",
+      UI_KEY_HALFMAXAREA,
       0,
       0,
-      "RMS along minor axis (in pixels).",
+      "No. pixels valued above half the max.",
       UI_GROUP_COLUMNS_MORPHOLOGY,
       0,
       GAL_TYPE_INVALID,
@@ -1712,11 +1740,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "axisratio",
-      UI_KEY_AXISRATIO,
+      "half-max-radius",
+      UI_KEY_HALFMAXRADIUS,
       0,
       0,
-      "Flux weighted axis ratio.",
+      "Radius at half the maximum (non-parametric).",
       UI_GROUP_COLUMNS_MORPHOLOGY,
       0,
       GAL_TYPE_INVALID,
@@ -1726,11 +1754,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "positionangle",
-      UI_KEY_POSITIONANGLE,
+      "half-max-sum",
+      UI_KEY_HALFMAXSUM,
       0,
       0,
-      "Flux weighted position angle.",
+      "Sum of pixels above half the maximum.",
       UI_GROUP_COLUMNS_MORPHOLOGY,
       0,
       GAL_TYPE_INVALID,
@@ -1740,11 +1768,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "geosemimajor",
-      UI_KEY_GEOSEMIMAJOR,
+      "half-sum-area",
+      UI_KEY_HALFSUMAREA,
       0,
       0,
-      "RMS along major axis (ignoring value).",
+      "Area containing half of --brightness.",
       UI_GROUP_COLUMNS_MORPHOLOGY,
       0,
       GAL_TYPE_INVALID,
@@ -1754,11 +1782,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "geosemiminor",
-      UI_KEY_GEOSEMIMINOR,
+      "half-sum-radius",
+      UI_KEY_HALFSUMRADIUS,
       0,
       0,
-      "RMS along minor axis (ignoring value).",
+      "Radius calculated from --halfsumarea.",
       UI_GROUP_COLUMNS_MORPHOLOGY,
       0,
       GAL_TYPE_INVALID,
@@ -1768,11 +1796,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "geoaxisratio",
-      UI_KEY_GEOAXISRATIO,
+      "frac-max1-sum",
+      UI_KEY_FRACMAX1SUM,
       0,
       0,
-      "Geometric axis ratio.",
+      "Sum of pixels brighter than 1st frac. of max.",
       UI_GROUP_COLUMNS_MORPHOLOGY,
       0,
       GAL_TYPE_INVALID,
@@ -1782,25 +1810,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "geopositionangle",
-      UI_KEY_GEOPOSITIONANGLE,
-      0,
+      "frac-max2-sum",
+      UI_KEY_FRACMAX2SUM,
       0,
-      "Geometric position angle.",
-      UI_GROUP_COLUMNS_MORPHOLOGY,
       0,
-      GAL_TYPE_INVALID,
-      GAL_OPTIONS_RANGE_ANY,
-      GAL_OPTIONS_NOT_MANDATORY,
-      GAL_OPTIONS_NOT_SET,
-      ui_column_codes_ll
-    },
-    {
-      "fwhm",
-      UI_KEY_FWHM,
-      0,
-      0,
-      "Full width at half max (non-parametric).",
+      "Sum of pixels brighter than 2nd frac. of max.",
       UI_GROUP_COLUMNS_MORPHOLOGY,
       0,
       GAL_TYPE_INVALID,
@@ -1810,11 +1824,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "halfmaxarea",
-      UI_KEY_HALFMAXAREA,
+      "frac-max1-area",
+      UI_KEY_FRACMAX1AREA,
       0,
       0,
-      "No. pixels valued above half the max.",
+      "Area containing 1st fraction of maximum.",
       UI_GROUP_COLUMNS_MORPHOLOGY,
       0,
       GAL_TYPE_INVALID,
@@ -1824,11 +1838,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "halfmaxradius",
-      UI_KEY_HALFMAXRADIUS,
+      "frac-max2-area",
+      UI_KEY_FRACMAX2AREA,
       0,
       0,
-      "Radius at half the maximum (non-parametric).",
+      "Area containing 2nd fraction of maximum.",
       UI_GROUP_COLUMNS_MORPHOLOGY,
       0,
       GAL_TYPE_INVALID,
@@ -1838,11 +1852,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "halfmaxsum",
-      UI_KEY_HALFMAXSUM,
+      "frac-max1-radius",
+      UI_KEY_FRACMAX1RADIUS,
       0,
       0,
-      "Sum of pixels above half the maximum.",
+      "Radius calculated from --fracmaxarea1.",
       UI_GROUP_COLUMNS_MORPHOLOGY,
       0,
       GAL_TYPE_INVALID,
@@ -1852,11 +1866,11 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "halfmaxsb",
-      UI_KEY_HALFMAXSB,
+      "frac-max2-radius",
+      UI_KEY_FRACMAX2RADIUS,
       0,
       0,
-      "Surface brightness within half the maximum.",
+      "Radius calculated from --fracmaxarea2.",
       UI_GROUP_COLUMNS_MORPHOLOGY,
       0,
       GAL_TYPE_INVALID,
@@ -1865,27 +1879,24 @@ struct argp_option program_options[] =
       GAL_OPTIONS_NOT_SET,
       ui_column_codes_ll
     },
+
+
+
+
+
+    /* Elliptical measurements columns. */
     {
-      "halfsumarea",
-      UI_KEY_HALFSUMAREA,
-      0,
-      0,
-      "Area containing half of --brightness.",
-      UI_GROUP_COLUMNS_MORPHOLOGY,
-      0,
-      GAL_TYPE_INVALID,
-      GAL_OPTIONS_RANGE_ANY,
-      GAL_OPTIONS_NOT_MANDATORY,
-      GAL_OPTIONS_NOT_SET,
-      ui_column_codes_ll
+      0, 0, 0, 0,
+      "Morphology/shape (elliptical) measurements",
+      UI_GROUP_COLUMNS_ELLIPTICAL
     },
     {
-      "halfsumsb",
-      UI_KEY_HALFSUMSB,
+      "semi-major",
+      UI_KEY_SEMIMAJOR,
       0,
       0,
-      "Surface brightness within --halfsumarea.",
-      UI_GROUP_COLUMNS_MORPHOLOGY,
+      "RMS along major axis (in pixels).",
+      UI_GROUP_COLUMNS_ELLIPTICAL,
       0,
       GAL_TYPE_INVALID,
       GAL_OPTIONS_RANGE_ANY,
@@ -1894,12 +1905,12 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "halfsumradius",
-      UI_KEY_HALFSUMRADIUS,
+      "semi-minor",
+      UI_KEY_SEMIMINOR,
       0,
       0,
-      "Radius calculated from --halfsumarea.",
-      UI_GROUP_COLUMNS_MORPHOLOGY,
+      "RMS along minor axis (in pixels).",
+      UI_GROUP_COLUMNS_ELLIPTICAL,
       0,
       GAL_TYPE_INVALID,
       GAL_OPTIONS_RANGE_ANY,
@@ -1908,12 +1919,12 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "fracmaxsum1",
-      UI_KEY_FRACMAXSUM1,
+      "axis-ratio",
+      UI_KEY_AXISRATIO,
       0,
       0,
-      "Sum of pixels brighter than 1st frac. of max.",
-      UI_GROUP_COLUMNS_MORPHOLOGY,
+      "Flux weighted axis ratio.",
+      UI_GROUP_COLUMNS_ELLIPTICAL,
       0,
       GAL_TYPE_INVALID,
       GAL_OPTIONS_RANGE_ANY,
@@ -1922,12 +1933,12 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "fracmaxsum2",
-      UI_KEY_FRACMAXSUM2,
+      "position-angle",
+      UI_KEY_POSITIONANGLE,
       0,
       0,
-      "Sum of pixels brighter than 2nd frac. of max.",
-      UI_GROUP_COLUMNS_MORPHOLOGY,
+      "Flux weighted position angle.",
+      UI_GROUP_COLUMNS_ELLIPTICAL,
       0,
       GAL_TYPE_INVALID,
       GAL_OPTIONS_RANGE_ANY,
@@ -1936,12 +1947,12 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "fracmaxarea1",
-      UI_KEY_FRACMAXAREA1,
+      "geo-semi-major",
+      UI_KEY_GEOSEMIMAJOR,
       0,
       0,
-      "Area containing 1st fraction of maximum.",
-      UI_GROUP_COLUMNS_MORPHOLOGY,
+      "Geometric RMS along major axis (ignoring value).",
+      UI_GROUP_COLUMNS_ELLIPTICAL,
       0,
       GAL_TYPE_INVALID,
       GAL_OPTIONS_RANGE_ANY,
@@ -1950,12 +1961,12 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "fracmaxarea2",
-      UI_KEY_FRACMAXAREA2,
+      "geo-semi-minor",
+      UI_KEY_GEOSEMIMINOR,
       0,
       0,
-      "Area containing 2nd fraction of maximum.",
-      UI_GROUP_COLUMNS_MORPHOLOGY,
+      "Geometric RMS along minor axis (ignoring value).",
+      UI_GROUP_COLUMNS_ELLIPTICAL,
       0,
       GAL_TYPE_INVALID,
       GAL_OPTIONS_RANGE_ANY,
@@ -1964,12 +1975,12 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "fracmaxradius1",
-      UI_KEY_FRACMAXRADIUS1,
+      "geo-axis-ratio",
+      UI_KEY_GEOAXISRATIO,
       0,
       0,
-      "Radius calculated from --fracmaxarea1.",
-      UI_GROUP_COLUMNS_MORPHOLOGY,
+      "Geometric (ignoring values, only lab) axis ratio.",
+      UI_GROUP_COLUMNS_ELLIPTICAL,
       0,
       GAL_TYPE_INVALID,
       GAL_OPTIONS_RANGE_ANY,
@@ -1978,12 +1989,12 @@ struct argp_option program_options[] =
       ui_column_codes_ll
     },
     {
-      "fracmaxradius2",
-      UI_KEY_FRACMAXRADIUS2,
+      "geo-position-angle",
+      UI_KEY_GEOPOSITIONANGLE,
       0,
       0,
-      "Radius calculated from --fracmaxarea2.",
-      UI_GROUP_COLUMNS_MORPHOLOGY,
+      "Geometric (ignoring values, only lab) pos. angle.",
+      UI_GROUP_COLUMNS_ELLIPTICAL,
       0,
       GAL_TYPE_INVALID,
       GAL_OPTIONS_RANGE_ANY,
@@ -1995,7 +2006,6 @@ struct argp_option program_options[] =
 
 
 
-
     {0}
   };
 
diff --git a/bin/mkcatalog/columns.c b/bin/mkcatalog/columns.c
index 1f39902c..4758ad33 100644
--- a/bin/mkcatalog/columns.c
+++ b/bin/mkcatalog/columns.c
@@ -204,6 +204,7 @@ columns_wcs_preparation(struct mkcatalogparams *p)
           switch(colcode->v)
             {
             /* High-level. */
+            case UI_KEY_SB:
             case UI_KEY_RA:
             case UI_KEY_DEC:
             case UI_KEY_SBERROR:
@@ -212,8 +213,7 @@ columns_wcs_preparation(struct mkcatalogparams *p)
             case UI_KEY_AREAARCSEC2:
             case UI_KEY_SIGCLIPSTDSB:
             case UI_KEY_SIGCLIPMEANSB:
-            case UI_KEY_SIGCLIPMEANSBERR:
-            case UI_KEY_SURFACEBRIGHTNESS:
+            case UI_KEY_SIGCLIPMEANSBDELTA:
 
             /* Low-level. */
             case UI_KEY_W1:
@@ -260,6 +260,7 @@ columns_wcs_preparation(struct mkcatalogparams *p)
         break;
 
       /* Calculate the pixel area if necessary. */
+      case UI_KEY_SB:
       case UI_KEY_SBERROR:
       case UI_KEY_HALFMAXSB:
       case UI_KEY_HALFSUMSB:
@@ -267,8 +268,7 @@ columns_wcs_preparation(struct mkcatalogparams *p)
       case UI_KEY_UPPERLIMITSB:
       case UI_KEY_SIGCLIPSTDSB:
       case UI_KEY_SIGCLIPMEANSB:
-      case UI_KEY_SIGCLIPMEANSBERR:
-      case UI_KEY_SURFACEBRIGHTNESS:
+      case UI_KEY_SIGCLIPMEANSBDELTA:
         pixscale=gal_wcs_pixel_scale(p->objects->wcs);
         p->pixelarcsecsq=pixscale[0]*pixscale[1]*3600.0f*3600.0f;
         free(pixscale);
@@ -303,7 +303,7 @@ columns_sanity_check(struct mkcatalogparams *p)
       case UI_KEY_SIGCLIPMEANSB:
       case UI_KEY_SIGCLIPNUMBER:
       case UI_KEY_SIGCLIPMEDIAN:
-      case UI_KEY_SIGCLIPMEANSBERR:
+      case UI_KEY_SIGCLIPMEANSBDELTA:
         if(isnan(p->sigmaclip[0]) || isnan(p->sigmaclip[1]))
           error(EXIT_FAILURE, 0, "no sigma-clip defined! When any of the "
                 "sigma-clipping columns are requested, it is necessary to "
@@ -349,8 +349,8 @@ columns_sanity_check(struct mkcatalogparams *p)
           case UI_KEY_GEOSEMIMINOR:
           case UI_KEY_GEOAXISRATIO:
           case UI_KEY_HALFSUMRADIUS:
-          case UI_KEY_FRACMAXRADIUS1:
-          case UI_KEY_FRACMAXRADIUS2:
+          case UI_KEY_FRACMAX1RADIUS:
+          case UI_KEY_FRACMAX2RADIUS:
           case UI_KEY_GEOPOSITIONANGLE:
             error(EXIT_FAILURE, 0, "columns requiring second moment "
                   "calculations (like semi-major, semi-minor, axis ratio "
@@ -483,7 +483,7 @@ columns_define_alloc(struct mkcatalogparams *p)
           oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1;
           break;
 
-        case UI_KEY_SURFACEBRIGHTNESS:
+        case UI_KEY_SB:
           name           = "SURFACE_BRIGHTNESS";
           unit           = "mag/arcsec^2";
           ocomment       = "Surface brightness (magnitude of 
brightness/area).";
@@ -753,8 +753,8 @@ columns_define_alloc(struct mkcatalogparams *p)
           disp_precision = 3;
           oiflag[ OCOL_C_GZ ] = 1;
 
-        case UI_KEY_MINVX:
-          name           = "MIN_V_X";
+        case UI_KEY_MINVALX:
+          name           = "MIN_VAL_X";
           unit           = "pixel";
           ocomment       = "Minimum value X pixel position.";
           ccomment       = ocomment;
@@ -767,8 +767,8 @@ columns_define_alloc(struct mkcatalogparams *p)
           oiflag[ OCOL_MINVNUM ] = ciflag[ CCOL_MINVNUM ] = 1;
           break;
 
-        case UI_KEY_MAXVX:
-          name           = "MAX_V_X";
+        case UI_KEY_MAXVALX:
+          name           = "MAX_VAL_X";
           unit           = "pixel";
           ocomment       = "Maximum value X pixel position.";
           ccomment       = ocomment;
@@ -781,8 +781,8 @@ columns_define_alloc(struct mkcatalogparams *p)
           oiflag[ OCOL_MAXVNUM ] = ciflag[ CCOL_MAXVNUM ] = 1;
           break;
 
-        case UI_KEY_MINVY:
-          name           = "MIN_V_Y";
+        case UI_KEY_MINVALY:
+          name           = "MIN_VAL_Y";
           unit           = "pixel";
           ocomment       = "Minimum value Y pixel position.";
           ccomment       = ocomment;
@@ -795,8 +795,8 @@ columns_define_alloc(struct mkcatalogparams *p)
           oiflag[ OCOL_MINVNUM ] = ciflag[ CCOL_MINVNUM ] = 1;
           break;
 
-        case UI_KEY_MAXVY:
-          name           = "MAX_V_Y";
+        case UI_KEY_MAXVALY:
+          name           = "MAX_VAL_Y";
           unit           = "pixel";
           ocomment       = "Maximum value Y pixel position.";
           ccomment       = ocomment;
@@ -809,8 +809,8 @@ columns_define_alloc(struct mkcatalogparams *p)
           oiflag[ OCOL_MAXVNUM ] = ciflag[ CCOL_MAXVNUM ] = 1;
           break;
 
-        case UI_KEY_MINVZ:
-          name           = "MIN_V_Z";
+        case UI_KEY_MINVALZ:
+          name           = "MIN_VAL_Z";
           unit           = "pixel";
           ocomment       = "Minimum value Z pixel position.";
           ccomment       = ocomment;
@@ -823,8 +823,8 @@ columns_define_alloc(struct mkcatalogparams *p)
           oiflag[ OCOL_MINVNUM ] = ciflag[ CCOL_MINVNUM ] = 1;
           break;
 
-        case UI_KEY_MAXVZ:
-          name           = "MAX_V_Z";
+        case UI_KEY_MAXVALZ:
+          name           = "MAX_VAL_Z";
           unit           = "pixel";
           ocomment       = "Maximum value Z pixel position.";
           ccomment       = ocomment;
@@ -837,8 +837,8 @@ columns_define_alloc(struct mkcatalogparams *p)
           oiflag[ OCOL_MAXVNUM ] = ciflag[ CCOL_MAXVNUM ] = 1;
           break;
 
-        case UI_KEY_MINVNUM:
-          name           = "MIN_V_NUM";
+        case UI_KEY_MINVALNUM:
+          name           = "MIN_VAL_NUM";
           unit           = "counter";
           ocomment       = "Number of pixels with the minimum value.";
           ccomment       = ocomment;
@@ -850,8 +850,8 @@ columns_define_alloc(struct mkcatalogparams *p)
           oiflag[ OCOL_MINVNUM ] = ciflag[ CCOL_MINVNUM ] = 1;
           break;
 
-        case UI_KEY_MAXVNUM:
-          name           = "MAX_V_NUM";
+        case UI_KEY_MAXVALNUM:
+          name           = "MAX_VAL_NUM";
           unit           = "counter";
           ocomment       = "Number of pixels with the maximum value..";
           ccomment       = ocomment;
@@ -1210,7 +1210,7 @@ columns_define_alloc(struct mkcatalogparams *p)
                                    ciflag[ CCOL_RIV_SUM ] = 1;
           break;
 
-        case UI_KEY_SUMERR:
+        case UI_KEY_SUMERROR:
           name           = "SUM_ERROR";
           unit           = MKCATALOG_NO_UNIT;
           ocomment       = "Error (1-sigma) in measuring sum.";
@@ -1397,7 +1397,7 @@ columns_define_alloc(struct mkcatalogparams *p)
                                        ciflag[ CCOL_RIV_SUM     ] = 1;
           break;
 
-        case UI_KEY_SIGCLIPMEANSBERR:
+        case UI_KEY_SIGCLIPMEANSBDELTA:
           name           = "SIGCLIP-MEAN-SB-ERR";
           unit           = "mag/arcsec^2";
           ocomment       = "Error in SB (over one pixel) of "
@@ -1451,7 +1451,7 @@ columns_define_alloc(struct mkcatalogparams *p)
                                    ciflag[ CCOL_RIV_NUM ] = 1;
           break;
 
-        case UI_KEY_MAGNITUDEERR:
+        case UI_KEY_MAGNITUDEERROR:
           name           = "MAGNITUDE_ERROR";
           unit           = "log";
           ocomment       = "Error in measuring magnitude.";
@@ -1589,8 +1589,8 @@ columns_define_alloc(struct mkcatalogparams *p)
           oiflag[ OCOL_UPPERLIMIT_SKEW ] = oiflag[ CCOL_UPPERLIMIT_SKEW ] = 1;
           break;
 
-        case UI_KEY_RIVERAVE:
-          name           = "RIVER_AVE";
+        case UI_KEY_RIVERMEAN:
+          name           = "RIVER_MEAN";
           unit           = MKCATALOG_NO_UNIT;
           ocomment       = NULL;
           ccomment       = "Average river value surrounding this clump.";
@@ -1904,11 +1904,11 @@ columns_define_alloc(struct mkcatalogparams *p)
           oiflag[ OCOL_HALFSUMNUM ] = ciflag[ CCOL_HALFSUMNUM ] = 1;
           break;
 
-        case UI_KEY_FRACMAXSUM1:
-        case UI_KEY_FRACMAXSUM2:
-          name           = ( colcode->v==UI_KEY_FRACMAXSUM1
-                             ? "FRAC_MAX_SUM_1"
-                             : "FRAC_MAX_SUM_2" );
+        case UI_KEY_FRACMAX1SUM:
+        case UI_KEY_FRACMAX2SUM:
+          name           = ( colcode->v==UI_KEY_FRACMAX1SUM
+                             ? "FRAC_MAX1_SUM"
+                             : "FRAC_MAX1_SUM" );
           unit           = MKCATALOG_NO_UNIT;
           otype          = GAL_TYPE_FLOAT32;
           ctype          = GAL_TYPE_FLOAT32;
@@ -1917,7 +1917,7 @@ columns_define_alloc(struct mkcatalogparams *p)
           disp_precision = 0;
           oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1;
           oiflag[ OCOL_SUM ] = ciflag[ CCOL_SUM ] = 1;
-          if(colcode->v==UI_KEY_FRACMAXSUM1)
+          if(colcode->v==UI_KEY_FRACMAX1SUM)
             {
               ocomment = "Sum of pixels brighter than 1st fraction of 
maximum.";
               oiflag[ OCOL_FRACMAX1SUM ] = ciflag[ CCOL_FRACMAX1SUM ] = 1;
@@ -1930,11 +1930,11 @@ columns_define_alloc(struct mkcatalogparams *p)
           ccomment = ocomment;
           break;
 
-        case UI_KEY_FRACMAXAREA1:
-        case UI_KEY_FRACMAXAREA2:
-          name           = ( colcode->v==UI_KEY_FRACMAXAREA1
-                             ? "FRAC_MAX_AREA_1"
-                             : "FRAC_MAX_AREA_2" );
+        case UI_KEY_FRACMAX1AREA:
+        case UI_KEY_FRACMAX2AREA:
+          name           = ( colcode->v==UI_KEY_FRACMAX1AREA
+                             ? "FRAC_MAX1_AREA"
+                             : "FRAC_MAX2_AREA" );
           unit           = "counter";
           ocomment       = "Number of pixels brighter than given fraction of 
maximum value.";
           ccomment       = ocomment;
@@ -1945,7 +1945,7 @@ columns_define_alloc(struct mkcatalogparams *p)
           disp_precision = 0;
           oiflag[ OCOL_NUM ] = ciflag[ CCOL_NUM ] = 1;
           oiflag[ OCOL_SUM ] = ciflag[ CCOL_SUM ] = 1;
-          if(colcode->v==UI_KEY_FRACMAXAREA1)
+          if(colcode->v==UI_KEY_FRACMAX1AREA)
             oiflag[ OCOL_FRACMAX1NUM ] = ciflag[ CCOL_FRACMAX1NUM ] = 1;
           else
             oiflag[ OCOL_FRACMAX2NUM ] = ciflag[ CCOL_FRACMAX2NUM ] = 1;
@@ -1954,8 +1954,8 @@ columns_define_alloc(struct mkcatalogparams *p)
         case UI_KEY_FWHM:
         case UI_KEY_HALFMAXRADIUS:
         case UI_KEY_HALFSUMRADIUS:
-        case UI_KEY_FRACMAXRADIUS1:
-        case UI_KEY_FRACMAXRADIUS2:
+        case UI_KEY_FRACMAX1RADIUS:
+        case UI_KEY_FRACMAX2RADIUS:
           unit           = "pixels";
           otype          = GAL_TYPE_FLOAT32;
           ctype          = GAL_TYPE_FLOAT32;
@@ -1993,12 +1993,12 @@ columns_define_alloc(struct mkcatalogparams *p)
               oiflag[ OCOL_HALFSUMNUM  ] = ciflag[ CCOL_HALFSUMNUM  ] = 1;
               ocomment = "Radius at half of total sum (accounting for 
ellipticity).";
               break;
-            case UI_KEY_FRACMAXRADIUS1:
+            case UI_KEY_FRACMAX1RADIUS:
               name="FRAC_MAX_RADIUS_1";
               oiflag[ OCOL_FRACMAX1NUM ] = ciflag[ CCOL_FRACMAX1NUM ] = 1;
               ocomment = "Radius derived from area of 1st fraction of 
maximum.";
               break;
-            case UI_KEY_FRACMAXRADIUS2:
+            case UI_KEY_FRACMAX2RADIUS:
               name="FRAC_MAX_RADIUS_2";
               oiflag[ OCOL_FRACMAX2NUM ] = ciflag[ CCOL_FRACMAX2NUM ] = 1;
               ocomment = "Radius derived from area of 2nd fraction of 
maximum.";
@@ -2439,7 +2439,7 @@ columns_fill(struct mkcatalog_passparams *pp)
           ((float *)colarr)[oind] = oi[OCOL_NUM]*p->pixelarcsecsq;
           break;
 
-        case UI_KEY_SURFACEBRIGHTNESS:
+        case UI_KEY_SB:
           ((float *)colarr)[oind] = MKC_SB(oi[OCOL_SUM], oi[OCOL_NUM]);
           break;
 
@@ -2524,35 +2524,35 @@ columns_fill(struct mkcatalog_passparams *pp)
                                                oi[OCOL_C_NUMALL] );
           break;
 
-        case UI_KEY_MINVX:
+        case UI_KEY_MINVALX:
           ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_MINVX], 
oi[OCOL_MINVNUM] );
           break;
 
-        case UI_KEY_MAXVX:
+        case UI_KEY_MAXVALX:
           ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_MAXVX], 
oi[OCOL_MAXVNUM] );
           break;
 
-        case UI_KEY_MINVY:
+        case UI_KEY_MINVALY:
           ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_MINVY], 
oi[OCOL_MINVNUM] );
           break;
 
-        case UI_KEY_MAXVY:
+        case UI_KEY_MAXVALY:
           ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_MAXVY], 
oi[OCOL_MAXVNUM] );
           break;
 
-        case UI_KEY_MINVZ:
+        case UI_KEY_MINVALZ:
           ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_MINVZ], 
oi[OCOL_MINVNUM] );
           break;
 
-        case UI_KEY_MAXVZ:
+        case UI_KEY_MAXVALZ:
           ((float *)colarr)[oind] = MKC_RATIO( oi[OCOL_MAXVZ], 
oi[OCOL_MAXVNUM] );
           break;
 
-        case UI_KEY_MINVNUM:
+        case UI_KEY_MINVALNUM:
           ((uint32_t *)colarr)[oind] = oi[OCOL_MINVNUM];
           break;
 
-        case UI_KEY_MAXVNUM:
+        case UI_KEY_MAXVALNUM:
           ((uint32_t *)colarr)[oind] = oi[OCOL_MAXVNUM];
           break;
 
@@ -2613,7 +2613,7 @@ columns_fill(struct mkcatalog_passparams *pp)
                                       : NAN );
           break;
 
-        case UI_KEY_SUMERR:
+        case UI_KEY_SUMERROR:
           ((float *)colarr)[oind] = columns_sum_error(p, oi, 0);
           break;
 
@@ -2665,7 +2665,7 @@ columns_fill(struct mkcatalog_passparams *pp)
           ((float *)colarr)[oind] = MKC_SB(oi[ OCOL_SIGCLIPMEAN ], 1);
           break;
 
-        case UI_KEY_SIGCLIPMEANSBERR:
+        case UI_KEY_SIGCLIPMEANSBDELTA:
           ((float *)colarr)[oind] = SCLIP_SBERR(oi[ OCOL_SIGCLIPMEAN ],
                                                 oi[ OCOL_SIGCLIPSTD ]);
           break;
@@ -2680,7 +2680,7 @@ columns_fill(struct mkcatalog_passparams *pp)
                                       : NAN );
           break;
 
-        case UI_KEY_MAGNITUDEERR:
+        case UI_KEY_MAGNITUDEERROR:
           ((float *)colarr)[oind] = MAG_ERROR(p, oi, 0);
           break;
 
@@ -2785,19 +2785,19 @@ columns_fill(struct mkcatalog_passparams *pp)
                                             oi[OCOL_HALFMAXNUM] );
           break;
 
-        case UI_KEY_FRACMAXSUM1:
+        case UI_KEY_FRACMAX1SUM:
           ((float *)colarr)[oind] = oi[OCOL_FRACMAX1SUM];
           break;
 
-        case UI_KEY_FRACMAXSUM2:
+        case UI_KEY_FRACMAX2SUM:
           ((float *)colarr)[oind] = oi[OCOL_FRACMAX2SUM];
           break;
 
-        case UI_KEY_FRACMAXAREA1:
+        case UI_KEY_FRACMAX1AREA:
           ((int32_t *)colarr)[oind] = oi[OCOL_FRACMAX1NUM];
           break;
 
-        case UI_KEY_FRACMAXAREA2:
+        case UI_KEY_FRACMAX2AREA:
           ((int32_t *)colarr)[oind] = oi[OCOL_FRACMAX2NUM];
           break;
 
@@ -2809,8 +2809,8 @@ columns_fill(struct mkcatalog_passparams *pp)
         case UI_KEY_FWHM:
         case UI_KEY_HALFMAXRADIUS:
         case UI_KEY_HALFSUMRADIUS:
-        case UI_KEY_FRACMAXRADIUS1:
-        case UI_KEY_FRACMAXRADIUS2:
+        case UI_KEY_FRACMAX1RADIUS:
+        case UI_KEY_FRACMAX2RADIUS:
           /* First derive the axis ratio (as 'tmp'), then set the index to
              use and calculate the radius from the area and axis ratio. */
           tmp = ( columns_second_order(pp, oi, UI_KEY_SEMIMINOR, 0)
@@ -2820,8 +2820,8 @@ columns_fill(struct mkcatalog_passparams *pp)
             case UI_KEY_FWHM:           tmpind=OCOL_HALFMAXNUM;  break;
             case UI_KEY_HALFMAXRADIUS:  tmpind=OCOL_HALFMAXNUM;  break;
             case UI_KEY_HALFSUMRADIUS:  tmpind=OCOL_HALFSUMNUM;  break;
-            case UI_KEY_FRACMAXRADIUS1: tmpind=OCOL_FRACMAX1NUM; break;
-            case UI_KEY_FRACMAXRADIUS2: tmpind=OCOL_FRACMAX2NUM; break;
+            case UI_KEY_FRACMAX1RADIUS: tmpind=OCOL_FRACMAX1NUM; break;
+            case UI_KEY_FRACMAX2RADIUS: tmpind=OCOL_FRACMAX2NUM; break;
             }
           tmp = sqrt( oi[tmpind]/(tmp*M_PI) );
           if(key==UI_KEY_FWHM)
@@ -2872,7 +2872,7 @@ columns_fill(struct mkcatalog_passparams *pp)
             ((float *)colarr)[cind]=ci[CCOL_NUM]*p->pixelarcsecsq;
             break;
 
-          case UI_KEY_SURFACEBRIGHTNESS:
+          case UI_KEY_SB:
             ((float *)colarr)[cind]=MKC_SB(ci[CCOL_SUM], ci[CCOL_NUM]);
             break;
 
@@ -2926,35 +2926,35 @@ columns_fill(struct mkcatalog_passparams *pp)
                                                  ci[CCOL_NUMALL] );
             break;
 
-          case UI_KEY_MINVX:
+          case UI_KEY_MINVALX:
             ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_MINVX], 
ci[CCOL_MINVNUM] );
             break;
 
-          case UI_KEY_MAXVX:
+          case UI_KEY_MAXVALX:
             ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_MAXVX], 
ci[CCOL_MAXVNUM] );
             break;
 
-          case UI_KEY_MINVY:
+          case UI_KEY_MINVALY:
             ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_MINVY], 
ci[CCOL_MINVNUM] );
             break;
 
-          case UI_KEY_MAXVY:
+          case UI_KEY_MAXVALY:
             ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_MAXVY], 
ci[CCOL_MAXVNUM] );
             break;
 
-          case UI_KEY_MINVZ:
+          case UI_KEY_MINVALZ:
             ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_MINVZ], 
ci[CCOL_MINVNUM] );
             break;
 
-          case UI_KEY_MAXVZ:
+          case UI_KEY_MAXVALZ:
             ((float *)colarr)[cind] = MKC_RATIO( ci[CCOL_MAXVZ], 
ci[CCOL_MAXVNUM] );
             break;
 
-          case UI_KEY_MINVNUM:
+          case UI_KEY_MINVALNUM:
             ((uint32_t *)colarr)[cind] = ci[CCOL_MINVNUM];
             break;
 
-          case UI_KEY_MAXVNUM:
+          case UI_KEY_MAXVALNUM:
             ((uint32_t *)colarr)[cind] = ci[CCOL_MAXVNUM];
             break;
 
@@ -2990,7 +2990,7 @@ columns_fill(struct mkcatalog_passparams *pp)
             ((float *)colarr)[cind] = columns_clump_sum(ci);
             break;
 
-          case UI_KEY_SUMERR:
+          case UI_KEY_SUMERROR:
             ((float *)colarr)[cind] = columns_sum_error(p, ci, 1);
             break;
 
@@ -3050,7 +3050,7 @@ columns_fill(struct mkcatalog_passparams *pp)
             ((float *)colarr)[cind] = MKC_MAG(ci[ CCOL_SUM ]-tmp);
             break;
 
-          case UI_KEY_MAGNITUDEERR:
+          case UI_KEY_MAGNITUDEERROR:
             ((float *)colarr)[cind] = MAG_ERROR(p, ci, 1);
             break;
 
@@ -3084,7 +3084,7 @@ columns_fill(struct mkcatalog_passparams *pp)
             ((float *)colarr)[cind] = ci[ CCOL_UPPERLIMIT_SKEW ];
             break;
 
-          case UI_KEY_RIVERAVE:
+          case UI_KEY_RIVERMEAN:
             ((float *)colarr)[cind] = ( ci[ CCOL_RIV_NUM]
                                         ? ci[ CCOL_RIV_SUM ]/ci[ CCOL_RIV_NUM]
                                         : NAN );
@@ -3161,19 +3161,19 @@ columns_fill(struct mkcatalog_passparams *pp)
                                               ci[CCOL_HALFMAXNUM] );
             break;
 
-          case UI_KEY_FRACMAXSUM1:
+          case UI_KEY_FRACMAX1SUM:
             ((int32_t *)colarr)[cind] = ci[CCOL_FRACMAX1SUM];
             break;
 
-          case UI_KEY_FRACMAXSUM2:
+          case UI_KEY_FRACMAX2SUM:
             ((int32_t *)colarr)[cind] = ci[CCOL_FRACMAX2SUM];
             break;
 
-          case UI_KEY_FRACMAXAREA1:
+          case UI_KEY_FRACMAX1AREA:
             ((int32_t *)colarr)[cind] = ci[CCOL_FRACMAX1NUM];
             break;
 
-          case UI_KEY_FRACMAXAREA2:
+          case UI_KEY_FRACMAX2AREA:
             ((int32_t *)colarr)[cind] = ci[CCOL_FRACMAX2NUM];
             break;
 
@@ -3185,8 +3185,8 @@ columns_fill(struct mkcatalog_passparams *pp)
           case UI_KEY_FWHM:
           case UI_KEY_HALFMAXRADIUS:
           case UI_KEY_HALFSUMRADIUS:
-          case UI_KEY_FRACMAXRADIUS1:
-          case UI_KEY_FRACMAXRADIUS2:
+          case UI_KEY_FRACMAX1RADIUS:
+          case UI_KEY_FRACMAX2RADIUS:
             tmp = ( columns_second_order(  pp, ci, UI_KEY_SEMIMINOR, 1)
                     / columns_second_order(pp, ci, UI_KEY_SEMIMAJOR, 1) );
             switch(key)
@@ -3194,8 +3194,8 @@ columns_fill(struct mkcatalog_passparams *pp)
               case UI_KEY_FWHM:           tmpind=CCOL_HALFMAXNUM;  break;
               case UI_KEY_HALFMAXRADIUS:  tmpind=CCOL_HALFMAXNUM;  break;
               case UI_KEY_HALFSUMRADIUS:  tmpind=CCOL_HALFSUMNUM;  break;
-              case UI_KEY_FRACMAXRADIUS1: tmpind=CCOL_FRACMAX1NUM; break;
-              case UI_KEY_FRACMAXRADIUS2: tmpind=CCOL_FRACMAX2NUM; break;
+              case UI_KEY_FRACMAX1RADIUS: tmpind=CCOL_FRACMAX1NUM; break;
+              case UI_KEY_FRACMAX2RADIUS: tmpind=CCOL_FRACMAX2NUM; break;
               }
             tmp = sqrt( ci[tmpind]/(tmp*M_PI) );
             if(key==UI_KEY_FWHM)
diff --git a/bin/mkcatalog/ui.c b/bin/mkcatalog/ui.c
index 53526c2b..dbba00dc 100644
--- a/bin/mkcatalog/ui.c
+++ b/bin/mkcatalog/ui.c
@@ -418,7 +418,7 @@ ui_read_check_only_options(struct mkcatalogparams *p)
   /* Make sure that '--fracmax' is given if necessary and that the fracsum
      values are less than one. */
   for(colcode=p->columnids; colcode!=NULL; colcode=colcode->next)
-    if( (colcode->v==UI_KEY_FRACMAXAREA1 || colcode->v==UI_KEY_FRACMAXAREA2)
+    if( (colcode->v==UI_KEY_FRACMAX1AREA || colcode->v==UI_KEY_FRACMAX2AREA)
         && p->fracmax==NULL )
       error(EXIT_FAILURE, 0, "please specify your required fractions for "
             "'--fracmaxarea' using the '--fracmax' option (for example "
@@ -440,7 +440,7 @@ ui_read_check_only_options(struct mkcatalogparams *p)
       /* If a second fracum column is necessary, make sure two values are
          given to --fracmax. */
       for(colcode=p->columnids; colcode!=NULL; colcode=colcode->next)
-        if(colcode->v==UI_KEY_FRACMAXAREA2 && p->fracmax->size==1)
+        if(colcode->v==UI_KEY_FRACMAX2AREA && p->fracmax->size==1)
           error(EXIT_FAILURE, 0, "only one value given to '--fracmax', "
                 "but '--fracmaxarea2' was requested! You need to give "
                 "the requested fraction as a second value to '--fracmax', "
diff --git a/bin/mkcatalog/ui.h b/bin/mkcatalog/ui.h
index 81acbde5..5028db01 100644
--- a/bin/mkcatalog/ui.h
+++ b/bin/mkcatalog/ui.h
@@ -41,6 +41,7 @@ enum program_args_groups
   UI_GROUP_COLUMNS_BRIGHTNESS,
   UI_GROUP_COLUMNS_SURFACEBRIGHTNESS,
   UI_GROUP_COLUMNS_MORPHOLOGY,
+  UI_GROUP_COLUMNS_ELLIPTICAL,
 };
 
 
@@ -49,8 +50,8 @@ enum program_args_groups
 
 /* Available letters for short options:
 
-   f g k w x y z
-   E H J L O R W X Y
+   a b c f g k n u w x y z
+   A B E G H J L O Q R W X Y
 */
 enum option_keys_enum
 {
@@ -64,22 +65,12 @@ enum option_keys_enum
 
   UI_KEY_IDS             = 'i',         /* Catalog columns. */
   UI_KEY_HOSTOBJID       = 'j',
-  UI_KEY_NUMCLUMPS       = 'c',
-  UI_KEY_AREA            = 'a',
   UI_KEY_X               = 'x',
   UI_KEY_Y               = 'y',
   UI_KEY_Z               = 'z',
   UI_KEY_RA              = 'r',
   UI_KEY_DEC             = 'd',
-  UI_KEY_SUM             = 'b',
   UI_KEY_MAGNITUDE       = 'm',
-  UI_KEY_MAGNITUDEERR    = 'G',
-  UI_KEY_UPPERLIMITMAG   = 'u',
-  UI_KEY_SN              = 'n',
-  UI_KEY_SEMIMAJOR       = 'A',
-  UI_KEY_SEMIMINOR       = 'B',
-  UI_KEY_AXISRATIO       = 'Q',
-  UI_KEY_POSITIONANGLE   = 'p',
 
   /* Only with long version (start with a value 1000, the rest will be set
      automatically). */
@@ -110,10 +101,12 @@ enum option_keys_enum
 
   UI_KEY_OBJID,                         /* Catalog columns. */
   UI_KEY_IDINHOSTOBJ,
+  UI_KEY_AREA,
   UI_KEY_AREAARCSEC2,
-  UI_KEY_SURFACEBRIGHTNESS,
+  UI_KEY_SB,
   UI_KEY_SBERROR,
   UI_KEY_AREAXY,
+  UI_KEY_NUMCLUMPS,
   UI_KEY_CLUMPSAREA,
   UI_KEY_WEIGHTAREA,
   UI_KEY_GEOAREA,
@@ -121,14 +114,14 @@ enum option_keys_enum
   UI_KEY_GEOX,
   UI_KEY_GEOY,
   UI_KEY_GEOZ,
-  UI_KEY_MINVX,
-  UI_KEY_MAXVX,
-  UI_KEY_MINVY,
-  UI_KEY_MAXVY,
-  UI_KEY_MINVZ,
-  UI_KEY_MAXVZ,
-  UI_KEY_MINVNUM,
-  UI_KEY_MAXVNUM,
+  UI_KEY_MINVALX,
+  UI_KEY_MAXVALX,
+  UI_KEY_MINVALY,
+  UI_KEY_MAXVALY,
+  UI_KEY_MINVALZ,
+  UI_KEY_MAXVALZ,
+  UI_KEY_MINVALNUM,
+  UI_KEY_MAXVALNUM,
   UI_KEY_CLUMPSX,
   UI_KEY_CLUMPSY,
   UI_KEY_CLUMPSZ,
@@ -153,21 +146,25 @@ enum option_keys_enum
   UI_KEY_CLUMPSGEOW1,
   UI_KEY_CLUMPSGEOW2,
   UI_KEY_CLUMPSGEOW3,
-  UI_KEY_SUMERR,
+  UI_KEY_SUM,
+  UI_KEY_SUMERROR,
   UI_KEY_CLUMPSSUM,
   UI_KEY_SUMNORIVER,
   UI_KEY_STD,
   UI_KEY_MEAN,
   UI_KEY_MEDIAN,
   UI_KEY_MAXIMUM,
+  UI_KEY_MAGNITUDEERROR,
+  UI_KEY_SN,
   UI_KEY_CLUMPSMAGNITUDE,
   UI_KEY_UPPERLIMIT,
   UI_KEY_UPPERLIMITSB,
+  UI_KEY_UPPERLIMITMAG,
   UI_KEY_UPPERLIMITONESIGMA,
   UI_KEY_UPPERLIMITSIGMA,
   UI_KEY_UPPERLIMITQUANTILE,
   UI_KEY_UPPERLIMITSKEW,
-  UI_KEY_RIVERAVE,
+  UI_KEY_RIVERMEAN,
   UI_KEY_RIVERNUM,
   UI_KEY_SKY,
   UI_KEY_SKYSTD,
@@ -176,8 +173,12 @@ enum option_keys_enum
   UI_KEY_SIGCLIPMEAN,
   UI_KEY_SIGCLIPSTD,
   UI_KEY_SIGCLIPMEANSB,
-  UI_KEY_SIGCLIPMEANSBERR,
+  UI_KEY_SIGCLIPMEANSBDELTA,
   UI_KEY_SIGCLIPSTDSB,
+  UI_KEY_SEMIMAJOR,
+  UI_KEY_SEMIMINOR,
+  UI_KEY_POSITIONANGLE,
+  UI_KEY_AXISRATIO,
   UI_KEY_GEOSEMIMAJOR,
   UI_KEY_GEOSEMIMINOR,
   UI_KEY_GEOAXISRATIO,
@@ -190,12 +191,12 @@ enum option_keys_enum
   UI_KEY_HALFSUMAREA,
   UI_KEY_HALFSUMSB,
   UI_KEY_HALFSUMRADIUS,
-  UI_KEY_FRACMAXSUM1,
-  UI_KEY_FRACMAXSUM2,
-  UI_KEY_FRACMAXAREA1,
-  UI_KEY_FRACMAXAREA2,
-  UI_KEY_FRACMAXRADIUS1,
-  UI_KEY_FRACMAXRADIUS2,
+  UI_KEY_FRACMAX1SUM,
+  UI_KEY_FRACMAX2SUM,
+  UI_KEY_FRACMAX1AREA,
+  UI_KEY_FRACMAX2AREA,
+  UI_KEY_FRACMAX1RADIUS,
+  UI_KEY_FRACMAX2RADIUS,
 };
 
 
diff --git a/bin/script/psf-select-stars.in b/bin/script/psf-select-stars.in
index e9c90668..c9491987 100644
--- a/bin/script/psf-select-stars.in
+++ b/bin/script/psf-select-stars.in
@@ -675,8 +675,8 @@ else
        qmatch=$tmpdir/axisratio-match.fits
 
        # Measure axis ratios
-       astmkcatalog $segmented --ids --ra --dec --axisratio \
-                     --positionangle --fwhm --clumpscat \
+       astmkcatalog $segmented --ids --ra --dec --axis-ratio \
+                     --position-angle --fwhm --clumpscat \
                      --output=$qraw $quiet
 
        # Match with downloaded catalog
diff --git a/bin/script/psf-stamp.in b/bin/script/psf-stamp.in
index a456a9b0..a2e629ba 100644
--- a/bin/script/psf-stamp.in
+++ b/bin/script/psf-stamp.in
@@ -108,8 +108,8 @@ $scriptname options:
   -S, --segment=STR       Output of Segment (with OBJECTS and CLUMPS).
   -N, --normop=STR        Operator for computing the normalization value
                           (mean, sigclip-mean, etc.).
-  -Q, --axisratio=FLT     Axis ratio for ellipse maskprofile (A/B).
-  -p, --positionangle=FLT Position angle for ellipse mask profile.
+  -Q, --axis-ratio=FLT    Axis ratio for ellipse maskprofile (A/B).
+  -p, --position-angle=FLT Position angle for ellipse mask profile.
   -s, --sigmaclip=FLT,FLT Sigma-clip multiple and tolerance.
   -d, --nocentering       Don't warp the center coord to central pixel.
 
@@ -318,11 +318,11 @@ do
         -s|--sigmaclip)      sigmaclip="$2";                            
check_v "$1" "$sigmaclip";  shift;shift;;
         -s=*|--sigmaclip=*)  sigmaclip="${1#*=}";                       
check_v "$1" "$sigmaclip";  shift;;
         -s*)                 sigmaclip=$(echo "$1"  | sed -e's/-s//');  
check_v "$1" "$sigmaclip";  shift;;
-        -Q|--axisratio)      axisratio="$2";                            
check_v "$1" "$axisratio";  shift;shift;;
-        -Q=*|--axisratio=*)  axisratio="${1#*=}";                       
check_v "$1" "$axisratio";  shift;;
+        -Q|--axis-ratio)     axisratio="$2";                            
check_v "$1" "$axisratio";  shift;shift;;
+        -Q=*|--axis-ratio=*) axisratio="${1#*=}";                       
check_v "$1" "$axisratio";  shift;;
         -Q*)                 axisratio=$(echo "$1"  | sed -e's/-Q//');  
check_v "$1" "$axisratio";  shift;;
-        -p|--positionangle)        positionangle="$2";                         
         check_v "$1" "$positionangle";  shift;shift;;
-        -p=*|--positionangle=*)    positionangle="${1#*=}";                    
         check_v "$1" "$positionangle";  shift;;
+        -p|--position-angle)       positionangle="$2";                         
         check_v "$1" "$positionangle";  shift;shift;;
+        -p=*|--position-angle=*)   positionangle="${1#*=}";                    
         check_v "$1" "$positionangle";  shift;;
         -p*)                       positionangle=$(echo "$1"  | sed 
-e's/-p//');        check_v "$1" "$positionangle";  shift;;
 
 
@@ -822,9 +822,9 @@ if [ x"$normradiusmin" != x   -a   x"$normradiusmax" != x 
]; then
     fi
     astscript-radial-profile $centermsk --hdu=1 --rmax=$maxr \
                              --measure=$normop $finalsigmaclip \
-                             --positionangle=$positionangle \
+                             --position-angle=$positionangle \
                              --tmpdir=$tmpdir --keeptmp \
-                             --axisratio=$axisratio \
+                             --axis-ratio=$axisratio \
                              --output=$radialprofile $quiet
 
     # The normalization value is computed from the radial profile in between
diff --git a/bin/script/psf-unite.in b/bin/script/psf-unite.in
index e3f6f822..c2726e89 100644
--- a/bin/script/psf-unite.in
+++ b/bin/script/psf-unite.in
@@ -91,8 +91,8 @@ $scriptname options:
   -I, --innerhdu=STR      HDU/extension of the inner PSF image.
   -r, --radius=FLT        Radius at which the junction is done (in pixels).
   -s, --scale=FLT         Factor by which the inner PSF is multiplied.
-  -Q, --axisratio=FLT     Axis ratio for ellipse maskprofile (A/B).
-  -p, --positionangle=FLT Position angle for ellipse mask profile.
+  -Q, --axis-ratio=FLT    Axis ratio for ellipse maskprofile (A/B).
+  -p, --position-angle=FLT Position angle for ellipse mask profile.
 
  Output:
   -o, --output            Output table with the radial profile.
@@ -281,12 +281,12 @@ do
         -s|--scale)          scale="$2";                                
check_v "$1" "$scale";  shift;shift;;
         -s=*|--scale=*)      scale="${1#*=}";                           
check_v "$1" "$scale";  shift;;
         -s*)                 scale=$(echo "$1"  | sed -e's/-f//');      
check_v "$1" "$scale";  shift;;
-        -Q|--axisratio)      axisratio="$2";                            
check_v "$1" "$axisratio";  shift;shift;;
-        -Q=*|--axisratio=*)  axisratio="${1#*=}";                       
check_v "$1" "$axisratio";  shift;;
+        -Q|--axis-ratio)     axisratio="$2";                            
check_v "$1" "$axisratio";  shift;shift;;
+        -Q=*|--axis-ratio=*) axisratio="${1#*=}";                       
check_v "$1" "$axisratio";  shift;;
         -Q*)                 axisratio=$(echo "$1"  | sed -e's/-Q//');  
check_v "$1" "$axisratio";  shift;;
-        -p|--positionangle)     positionangle="$2";                            
check_v "$1" "$positionangle";  shift;shift;;
-        -p=*|--positionangle=*) positionangle="${1#*=}";                       
check_v "$1" "$positionangle";  shift;;
-        -p*)                    positionangle=$(echo "$1"  | sed -e's/-p//');  
check_v "$1" "$positionangle";  shift;;
+        -p|--position-angle)     positionangle="$2";                           
 check_v "$1" "$positionangle";  shift;shift;;
+        -p=*|--position-angle=*) positionangle="${1#*=}";                      
 check_v "$1" "$positionangle";  shift;;
+        -p*)                     positionangle=$(echo "$1"  | sed -e's/-p//'); 
 check_v "$1" "$positionangle";  shift;;
 
         # Output parameters
         -k|--keeptmp)     keeptmp=1; shift;;
diff --git a/bin/script/radial-profile.in b/bin/script/radial-profile.in
index 70c9fec0..e3edfee0 100644
--- a/bin/script/radial-profile.in
+++ b/bin/script/radial-profile.in
@@ -106,34 +106,34 @@ experienced Gnuastro users and developers. For more 
information, please run:
 
 $scriptname options:
  Input:
-  -h, --hdu=STR           HDU/extension of all input FITS files.
-  -O, --mode=STR          Coordinate mode: img or wcs.
-  -c, --center=FLT,FLT    Coordinate of the center along 2 axes.
-  -R, --rmax=FLT          Maximum radius for the radial profile (in pixels).
-  -Q, --axisratio=FLT     Axis ratio for ellipse profiles (A/B).
-  -a, --azimuth=FLT,FLT   Azimuthal angles range (from the major axis).
-  -p, --positionangle=FLT Position angle for ellipse profiles.
-  -s, --sigmaclip=FLT,FLT Sigma-clip multiple and tolerance.
-  -z, --zeropoint=FLT     Zeropoint magnitude of input dataset.
-  -Z, --zeroisnotblank    0.0 in float or double images are not blank.
+  -h, --hdu=STR            HDU/extension of all input FITS files.
+  -O, --mode=STR           Coordinate mode: img or wcs.
+  -c, --center=FLT,FLT     Coordinate of the center along 2 axes.
+  -R, --rmax=FLT           Maximum radius for the radial profile (in pixels).
+  -Q, --axis-ratio=FLT     Axis ratio for ellipse profiles (A/B).
+  -a, --azimuth=FLT,FLT    Azimuthal angles range (from the major axis).
+  -p, --position-angle=FLT Position angle for ellipse profiles.
+  -s, --sigmaclip=FLT,FLT  Sigma-clip multiple and tolerance.
+  -z, --zeropoint=FLT      Zeropoint magnitude of input dataset.
+  -Z, --zeroisnotblank     0.0 in float or double images are not blank.
 
  Output:
-  -o, --output            Output table with the radial profile.
-  -t, --tmpdir            Directory to keep temporary files.
-  -k, --keeptmp           Keep temporal/auxiliar files.
-  -m, --measure=STR       Measurement operator (mean, sigclip-mean, etc.).
-  -P, --precision=INT     Number of digits after the decimal point for radius.
-  -v, --oversample=INT    Oversample for higher resolution radial profile.
-  -u, --undersample=INT   Undersample for lower resolution radial profile.
-  -i, --instd=FLT/STR     Sky standard deviation per pixel, as a single
-                          number or as the filename.
-  -d, --stdhdu=STR        HDU/extension of the sky standard deviation image.
+  -o, --output             Output table with the radial profile.
+  -t, --tmpdir             Directory to keep temporary files.
+  -k, --keeptmp            Keep temporal/auxiliar files.
+  -m, --measure=STR        Measurement operator (mean, sigclip-mean, etc.).
+  -P, --precision=INT      Number of digits after the decimal point for radius.
+  -v, --oversample=INT     Oversample for higher resolution radial profile.
+  -u, --undersample=INT    Undersample for lower resolution radial profile.
+  -i, --instd=FLT/STR      Sky standard deviation per pixel, as a single
+                           number or as the filename.
+  -d, --stdhdu=STR         HDU/extension of the sky standard deviation image.
 
  Operating mode:
-  -?, --help              Print this help list.
-      --cite              BibTeX citation for this program.
-  -q, --quiet             Don't print any extra information in stdout.
-  -V, --version           Print program version.
+  -?, --help               Print this help list.
+      --cite               BibTeX citation for this program.
+  -q, --quiet              Don't print any extra information in stdout.
+  -V, --version            Print program version.
 
 Mandatory or optional arguments to long options are also mandatory or optional
 for any corresponding short options.
@@ -229,15 +229,15 @@ do
         -R|--rmax)          rmax="$2";                                 check_v 
"$1" "$rmax";  shift;shift;;
         -R=*|--rmax=*)      rmax="${1#*=}";                            check_v 
"$1" "$rmax";  shift;;
         -R*)                rmax=$(echo "$1"  | sed -e's/-R//');       check_v 
"$1" "$rmax";  shift;;
-        -Q|--axisratio)     axisratio="$2";                            check_v 
"$1" "$axisratio";  shift;shift;;
-        -Q=*|--axisratio=*) axisratio="${1#*=}";                       check_v 
"$1" "$axisratio";  shift;;
-        -Q*)                axisratio=$(echo "$1"  | sed -e's/-Q//');  check_v 
"$1" "$axisratio";  shift;;
+        -Q|--axis-ratio)     axisratio="$2";                            
check_v "$1" "$axisratio";  shift;shift;;
+        -Q=*|--axis-ratio=*) axisratio="${1#*=}";                       
check_v "$1" "$axisratio";  shift;;
+        -Q*)                 axisratio=$(echo "$1"  | sed -e's/-Q//');  
check_v "$1" "$axisratio";  shift;;
         -a|--azimuth)       azimuth="$2";                               
check_v "$1" "$azimuth";  shift;shift;;
         -a=*|--azimuth=*)   azimuth="${1#*=}";                          
check_v "$1" "$azimuth";  shift;;
         -a*)                azimuth=$(echo "$1"  | sed -e's/-a//');     
check_v "$1" "$azimuth";  shift;;
-        -p|--positionangle) positionangle="$2";                        check_v 
"$1" "$positionangle";  shift;shift;;
-        -p=*|--positionangle=*) positionangle="${1#*=}";               check_v 
"$1" "$positionangle";  shift;;
-        -p*)                positionangle=$(echo "$1"  | sed -e's/-p//'); 
check_v "$1" "$positionangle";  shift;;
+        -p|--position-angle)     positionangle="$2";                        
check_v "$1" "$positionangle";  shift;shift;;
+        -p=*|--position-angle=*) positionangle="${1#*=}";               
check_v "$1" "$positionangle";  shift;;
+        -p*)                     positionangle=$(echo "$1"  | sed -e's/-p//'); 
check_v "$1" "$positionangle";  shift;;
         -s|--sigmaclip)     sigmaclip="$2";                            check_v 
"$1" "$sigmaclip";  shift;shift;;
         -s=*|--sigmaclip=*) sigmaclip="${1#*=}";                       check_v 
"$1" "$sigmaclip";  shift;;
         -s*)                sigmaclip=$(echo "$1"  | sed -e's/-s//');  check_v 
"$1" "$sigmaclip";  shift;;
@@ -759,10 +759,10 @@ fi
 #   We tested this by making a mock profile and adding different noise
 #   realizations (just changing the random number generator seed). The
 #   radial profiles of each noise realization were then measured and their
-#   scatter was compared with the '--sberror' column of MakeCatalog when
+#   scatter was compared with the '--sb-error' column of MakeCatalog when
 #   given to this radial profile script. We saw that without
 #   '--spatialresolution=0.0', the measured errors were overestimated in
-#   the center, but after adding this, the '--sberror' column was nicely
+#   the center, but after adding this, the '--sb-error' column was nicely
 #   consistent with the scatter in the mock profiles at central radii.
 cat=$tmpdir/catalog.fits
 astmkcatalog $apertures --hdu=1 --valuesfile=$values --valueshdu=1 --ids \
diff --git a/doc/gnuastro.texi b/doc/gnuastro.texi
index 86ab669a..f57d830a 100644
--- a/doc/gnuastro.texi
+++ b/doc/gnuastro.texi
@@ -632,6 +632,7 @@ MakeCatalog
 * Quantifying measurement limits::  For comparing different catalogs.
 * Measuring elliptical parameters::  Estimating elliptical parameters.
 * Adding new columns to MakeCatalog::  How to add new columns.
+* MakeCatalog measurements::    List of all the measurements/columns by 
MakeCatalog.
 * Invoking astmkcatalog::       Options and arguments to MakeCatalog.
 
 Quantifying measurement limits
@@ -644,11 +645,21 @@ Quantifying measurement limits
 * Surface brightness limit of image::  Extrapolate per-pixel noise-level to 
standard units.
 * Upper limit magnitude of image::  Measure the noise-level for a certain 
aperture.
 
+MakeCatalog measurements
+
+* Identifier columns::          Identifying labels of each row (object/clumps).
+* Position measurements in pixels::  Containing image/pixel (X/Y) measurements.
+* Position measurements in WCS::  Containing WCS (for example RA/Dec) 
measurements.
+* Brightness measurements::     Using pixel values of each label.
+* Surface brightness measurements::  Various ways to measure surface 
brightness.
+* Morphology measurements nonparametric::  Non-parametric morphology.
+* Morphology measurements elliptical::  Elliptical morphology measurements.
+* Spectra measurement in a cube::  How to get the value of a label across all 
slices.
+
 Invoking MakeCatalog
 
 * MakeCatalog inputs and basic settings::  Input files and basic settings.
 * Upper-limit settings::        Settings for upper-limit measurements.
-* MakeCatalog measurements::    Available measurements in MakeCatalog.
 * MakeCatalog output::          File names of MakeCatalog's output table.
 
 Match
@@ -3448,7 +3459,7 @@ For example, with the command below, let's generate a new 
catalog of the F160W f
 @example
 $ astmkcatalog seg/xdf-f160w.fits --ids --ra --dec --magnitude --sn \
                --zeropoint=25.94 --clumpscat --upnsigma=3 \
-               --upperlimitmag --upperlimitsigma \
+               --upperlimit-mag --upperlimit-sigma \
                --output=xdf-f160w.fits
 @end example
 
@@ -3518,7 +3529,7 @@ For example, in the Legacy 
Survey@footnote{@url{https://www.legacysurvey.org/dr9
 As mentioned above, an important caveat in this simple calculation is that we 
should only be looking at point-like objects, not simply everything.
 This is because the shape or radial slope of the profile has an important 
effect on this measurement: at the same total magnitude, a sharper object will 
have a higher S/N.
 To be more precise, we should first perform star-galaxy separation, then do 
this only for the objects that are classified as stars.
-A crude, first-order, method is to use the @option{--axisratio} option so 
MakeCatalog also measures the axis ratio, then call Table with 
@option{--range=upperlimit_sigma,,4.8:5.2} and 
@option{--range=axis_ratio,0.95:1} (in one command).
+A crude, first-order, method is to use the @option{--axis-ratio} option so 
MakeCatalog also measures the axis ratio, then call Table with 
@option{--range=upperlimit_sigma,,4.8:5.2} and 
@option{--range=axis_ratio,0.95:1} (in one command).
 Please do this for yourself as an exercise to see the difference with the 
result above.
 
 @noindent
@@ -4597,8 +4608,8 @@ Please see in @ref{Drawing with vector graphics} for the 
full list of columns/fe
 @noindent
 @strong{Drawing ellipses:} With the commands below, you can measure the 
elliptical properties of the objects and visualized them in a ready-to-publish 
PDF (we will only show the ellipses of the largest clumps):
 @example
-$ astmkcatalog ../seg/xdf-f160w.fits --ra --dec --semimajor \
-               --axisratio --positionangle --clumpscat \
+$ astmkcatalog ../seg/xdf-f160w.fits --ra --dec --semi-major \
+               --axis-ratio --position-angle --clumpscat \
                --output=ellipseinfo.fits
 $ asttable ellipseinfo.fits -hCLUMPS | awk '@{print 4@}' > params.txt
 $ asttable ellipseinfo.fits -hCLUMPS --catcolumnfile=params.txt \
@@ -5713,13 +5724,13 @@ astmkcatalog lab.fits -h1 --zeropoint=$zeropoint 
-osbl.fits \
              --valuesfile=r_detected.fits --valueshdu=INPUT-NO-SKY \
              --upmaskfile=r_detected.fits --upmaskhdu=DETECTIONS \
              --upnsigma=3 --checkuplim=1 --upnum=1000 \
-             --ids --upperlimitsb
+             --ids --upperlimit-sb
 @end example
 
 The @file{sbl.fits} catalog now contains the upper-limit surface brightness 
for a circle with an area of 25 arcsec@mymath{^2}.
 You can check the value with the command below, but the great thing is that 
now you have both of the surface brightness limiting magnitude in the headers 
discussed above, and the upper-limit surface brightness within the table.
 You can also add more profiles with different shapes and sizes if necessary.
-Of course, you can also use @option{--upperlimitsb} in your actual science 
objects and clumps to get an object-specific or clump-specific value.
+Of course, you can also use @option{--upperlimit-sb} in your actual science 
objects and clumps to get an object-specific or clump-specific value.
 
 @example
 $ asttable sbl.fits -cUPPERLIMIT_SB
@@ -5747,7 +5758,7 @@ astmkcatalog lab.fits -h1 --zeropoint=$zeropoint 
-osbl.fits \
              --valuesfile=r_detected.fits --valueshdu=INPUT-NO-SKY \
              --upmaskfile=r_detected.fits --upmaskhdu=DETECTIONS \
              --upnsigma=3 --checkuplim=1 --upnum=1000 \
-             --ids --upperlimitsb --envseed
+             --ids --upperlimit-sb --envseed
 @end example
 
 But where do all the random apertures of the upper-limit measurement fall on 
the image?
@@ -5797,7 +5808,7 @@ We will first run MakeCatalog to find the area of all the 
labels, then we will u
 
 @example
 # Run MakeCatalog to find the area of each label.
-$ astmkcatalog labeled.fits --ids --geoarea -h1 -ocat.fits
+$ astmkcatalog labeled.fits --ids --geo-area -h1 -ocat.fits
 
 ## Sort the table by the area column.
 $ asttable cat.fits --sort=AREA_FULL
@@ -5879,8 +5890,7 @@ Fortunately doing this is very easy with Gnuastro's 
MakeCatalog:
 
 @example
 $ astmkcatalog edge.fits -h1 --valuesfile=r_detected.fits \
-               --zeropoint=22.5 --ids --surfacebrightness --sn \
-               --magnitude
+               --zeropoint=22.5 --ids --sb --sn --magnitude
 $ asttable edge_cat.fits
 1      25.6971       55.2406       15.8994
 @end example
@@ -6438,11 +6448,11 @@ $ rm label/67510-masked-sat.fits label/67510-nc.fits \
 
 @noindent
 You can now simply run MakeCatalog on this image and be sure that saturated 
pixels will not affect the measurements.
-As one example, you can use MakeCatalog to find the clumps containing 
saturated pixels: recall that the @option{--area} column only calculates the 
area of non-blank pixels, while @option{--geoarea} calculates the area of the 
label (independent of their blank-ness in the values image):
+As one example, you can use MakeCatalog to find the clumps containing 
saturated pixels: recall that the @option{--area} column only calculates the 
area of non-blank pixels, while @option{--geo-area} calculates the area of the 
label (independent of their blank-ness in the values image):
 
 @example
-$ astmkcatalog label/67510-seg.fits --ids --ra --dec --area --geoarea \
-               --clumpscat --output=cat.fits
+$ astmkcatalog label/67510-seg.fits --ids --ra --dec --area \
+               --geo-area --clumpscat --output=cat.fits
 @end example
 
 The information of the clumps that have been affected by saturation can easily 
be found by selecting those with a differing value in the @code{AREA} and 
@code{AREA_FULL} columns:
@@ -24338,6 +24348,7 @@ For those who feel MakeCatalog's existing 
measurements/columns are not enough an
 * Quantifying measurement limits::  For comparing different catalogs.
 * Measuring elliptical parameters::  Estimating elliptical parameters.
 * Adding new columns to MakeCatalog::  How to add new columns.
+* MakeCatalog measurements::    List of all the measurements/columns by 
MakeCatalog.
 * Invoking astmkcatalog::       Options and arguments to MakeCatalog.
 @end menu
 
@@ -24932,7 +24943,7 @@ When the object cannot be represented as an ellipse, 
this interpretation breaks
 
 
 
-@node Adding new columns to MakeCatalog, Invoking astmkcatalog, Measuring 
elliptical parameters, MakeCatalog
+@node Adding new columns to MakeCatalog, MakeCatalog measurements, Measuring 
elliptical parameters, MakeCatalog
 @subsection Adding new columns to MakeCatalog
 
 MakeCatalog is designed to allow easy addition of different measurements over 
a labeled image (see @url{https://arxiv.org/abs/1611.06387v1, Akhlaghi [2016]}).
@@ -24999,511 +25010,266 @@ Update this manual and add a description for the 
new column.
 
 
 
+@node MakeCatalog measurements, Invoking astmkcatalog, Adding new columns to 
MakeCatalog, MakeCatalog
+@subsection MakeCatalog measurements
 
-@node Invoking astmkcatalog,  , Adding new columns to MakeCatalog, MakeCatalog
-@subsection Invoking MakeCatalog
+MakeCatalog's output measurements/columns can be specified using command-line 
options (@ref{Options}).
+The current measurements in MakeCatalog are those which only produce one final 
value for each label (for example, its magnitude: a single number).
+All the different label's measurements can be written as one column in a final 
table/catalog that contains other columns for other similar single-number 
measurements.
 
-MakeCatalog will do measurements and produce a catalog from a labeled dataset 
and optional values dataset(s).
-The executable name is @file{astmkcatalog} with the following general template
+In this case, all the different label's measurements can be written as one 
column in a final table/catalog that contains other columns for other similar 
single-number measurements.
+The majority of this section is devoted to MakeCatalog's single-valued 
measurements.
+However, MakeCatalog can also do measurements that produce more than one value 
for each label.
+Currently the only such measurement is generation of spectra from 3D cubes 
with the @option{--spectrum} option and it is discussed in the end of this 
section.
 
-@example
-$ astmkcatalog [OPTION ...] InputImage.fits
-@end example
+Command-line options are used to identify which measurements you want in the 
final catalog(s) and in what order.
+If any of the options below is called on the command-line or in any of the 
configuration files, it will be included as a column in the output catalog.
+The order of the columns is in the same order as the options were seen by 
MakeCatalog (see @ref{Configuration file precedence}).
+Some of the columns apply to both ``objects'' and ``clumps'' and some are 
particular to only one of them (for the definition of ``objects'' and 
``clumps'', see @ref{Segment}).
+Columns/options that are unique to one catalog (only objects, or only clumps), 
are explicitly marked with [Objects] or [Clumps] to specify the catalog they 
will be placed in.
 
-@noindent
-One line examples:
+@menu
+* Identifier columns::          Identifying labels of each row (object/clumps).
+* Position measurements in pixels::  Containing image/pixel (X/Y) measurements.
+* Position measurements in WCS::  Containing WCS (for example RA/Dec) 
measurements.
+* Brightness measurements::     Using pixel values of each label.
+* Surface brightness measurements::  Various ways to measure surface 
brightness.
+* Morphology measurements nonparametric::  Non-parametric morphology.
+* Morphology measurements elliptical::  Elliptical morphology measurements.
+* Spectra measurement in a cube::  How to get the value of a label across all 
slices.
+@end menu
 
-@example
-## Create catalog with RA, Dec, Magnitude and Magnitude error,
-## from Segment's output:
-$ astmkcatalog --ra --dec --magnitude --magnitudeerr seg-out.fits
+@node Identifier columns, Position measurements in pixels, MakeCatalog 
measurements, MakeCatalog measurements
+@subsubsection Identifier columns
 
-## Same catalog as above (using short options):
-$ asmkcatalog -rdmG seg-out.fits
+The identifier of each row (group of measurements) is usually the first thing 
you will be requesting from MakeCatalog.
+Without the identifier, it is not clear which measurement corresponds to which 
label for the input.
 
-## Write the catalog to a text table:
-$ astmkcatalog -mpQ seg-out.fits --output=cat.txt
+Since MakeCatalog can also optionally take sub-structure label (clumps; see 
@ref{Segment}), there are various identifiers in general that are listed below.
+The most generic (and shortest and easiest to type!) is the @option{--ids} 
option which can be used in object-only or object-clump catalogs.
 
-## Output columns specified in `columns.conf':
-$ astmkcatalog --config=columns.conf seg-out.fits
+@table @option
+@item --i
+@itemx --ids
+This is a unique option which can add multiple columns to the final catalog(s).
+Calling this option will put the object IDs (@option{--obj-id}) in the objects 
catalog and host-object-ID (@option{--host-obj-id}) and ID-in-host-object 
(@option{--id-in-host-obj}) into the clumps catalog.
+Hence if only object catalogs are required, it has the same effect as 
@option{--obj-id}.
 
-## Use object and clump labels from a K-band image, but pixel values
-## from an i-band image.
-$ astmkcatalog K_segmented.fits --hdu=DETECTIONS --clumpscat     \
-               --clumpsfile=K_segmented.fits --clumpshdu=CLUMPS  \
-               --valuesfile=i_band.fits
-@end example
+@item --obj-id
+[Objects] ID of this object.
 
-@cindex Gaussian
-@noindent
-If MakeCatalog is to do processing (not printing help or option values), an 
input labeled image should be provided.
-The options described in this section are those that are particular to 
MakeProfiles.
-For operations that MakeProfiles shares with other programs (mainly involving 
input/output or general processing steps), see @ref{Common options}.
-Also see @ref{Common program behavior} for some general characteristics of all 
Gnuastro programs including MakeCatalog.
+@item -j
+@itemx --host-obj-id
+[Clumps] The ID of the object which hosts this clump.
 
-The various measurements/columns of MakeCatalog are requested as options, 
either on the command-line or in configuration files, see @ref{Configuration 
files}.
-The full list of available columns is available in @ref{MakeCatalog 
measurements}.
-Depending on the requested columns, MakeCatalog needs more than one input 
dataset, for more details, please see @ref{MakeCatalog inputs and basic 
settings}.
-The upper-limit measurements in particular need several configuration options 
which are thoroughly discussed in @ref{Upper-limit settings}.
-Finally, in @ref{MakeCatalog output} the output file(s) created by MakeCatalog 
are discussed.
+@item --id-in-host-obj
+[Clumps] The ID of this clump in its host object.
+@end table
 
-@menu
-* MakeCatalog inputs and basic settings::  Input files and basic settings.
-* Upper-limit settings::        Settings for upper-limit measurements.
-* MakeCatalog measurements::    Available measurements in MakeCatalog.
-* MakeCatalog output::          File names of MakeCatalog's output table.
-@end menu
+@node Position measurements in pixels, Position measurements in WCS, 
Identifier columns, MakeCatalog measurements
+@subsubsection Position measurements in pixels
 
-@node MakeCatalog inputs and basic settings, Upper-limit settings, Invoking 
astmkcatalog, Invoking astmkcatalog
-@subsubsection MakeCatalog inputs and basic settings
+The position of a labeled region within your input dataset (in its own units) 
can be measured with the options in this section.
+By ``in its own units'' we mean pixels in a 2D image or voxels in a 3D cube.
+For example if the flux-weighted center of a label lies 123 pixels on the 
horizontal and 456 pixels on the vertical, the @option{--x} and @option{--y} 
options will put a value of 123 and 456 in their respective columns.
+As you see below, there are various ways to define the ``position'' of an 
object, so read the differences carefully to choose the one that corresponds 
best to your usage.
 
-MakeCatalog works by using a localized/labeled dataset (see @ref{MakeCatalog}).
-This dataset maps/labels pixels to a specific target (row number in the final 
catalog) and is thus the only necessary input dataset to produce a minimal 
catalog in any situation.
-Because it only has labels/counters, it must have an integer type (see 
@ref{Numeric data types}), see below if your labels are in a floating point 
container.
-When the requested measurements only need this dataset (for example, 
@option{--geox}, @option{--geoy}, or @option{--geoarea}), MakeCatalog will not 
read any more datasets.
+@table @option
+@item -x
+@itemx --x
+The flux weighted center of all objects and clumps along the first FITS axis 
(horizontal when viewed in SAO DS9), see @mymath{\overline{x}} in 
@ref{Measuring elliptical parameters}.
+The weight has to have a positive value (pixel value larger than the Sky 
value) to be meaningful! Specially when doing matched photometry, this might 
not happen: no pixel value might be above the Sky value.
+For such detections, the geometric center will be reported in this column (see 
@option{--geo-x}).
+You can use @option{--weight-area} to see which was used.
 
-Low-level measurements that only use the labeled image are rarely sufficient 
for any high-level science case.
-Therefore necessary input datasets depend on the requested columns in each run.
-For example, let's assume you want the brightness/magnitude and 
signal-to-noise ratio of your labeled regions.
-For these columns, you will also need to provide an extra dataset containing 
values for every pixel of the labeled input (to measure magnitude) and another 
for the Sky standard deviation (to measure error).
-All such auxiliary input files have to have the same size (number of pixels in 
each dimension) as the input labeled image.
-Their numeric data type is irrelevant (they will be converted to 32-bit 
floating point internally).
-For the full list of available measurements, see @ref{MakeCatalog 
measurements}.
+@item -y
+@itemx --y
+The flux weighted center of all objects and clumps along the second FITS axis 
(vertical when viewed in SAO DS9).
+See @option{--x}.
 
-The ``values'' dataset is used for measurements like brightness/magnitude, or 
flux-weighted positions.
-If it is a real image, by default it is assumed to be already Sky-subtracted 
prior to running MakeCatalog.
-If it is not, you use the @option{--subtractsky} option to, so MakeCatalog 
reads and subtracts the Sky dataset before any processing.
-To obtain the Sky value, you can use the @option{--sky} option of 
@ref{Statistics}, but the best recommended method is @ref{NoiseChisel}, see 
@ref{Sky value}.
+@item -z
+@itemx --z
+The flux weighted center of all objects and clumps along the third FITS
+axis. See @option{--x}.
 
-MakeCatalog can also do measurements on sub-structures of detections.
-In other words, it can produce two catalogs.
-Following the nomenclature of Segment (see @ref{Segment}), the main labeled 
input dataset is known as ``object'' labels and the (optional) sub-structure 
input dataset is known as ``clumps''.
-If MakeCatalog is run with the @option{--clumpscat} option, it will also need 
a labeled image containing clumps, similar to what Segment produces (see 
@ref{Segment output}).
-Since clumps are defined within detected regions (they exist over signal, not 
noise), MakeCatalog uses their boundaries to subtract the level of signal under 
them.
+@item --geo-x
+The geometric center of all objects and clumps along the first FITS axis axis.
+The geometric center is the average pixel positions irrespective of their 
pixel values.
 
-There are separate options to explicitly request a file name and HDU/extension 
for each of the required input datasets as fully described below (with the 
@option{--*file} format).
-When each dataset is in a separate file, these options are necessary.
-However, one great advantage of the FITS file format (that is heavily used in 
astronomy) is that it allows the storage of multiple datasets in one file.
-So in most situations (for example, if you are using the outputs of 
@ref{NoiseChisel} or @ref{Segment}), all the necessary input datasets can be in 
one file.
+@item --geo-y
+The geometric center of all objects and clumps along the second FITS axis 
axis, see @option{--geo-x}.
 
-When none of the @option{--*file} options are given, MakeCatalog will assume 
the necessary input datasets are in the file given as its argument (without any 
option).
-When the Sky or Sky standard deviation datasets are necessary and the only 
@option{--*file} option called is @option{--valuesfile}, MakeCatalog will 
search for these datasets (with the default/given HDUs) in the file given to 
@option{--valuesfile} (before looking into the main argument file).
+@item --geo-z
+The geometric center of all objects and clumps along the third FITS axis axis, 
see @option{--geo-x}.
 
-When the clumps image (necessary with the @option{--clumpscat} option) is 
used, MakeCatalog looks into the (possibly existing) @code{NUMLABS} keyword for 
the total number of clumps in the image (irrespective of how many objects there 
are).
-If it is not present, it will count them and possibly re-label the clumps so 
the clump labels always start with 1 and finish with the total number of clumps 
in each object.
-The re-labeled clumps image will be stored with the @file{-clumps-relab.fits} 
suffix.
-This can slightly slow-down the run.
+@item --min-val-x
+Position of pixel with minimum value in objects and clumps, along the first 
FITS axis.
 
-Note that @code{NUMLABS} is automatically written by Segment in its outputs, 
so if you are feeding Segment's clump labels, you can benefit from the improved 
speed.
-Otherwise, if you are creating the clumps label dataset manually, it may be 
good to include the @code{NUMLABS} keyword in its header and also be sure that 
there is no gap in the clump labels.
-For example, if an object has three clumps, they are labeled as 1, 2, 3.
-If they are labeled as 1, 3, 4, or any other combination of three positive 
integers that are not an increment of the previous, you might get unknown 
behavior.
+@item --max-val-x
+Position of pixel with maximum value in objects and clumps, along the first 
FITS axis.
 
-It may happen that your labeled objects image was created with a program that 
only outputs floating point files.
-However, you know it only has integer valued pixels that are stored in a 
floating point container.
-In such cases, you can use Gnuastro's Arithmetic program (see 
@ref{Arithmetic}) to change the numerical data type of the image 
(@file{float.fits}) to an integer type image (@file{int.fits}) with a command 
like below:
+@item --min-val-y
+Position of pixel with minimum value in objects and clumps, along the first 
FITS axis.
 
-@example
-@command{$ astarithmetic float.fits int32 --output=int.fits}
-@end example
+@item --max-val-y
+Position of pixel with maximum value in objects and clumps, along the first 
FITS axis.
 
-To summarize: if the input file to MakeCatalog is the default/full output of 
Segment (see @ref{Segment output}) you do not have to worry about any of the 
@option{--*file} options below.
-You can just give Segment's output file to MakeCatalog as described in 
@ref{Invoking astmkcatalog}.
-To feed NoiseChisel's output into MakeCatalog, just change the labeled 
dataset's header (with @option{--hdu=DETECTIONS}).
-The full list of input dataset options and general setting options are 
described below.
+@item --min-val-z
+Position of pixel with minimum value in objects and clumps, along the first 
FITS axis.
 
-@table @option
+@item --max-val-z
+Position of pixel with maximum value in objects and clumps, along the first 
FITS axis.
 
-@item -l FITS
-@itemx --clumpsfile=FITS
-The FITS file containing the labeled clumps dataset when @option{--clumpscat} 
is called (see @ref{MakeCatalog output}).
-When @option{--clumpscat} is called, but this option is not, MakeCatalog will 
look into the main input file (given as an argument) for the required 
extension/HDU (value to @option{--clumpshdu}).
+@item --min-x
+The minimum position of all objects and clumps along the first FITS axis.
 
-@item --clumpshdu=STR
-The HDU/extension of the clump labels dataset.
-Only pixels with values above zero will be considered.
-The clump labels dataset has to be an integer data type (see @ref{Numeric data 
types}) and only pixels with a value larger than zero will be used.
-See @ref{Segment output} for a description of the expected format.
+@item --max-x
+The maximum position of all objects and clumps along the first FITS axis.
 
-@item -v FITS
-@itemx --valuesfile=FITS
-The file name of the (sky-subtracted) values dataset.
-When any of the columns need values to associate with the input labels (for 
example, to measure the sum of pixel values or magnitude of a galaxy, see 
@ref{Brightness flux magnitude}), MakeCatalog will look into a ``values'' for 
the respective pixel values.
-In most common processing, this is the actual astronomical image that the 
labels were defined, or detected, over.
-The HDU/extension of this dataset in the given file can be specified with 
@option{--valueshdu}.
-If this option is not called, MakeCatalog will look for the given extension in 
the main input file.
+@item --min-y
+The minimum position of all objects and clumps along the second FITS axis.
 
-@item --valueshdu=STR/INT
-The name or number (counting from zero) of the extension containing the 
``values'' dataset, see the descriptions above and those in 
@option{--valuesfile} for more.
+@item --max-y
+The maximum position of all objects and clumps along the second FITS axis.
 
-@item -s FITS/FLT
-@itemx --insky=FITS/FLT
-Sky value as a single number, or the file name containing a dataset (different 
values per pixel or tile).
-The Sky dataset is only necessary when @option{--subtractsky} is called or 
when a column directly related to the Sky value is requested (currently 
@option{--sky}).
-This dataset may be a tessellation, with one element per tile (see 
@option{--oneelempertile} of NoiseChisel's @ref{Processing options}).
+@item --min-z
+The minimum position of all objects and clumps along the third FITS axis.
 
-When the Sky dataset is necessary but this option is not called, MakeCatalog 
will assume it is an HDU/extension (specified by @option{--skyhdu}) in one of 
the already given files.
-First it will look for it in the @option{--valuesfile} (if it is given) and 
then the main input file (given as an argument).
+@item --max-z
+The maximum position of all objects and clumps along the third FITS axis.
 
-By default the values dataset is assumed to be already Sky subtracted, so
-this dataset is not necessary for many of the columns.
+@item --clumps-x
+[Objects] The flux weighted center of all the clumps in this object along the 
first FITS axis.
+See @option{--x}.
 
-@item --skyhdu=STR
-HDU/extension of the Sky dataset, see @option{--skyfile}.
+@item --clumps-y
+[Objects] The flux weighted center of all the clumps in this object along the 
second FITS axis.
+See @option{--x}.
 
-@item --subtractsky
-Subtract the sky value or dataset from the values file prior to any
-processing.
+@item --clumps-z
+[Objects] The flux weighted center of all the clumps in this object along the 
third FITS axis.
+See @option{--x}.
 
-@item -t STR/FLT
-@itemx --instd=STR/FLT
-Sky standard deviation value as a single number, or the file name containing a 
dataset (different values per pixel or tile).
-With the @option{--variance} option you can tell MakeCatalog to interpret this 
value/dataset as a variance image, not standard deviation.
+@item --clumps-geo-x
+[Objects] The geometric center of all the clumps in this object along the 
first FITS axis.
+See @option{--geo-x}.
 
-@strong{Important note:} This must only be the SKY standard deviation or 
variance (not including the signal's contribution to the error).
-In other words, the final standard deviation of a pixel depends on how much 
signal there is in it.
-MakeCatalog will find the amount of signal within each pixel (while 
subtracting the Sky, if @option{--subtractsky} is called) and account for the 
extra error due to it's value (signal).
-Therefore if the input standard deviation (or variance) image also contains 
the contribution of signal to the error, then the final error measurements will 
be over-estimated.
+@item --clumps-geo-y
+[Objects] The geometric center of all the clumps in this object along the 
second FITS axis.
+See @option{--geo-x}.
 
-@item --stdhdu=STR
-The HDU of the Sky value standard deviation image.
+@item --clumps-geo-z
+[Objects] The geometric center of all the clumps in this object along
+the third FITS axis. See @option{--geo-z}.
+@end table
 
-@item --variance
-The dataset given to @option{--instd} (and @option{--stdhdu} has the Sky 
variance of every pixel, not the Sky standard deviation.
+@node Position measurements in WCS, Brightness measurements, Position 
measurements in pixels, MakeCatalog measurements
+@subsubsection Position measurements in WCS
 
-@item --forcereadstd
-Read the input STD image even if it is not required by any of the requested 
columns.
-This is because some of the output catalog's metadata may need it, for 
example, to calculate the dataset's surface brightness limit (see 
@ref{Quantifying measurement limits}, configured with @option{--sfmagarea} and 
@option{--sfmagnsigma} in @ref{MakeCatalog output}).
+The position of a labeled region within your input dataset (in the World 
Coordinate System, or WCS) can be measured with the options in this section.
+As you see below, there are various ways to define the ``position'' of an 
object, so read the differences carefully to choose the one that corresponds 
best to your usage.
 
-Furthermore, if the input STD image does not have the @code{MEDSTD} keyword 
(that is meant to contain the representative standard deviation of the full 
image), with this option, the median will be calculated and used for the 
surface brightness limit.
+The most common WCS coordiantes are Right Ascension (RA) and Declination in an 
equatorial system.
+Therefore, to simplify their usage, we have special @option{--ra} and 
@option{--dec} options.
+However, the WCS of datasets are in Galactic coordinates, so to be generic, 
you can use the @option{--w1}, @option{--w2} or @option{--w3} (if you have a 3D 
cube) options.
+In case your dataset's WCS is not in your desired system (for example it is 
Galactic, but you want equatorial 2000), you can use the @option{--wcscoordsys} 
option of Gnuastro's Fits program on the labeled image before running 
MakeCatalog (see @ref{Keyword inspection and manipulation}).
 
-@item -z FLT
-@itemx --zeropoint=FLT
-The zero point magnitude for the input image, see @ref{Brightness flux 
magnitude}.
+@table @option
+@item -r
+@itemx --ra
+Flux weighted right ascension of all objects or clumps, see @option{--x}.
+This is just an alias for one of the lower-level @option{--w1} or 
@option{--w2} options.
+Using the FITS WCS keywords (@code{CTYPE}), MakeCatalog will determine which 
axis corresponds to the right ascension.
+If no @code{CTYPE} keywords start with @code{RA}, an error will be printed 
when requesting this column and MakeCatalog will abort.
 
-@item --sigmaclip FLT,FLT
-The sigma-clipping parameters when any of the sigma-clipping related columns 
are requested (for example, @option{--sigclip-median} or 
@option{--sigclip-number}).
+@item -d
+@itemx --dec
+Flux weighted declination of all objects or clumps, see @option{--x}.
+This is just an alias for one of the lower-level @option{--w1} or 
@option{--w2} options.
+Using the FITS WCS keywords (@code{CTYPE}), MakeCatalog will determine which 
axis corresponds to the declination.
+If no @code{CTYPE} keywords start with @code{DEC}, an error will be printed 
when requesting this column and MakeCatalog will abort.
 
-This option takes two values: the first is the multiple of @mymath{\sigma}, 
and the second is the termination criteria.
-If the latter is larger than 1, it is read as an integer number and will be 
the number of times to clip.
-If it is smaller than 1, it is interpreted as the tolerance level to stop 
clipping.
-See @ref{Sigma clipping} for a complete explanation.
+@item --w1
+Flux weighted first WCS axis of all objects or clumps, see @option{--x}.
+The first WCS axis is commonly used as right ascension in images.
 
-@item --fracmax=FLT[,FLT]
-The fractions (one or two) of maximum value in objects or clumps to be used in 
the related columns, for example, @option{--fracmaxarea1}, 
@option{--fracmaxsum1} or @option{--fracmaxradius1}, see @ref{MakeCatalog 
measurements}.
-For the maximum value, see the description of @option{--maximum} column below.
-The value(s) of this option must be larger than 0 and smaller than 1 (they are 
a fraction).
-When only @option{--fracmaxarea1} or @option{--fracmaxsum1} is requested, one 
value must be given to this option, but if @option{--fracmaxarea2} or 
@option{--fracmaxsum2} are also requested, two values must be given to this 
option.
-The values can be written as simple floating point numbers, or as fractions, 
for example, @code{0.25,0.75} and @code{0.25,3/4} are the same.
+@item --w2
+Flux weighted second WCS axis of all objects or clumps, see @option{--x}.
+The second WCS axis is commonly used as declination in images.
 
-@item --spatialresolution=FLT
-The error in measuring spatial properties (for example, the area) in units of 
pixels.
-You can think of this as the FWHM of the dataset's PSF and is used in 
measurements like the error in surface brightness (@option{--sberror}, see 
@ref{MakeCatalog measurements}).
-Ideally, images are taken in the optimal Nyquist sampling @ref{Sampling 
theorem}, so the default value for this option is 2.
-But in practice real images my be over-sampled (usually ground-based images, 
where you will need to increase the default value) or undersampled (some 
space-based images, where you will need to decrease the default value).
-@end table
+@item --w3
+Flux weighted third WCS axis of all objects or clumps, see
+@option{--x}. The third WCS axis is commonly used as wavelength in integral
+field unit data cubes.
 
+@item --geo-w1
+Geometric center in first WCS axis of all objects or clumps, see 
@option{--geo-x}.
+The first WCS axis is commonly used as right ascension in images.
 
+@item --geo-w2
+Geometric center in second WCS axis of all objects or clumps, see 
@option{--geo-x}.
+The second WCS axis is commonly used as declination in images.
 
+@item --geo-w3
+Geometric center in third WCS axis of all objects or clumps, see
+@option{--geo-x}. The third WCS axis is commonly used as wavelength in
+integral field unit data cubes.
 
+@item --clumps-w1
+[Objects] Flux weighted center in first WCS axis of all clumps in this object, 
see @option{--x}.
+The first WCS axis is commonly used as right ascension in images.
 
-@node Upper-limit settings, MakeCatalog measurements, MakeCatalog inputs and 
basic settings, Invoking astmkcatalog
-@subsubsection Upper-limit settings
+@item --clumps-w2
+[Objects] Flux weighted declination of all clumps in this object, see 
@option{--x}.
+The second WCS axis is commonly used as declination in images.
 
-The upper-limit magnitude was discussed in @ref{Quantifying measurement 
limits}.
-Unlike other measured values/columns in MakeCatalog, the upper limit magnitude 
needs several extra parameters which are discussed here.
-All the options specific to the upper-limit measurements start with 
@option{up} for ``upper-limit''.
-The only exception is @option{--envseed} that is also present in other 
programs and is general for any job requiring random number generation in 
Gnuastro (see @ref{Generating random numbers}).
+@item --clumps-w3
+[Objects] Flux weighted center in third WCS axis of all clumps in this object, 
see @option{--x}.
+The third WCS axis is commonly used as wavelength in integral field unit data 
cubes.
 
-@cindex Reproducibility
-One very important consideration in Gnuastro is reproducibility.
-Therefore, the values to all of these parameters along with others (like the 
random number generator type and seed) are also reported in the comments of the 
final catalog when the upper limit magnitude column is desired.
-The random seed that is used to define the random positions for each object or 
clump is unique and set based on the (optionally) given seed, the total number 
of objects and clumps and also the labels of the clumps and objects.
-So with identical inputs, an identical upper-limit magnitude will be found.
-However, even if the seed is identical, when the ordering of the object/clump 
labels differs between different runs, the result of upper-limit measurements 
will not be identical.
+@item --clumps-geo-w1
+[Objects] Geometric center right ascension of all clumps in this object, see 
@option{--geo-x}.
+The first WCS axis is commonly used as right ascension in images.
 
-MakeCatalog will randomly place the object/clump footprint over the dataset.
-When the randomly placed footprint does not fall on any object or masked 
region (see @option{--upmaskfile}) it will be used in the final distribution.
-Otherwise that particular random position will be ignored and another random 
position will be generated.
-Finally, when the distribution has the desired number of successfully measured 
random samples (@option{--upnum}) the distribution's properties will be 
measured and placed in the catalog.
-
-When the profile is very large or the image is significantly covered by 
detections, it might not be possible to find the desired number of samplings in 
a reasonable time.
-MakeProfiles will continue searching until it is unable to find a successful 
position (since the last successful measurement@footnote{The counting of failed 
positions restarts on every successful measurement.}), for a large multiple of 
@option{--upnum} (currently@footnote{In Gnuastro's source, this constant number 
is defined as the @code{MKCATALOG_UPPERLIMIT_MAXFAILS_MULTIP} macro in 
@file{bin/mkcatalog/main.h}, see @ref{Downloading the source}.} this is 10).
-If @option{--upnum} successful samples cannot be found until this limit is 
reached, MakeCatalog will set the upper-limit magnitude for that object to NaN 
(blank).
-
-MakeCatalog will also print a warning if the range of positions available for 
the labeled region is smaller than double the size of the region.
-In such cases, the limited range of random positions can artificially decrease 
the standard deviation of the final distribution.
-If your dataset can allow it (it is large enough), it is recommended to use a 
larger range if you see such warnings.
-
-@table @option
-
-@item --upmaskfile=FITS
-File name of mask image to use for upper-limit calculation.
-In some cases (especially when doing matched photometry), the object labels 
specified in the main input and mask image might not be adequate.
-In other words they do not necessarily have to cover @emph{all} detected 
objects: the user might have selected only a few of the objects in their 
labeled image.
-This option can be used to ignore regions in the image in these situations 
when estimating the upper-limit magnitude.
-All the non-zero pixels of the image specified by this option (in the 
@option{--upmaskhdu} extension) will be ignored in the upper-limit magnitude 
measurements.
-
-For example, when you are using labels from another image, you can give 
NoiseChisel's objects image output for this image as the value to this option.
-In this way, you can be sure that regions with data do not harm your 
distribution.
-See @ref{Quantifying measurement limits} for more on the upper limit magnitude.
-
-@item --upmaskhdu=STR
-The extension in the file specified by @option{--upmask}.
-
-@item --upnum=INT
-The number of random samples to take for all the objects.
-A larger value to this option will give a more accurate result 
(asymptotically), but it will also slow down the process.
-When a randomly positioned sample overlaps with a detected/masked pixel it is 
not counted and another random position is found until the object completely 
lies over an undetected region.
-So you can be sure that for each object, this many samples over undetected 
objects are made.
-See the upper limit magnitude discussion in @ref{Quantifying measurement 
limits} for more.
-
-@item --uprange=INT,INT
-The range/width of the region (in pixels) to do random sampling along each 
dimension of the input image around each object's position.
-This is not a mandatory option and if not given (or given a value of zero in a 
dimension), the full possible range of the dataset along that dimension will be 
used.
-This is useful when the noise properties of the dataset vary gradually.
-In such cases, using the full range of the input dataset is going to bias the 
result.
-However, note that decreasing the range of available positions too much will 
also artificially decrease the standard deviation of the final distribution 
(and thus bias the upper-limit measurement).
-
-@item --envseed
-@cindex Seed, Random number generator
-@cindex Random number generator, Seed
-Read the random number generator type and seed value from the environment (see 
@ref{Generating random numbers}).
-Random numbers are used in calculating the random positions of different 
samples of each object.
-
-@item --upsigmaclip=FLT,FLT
-The raw distribution of random values will not be used to find the upper-limit 
magnitude, it will first be @mymath{\sigma}-clipped (see @ref{Sigma clipping}) 
to avoid outliers in the distribution (mainly the faint undetected wings of 
bright/large objects in the image).
-This option takes two values: the first is the multiple of @mymath{\sigma}, 
and the second is the termination criteria.
-If the latter is larger than 1, it is read as an integer number and will be 
the number of times to clip.
-If it is smaller than 1, it is interpreted as the tolerance level to stop 
clipping. See @ref{Sigma clipping} for a complete explanation.
-
-@item --upnsigma=FLT
-The multiple of the final (@mymath{\sigma}-clipped) standard deviation (or 
@mymath{\sigma}) used to measure the upper-limit sum or magnitude.
-
-@item --checkuplim=INT[,INT]
-Print a table of positions and measured values for all the full random 
distribution used for one particular object or clump.
-If only one integer is given to this option, it is interpreted to be an 
object's label.
-If two values are given, the first is the object label and the second is the 
ID of requested clump within it.
-
-The output is a table with three columns (its type is determined with the 
@option{--tableformat} option, see @ref{Input output options}).
-The first two columns are the position of the first pixel in each random 
sampling of this particular object/clump.
-The third column is the measured flux over that region.
-If the region overlapped with a detection or masked pixel, then its measured 
value will be a NaN (not-a-number).
-The total number of rows is thus unknown, but you can be sure that the number 
of rows with non-NaN measurements is the number given to the @option{--upnum} 
option.
-
-@end table
-
-
-@node MakeCatalog measurements, MakeCatalog output, Upper-limit settings, 
Invoking astmkcatalog
-@subsubsection MakeCatalog measurements
-
-The final group of options particular to MakeCatalog are those that specify 
which measurements/columns should be written into the final output table.
-The current measurements in MakeCatalog are those which only produce one final 
value for each label (for example, its magnitude: a single number).
-All the different label's measurements can be written as one column in a final 
table/catalog that contains other columns for other similar single-number 
measurements.
-
-In this case, all the different label's measurements can be written as one 
column in a final table/catalog that contains other columns for other similar 
single-number measurements.
-The majority of this section is devoted to MakeCatalog's single-valued 
measurements.
-However, MakeCatalog can also do measurements that produce more than one value 
for each label.
-Currently the only such measurement is generation of spectra from 3D cubes 
with the @option{--spectrum} option and it is discussed in the end of this 
section.
-
-Command-line options are used to identify which measurements you want in the 
final catalog(s) and in what order.
-If any of the options below is called on the command-line or in any of the 
configuration files, it will be included as a column in the output catalog.
-The order of the columns is in the same order as the options were seen by 
MakeCatalog (see @ref{Configuration file precedence}).
-Some of the columns apply to both ``objects'' and ``clumps'' and some are 
particular to only one of them (for the definition of ``objects'' and 
``clumps'', see @ref{Segment}).
-Columns/options that are unique to one catalog (only objects, or only clumps), 
are explicitly marked with [Objects] or [Clumps] to specify the catalog they 
will be placed in.
-
-@table @option
-
-@item --i
-@itemx --ids
-This is a unique option which can add multiple columns to the final catalog(s).
-Calling this option will put the object IDs (@option{--objid}) in the objects 
catalog and host-object-ID (@option{--hostobjid}) and ID-in-host-object 
(@option{--idinhostobj}) into the clumps catalog.
-Hence if only object catalogs are required, it has the same effect as 
@option{--objid}.
-
-@item --objid
-[Objects] ID of this object.
-
-@item -j
-@itemx --hostobjid
-[Clumps] The ID of the object which hosts this clump.
-
-@item --idinhostobj
-[Clumps] The ID of this clump in its host object.
-
-@item -x
-@itemx --x
-The flux weighted center of all objects and clumps along the first FITS axis 
(horizontal when viewed in SAO DS9), see @mymath{\overline{x}} in 
@ref{Measuring elliptical parameters}.
-The weight has to have a positive value (pixel value larger than the Sky 
value) to be meaningful! Specially when doing matched photometry, this might 
not happen: no pixel value might be above the Sky value.
-For such detections, the geometric center will be reported in this column (see 
@option{--geox}).
-You can use @option{--weightarea} to see which was used.
-
-@item -y
-@itemx --y
-The flux weighted center of all objects and clumps along the second FITS axis 
(vertical when viewed in SAO DS9).
-See @option{--x}.
-
-@item -z
-@itemx --z
-The flux weighted center of all objects and clumps along the third FITS
-axis. See @option{--x}.
-
-@item --geox
-The geometric center of all objects and clumps along the first FITS axis axis.
-The geometric center is the average pixel positions irrespective of their 
pixel values.
-
-@item --geoy
-The geometric center of all objects and clumps along the second FITS axis 
axis, see @option{--geox}.
-
-@item --geoz
-The geometric center of all objects and clumps along the third FITS axis axis, 
see @option{--geox}.
-
-@item --minvx
-Position of pixel with minimum value in objects and clumps, along the first 
FITS axis.
-
-@item --maxvx
-Position of pixel with maximum value in objects and clumps, along the first 
FITS axis.
-
-@item --minvy
-Position of pixel with minimum value in objects and clumps, along the first 
FITS axis.
-
-@item --maxvy
-Position of pixel with maximum value in objects and clumps, along the first 
FITS axis.
-
-@item --minvz
-Position of pixel with minimum value in objects and clumps, along the first 
FITS axis.
-
-@item --maxvz
-Position of pixel with maximum value in objects and clumps, along the first 
FITS axis.
-
-@item --minx
-The minimum position of all objects and clumps along the first FITS axis.
-
-@item --maxx
-The maximum position of all objects and clumps along the first FITS axis.
-
-@item --miny
-The minimum position of all objects and clumps along the second FITS axis.
-
-@item --maxy
-The maximum position of all objects and clumps along the second FITS axis.
-
-@item --minz
-The minimum position of all objects and clumps along the third FITS axis.
-
-@item --maxz
-The maximum position of all objects and clumps along the third FITS axis.
-
-@item --clumpsx
-[Objects] The flux weighted center of all the clumps in this object along the 
first FITS axis.
-See @option{--x}.
-
-@item --clumpsy
-[Objects] The flux weighted center of all the clumps in this object along the 
second FITS axis.
-See @option{--x}.
-
-@item --clumpsz
-[Objects] The flux weighted center of all the clumps in this object along the 
third FITS axis.
-See @option{--x}.
-
-@item --clumpsgeox
-[Objects] The geometric center of all the clumps in this object along the 
first FITS axis.
-See @option{--geox}.
-
-@item --clumpsgeoy
-[Objects] The geometric center of all the clumps in this object along the 
second FITS axis.
-See @option{--geox}.
-
-@item --clumpsgeoz
-[Objects] The geometric center of all the clumps in this object along
-the third FITS axis. See @option{--geoz}.
-
-@item -r
-@itemx --ra
-Flux weighted right ascension of all objects or clumps, see @option{--x}.
-This is just an alias for one of the lower-level @option{--w1} or 
@option{--w2} options.
-Using the FITS WCS keywords (@code{CTYPE}), MakeCatalog will determine which 
axis corresponds to the right ascension.
-If no @code{CTYPE} keywords start with @code{RA}, an error will be printed 
when requesting this column and MakeCatalog will abort.
-
-@item -d
-@itemx --dec
-Flux weighted declination of all objects or clumps, see @option{--x}.
-This is just an alias for one of the lower-level @option{--w1} or 
@option{--w2} options.
-Using the FITS WCS keywords (@code{CTYPE}), MakeCatalog will determine which 
axis corresponds to the declination.
-If no @code{CTYPE} keywords start with @code{DEC}, an error will be printed 
when requesting this column and MakeCatalog will abort.
-
-@item --w1
-Flux weighted first WCS axis of all objects or clumps, see @option{--x}.
-The first WCS axis is commonly used as right ascension in images.
-
-@item --w2
-Flux weighted second WCS axis of all objects or clumps, see @option{--x}.
-The second WCS axis is commonly used as declination in images.
-
-@item --w3
-Flux weighted third WCS axis of all objects or clumps, see
-@option{--x}. The third WCS axis is commonly used as wavelength in integral
-field unit data cubes.
-
-@item --geow1
-Geometric center in first WCS axis of all objects or clumps, see 
@option{--geox}.
-The first WCS axis is commonly used as right ascension in images.
-
-@item --geow2
-Geometric center in second WCS axis of all objects or clumps, see 
@option{--geox}.
-The second WCS axis is commonly used as declination in images.
-
-@item --geow3
-Geometric center in third WCS axis of all objects or clumps, see
-@option{--geox}. The third WCS axis is commonly used as wavelength in
-integral field unit data cubes.
-
-@item --clumpsw1
-[Objects] Flux weighted center in first WCS axis of all clumps in this object, 
see @option{--x}.
-The first WCS axis is commonly used as right ascension in images.
-
-@item --clumpsw2
-[Objects] Flux weighted declination of all clumps in this object, see 
@option{--x}.
+@item --clumps-geo-w2
+[Objects] Geometric center declination of all clumps in this object, see 
@option{--geo-x}.
 The second WCS axis is commonly used as declination in images.
 
-@item --clumpsw3
-[Objects] Flux weighted center in third WCS axis of all clumps in this object, 
see @option{--x}.
+@item --clumps-geo-w3
+[Objects] Geometric center in third WCS axis of all clumps in this object, see 
@option{--geo-x}.
 The third WCS axis is commonly used as wavelength in integral field unit data 
cubes.
+@end table
 
-@item --clumpsgeow1
-[Objects] Geometric center right ascension of all clumps in this object, see 
@option{--geox}.
-The first WCS axis is commonly used as right ascension in images.
-
-@item --clumpsgeow2
-[Objects] Geometric center declination of all clumps in this object, see 
@option{--geox}.
-The second WCS axis is commonly used as declination in images.
+@node Brightness measurements, Surface brightness measurements, Position 
measurements in WCS, MakeCatalog measurements
+@subsubsection Brightness measurements
 
-@item --clumpsgeow3
-[Objects] Geometric center in third WCS axis of all clumps in this object,
-see @option{--geox}. The third WCS axis is commonly used as wavelength in
-integral field unit data cubes.
+Within an image, pixels have both a position and a value.
+In the sections above all the measurements involved position (see 
@ref{Position measurements in pixels} or @ref{Position measurements in WCS}).
+The measurements in this section only deal with pixel values and ignore the 
pixel positions completely.
+In other words, for the options of this section each labeled region within the 
input is just a group of values (and their associated error values if 
necessary), and they let you do various types of measurements on the resulting 
distribution of values.
 
-@item -b
-@itemx --sum
+@table @option
+@item --sum
 The sum of all pixel values associated to this label (object or clump).
 Note that if a sky value or image has been given, it will be subtracted before 
any column measurement.
-For clumps, the ambient values (average of river pixels around the clump, 
multiplied by the area of the clump) is subtracted, see @option{--riverave}.
-So the sum of all the clump-sums in the clump catalog of one object will be 
smaller than the @option{--clumpssum} column of the objects catalog.
+For clumps, the ambient values (average of river pixels around the clump, 
multiplied by the area of the clump) is subtracted, see @option{--river-mean}.
+So the sum of all the clump-sums in the clump catalog of one object will be 
smaller than the @option{--clumps-sum} column of the objects catalog.
 
 If no usable pixels are present over the clump or object (for example, they 
are all blank), the returned value will be NaN (note that zero is meaningful).
 
-@item --sumerr
+@item --sum-error
 The (@mymath{1\sigma}) error in measuring the sum of values of a label 
(objects or clumps).
 
 The returned value will be NaN when the label covers only NaN pixels in the 
values image, or a pixel is NaN in the @option{--instd} image, but non-NaN in 
the values image.
 The latter situation usually happens when there is a bug in the previous steps 
of your analysis, and is important because those pixels with a NaN in the 
@option{--instd} image may contribute significantly to the final error.
 If you want to ignore those pixels in the error measurement, set them to zero 
(which is a meaningful number in such scenarios).
 
-@item --clumpssum
+@item --clumps-sum
 [Objects] The total sum of the clumps within an object.
 This is simply the sum of the pixels associated with clumps in the object.
 If no usable pixels are present over the clump or object (for example, they 
are all blank), the stored value will be NaN (note that zero is meaningful).
 
-@item --sumnoriver
+@item --sum-no-river
 [Clumps] The sum of Sky (not river) subtracted clump pixel values.
 By definition, for the clumps, the average value of the rivers surrounding it 
are subtracted from it for a first order accounting for contamination by 
neighbors.
 
@@ -25544,35 +25310,11 @@ For more on sigma-clipping and how to define it, see 
@option{--sigclip-number}.
 The sigma-clipped standard deviation of the object of clump's pixel 
distribution.
 For more on sigma-clipping and how to define it, see @option{--sigclip-number}.
 
-@item --sigclip-mean-sb
-Surface brightness (over 1 pixel's area in arcsec@mymath{^2}) of the 
sigma-clipped mean value of the pixel values distribution associated to each 
label (object or clump).
-This is useful in scenarios where your labels have approximately 
@emph{constant} surface brightness values @emph{after} after removing outliers: 
for example in a radial profile, see @ref{Invoking astscript-radial-profile}).
-
-In other scenarios it should be used with extreme care.
-For example over the full area of a galaxy/star the pixel distribution is not 
constant (or symmetric after adding noise), their pixel distributions are 
inherently skewed (with fewer pixels in the center, having a very large value 
and many pixels in the outer parts having lower values).
-Therefore, sigma-clipping is not meaningful for such objects!
-For more on the definition of the surface brightness, see @ref{Brightness flux 
magnitude}, for more on sigma-clipping, see @ref{Sigma clipping}.
-
-The error in this magnitude can be retrieved from the 
@option{--sigclip-mean-sb-error} column described below, and you can use the 
@option{--sigclip-std-sb} column to find when the magnitude has become 
noise-dominated (signal-to-noise ratio is roughly 1).
-See the description of these two options for more.
-
-@item --sigclip-mean-sb-err
-Error in the @option{--sigclip-mean-sb}.
-This is calculated using the equation in @ref{Surface brightness error of each 
detection}, where @mymath{\Delta{A}=0} (since sigma-clip is calculated per 
pixel and there is no error in a single pixel).
-Within the equation to derive @mymath{\Delta{M}} (the error in magnitude, 
derived in @ref{Magnitude measurement error of each detection}), the 
signal-to-noise ratio is defined by dividing the sigma-clipped mean by the 
sigma-clipped standard deviation.
-
-@item --sigclip-std-sb
-The surface brightness of the sigma-clipped standard deviation.
-This can be used to find the reliable (@mymath{1\sigma}) surface brightness 
for that label.
-In other words, if @option{--sigclip-mean-sb} is fainter than the value of 
this column, you know that noise is becoming significant.
-However, as described in @option{--sigclip-mean-sb}, the sigma-clipped 
measurements of MakeCatalog should only be used in certain situations like 
radial profiles, see the description there for more.
-
 @item -m
 @itemx --magnitude
 The magnitude of clumps or objects, see @option{--sum}.
 
-@item -e
-@itemx --magnitudeerr
+@item --magnitude-error
 The magnitude error of clumps or objects.
 The magnitude error is calculated from the signal-to-noise ratio (see 
@option{--sn} and @ref{Quantifying measurement limits}).
 Note that until now this error assumes uncorrelated pixel values and also does 
not include the error in estimating the aperture (or error in generating the 
labeled image).
@@ -25584,9 +25326,8 @@ The returned value will be NaN when the label covers 
only NaN pixels in the valu
 The latter situation usually happens when there is a bug in the previous steps 
of your analysis, and is important because those pixels with a NaN in the 
@option{--instd} image may contribute significantly to the final error.
 If you want to ignore those pixels in the error measurement, set them to zero 
(which is a meaningful number in such scenarios).
 
-
-@item --clumpsmagnitude
-[Objects] The magnitude of all clumps in this object, see @option{--clumpssum}.
+@item --clumps-magnitude
+[Objects] The magnitude of all clumps in this object, see 
@option{--clumps-sum}.
 
 @item --upperlimit
 The upper limit value (in units of the input image) for this object or clump.
@@ -25594,38 +25335,34 @@ This is the sigma-clipped standard deviation of the 
random distribution, multipl
 See @ref{Quantifying measurement limits} and @ref{Upper-limit settings} for a 
complete explanation.
 This is very important for the fainter and smaller objects in the image where 
the measured magnitudes are not reliable.
 
-@item --upperlimitmag
+@item --upperlimit-mag
 The upper limit magnitude for this object or clump.
 See @ref{Quantifying measurement limits} and @ref{Upper-limit settings} for a 
complete explanation.
 This is very important for the fainter and smaller objects in the image where 
the measured magnitudes are not reliable.
 
-@item --upperlimitsb
-The upper-limit surface brightness (in units of mag/arcsec@mymath{^2}) of this 
labeled region (object or clump).
-This is just a simple wrapper over lower-level columns: setting B and A as the 
value in the columns @option{--upperlimit} and @option{--areaarcsec2}, we fill 
this column by simply use the surface brightness equation of @ref{Brightness 
flux magnitude}.
-
-@item --upperlimitonesigma
+@item --upperlimit-onesigma
 The @mymath{1\sigma} upper limit value (in units of the input image) for this 
object or clump.
 See @ref{Quantifying measurement limits} and @ref{Upper-limit settings} for a 
complete explanation.
 When @option{--upnsigma=1}, this column's values will be the same as 
@option{--upperlimit}.
 
-@item --upperlimitsigma
+@item --upperlimit-sigma
 The position of the label's sum measured within the distribution of randomly 
placed upperlimit measurements in units of the distribution's @mymath{\sigma} 
or standard deviation.
 See @ref{Quantifying measurement limits} and @ref{Upper-limit settings} for a 
complete explanation.
 
-@item --upperlimitquantile
+@item --upperlimit-quantile
 The position of the label's sum within the distribution of randomly placed 
upperlimit measurements as a quantile (value between 0 or 1).
 See @ref{Quantifying measurement limits} and @ref{Upper-limit settings} for a 
complete explanation.
 If the object is brighter than the brightest randomly placed profile, a value 
of @code{inf} is returned.
 If it is less than the minimum, a value of @code{-inf} is reported.
 
-@item --upperlimitskew
+@item --upperlimit-skew
 @cindex Skewness
 This column contains the non-parametric skew of the @mymath{\sigma}-clipped 
random distribution that was used to estimate the upper-limit magnitude.
 Taking @mymath{\mu} as the mean, @mymath{\nu} as the median and 
@mymath{\sigma} as the standard deviation, the traditional definition of 
skewness is defined as: @mymath{(\mu-\nu)/\sigma}.
 
 This can be a good measure to see how much you can trust the random 
measurements, or in other words, how accurately the regions with signal have 
been masked/detected. If the skewness is strong (and to the positive), then you 
can tell that you have a lot of undetected signal in the dataset, and therefore 
that the upper-limit measurement (and other measurements) are not reliable.
 
-@item --riverave
+@item --river-mean
 [Clumps] The average of the river pixel values around this clump.
 River pixels were defined in Akhlaghi and Ichikawa 2015.
 In short they are the pixels immediately outside of the clumps.
@@ -25634,251 +25371,590 @@ It can generally also be used as a scale to gauge 
the base (ambient) flux surrou
 In case there was no river pixels, then this column will have the value of the 
Sky under the clump.
 So note that this value is @emph{not} sky subtracted.
 
-@item --rivernum
+@item --river-num
 [Clumps] The number of river pixels around this clump, see
-@option{--riverave}.
+@option{--river-mean}.
+
+@item --sn
+The Signal to noise ratio (S/N) of all clumps or objects.
+See Akhlaghi and Ichikawa (2015) for the exact equations used.
+
+The returned value will be NaN when the label covers only NaN pixels in the 
values image, or a pixel is NaN in the @option{--instd} image, but non-NaN in 
the values image.
+The latter situation usually happens when there is a bug in the previous steps 
of your analysis, and is important because those pixels with a NaN in the 
@option{--instd} image may contribute significantly to the final error.
+If you want to ignore those pixels in the error measurement, set them to zero 
(which is a meaningful number).
+
+@item --sky
+The sky flux (per pixel) value under this object or clump.
+This is actually the mean value of all the pixels in the sky image that lie on 
the same position as the object or clump.
+
+@item --sky-std
+The sky value standard deviation (per pixel) for this clump or object.
+This is the square root of the mean variance under the object, or the root 
mean square.
+@end table
+
+@node Surface brightness measurements, Morphology measurements nonparametric, 
Brightness measurements, MakeCatalog measurements
+@subsubsection Surface brightness measurements
+
+In astronomy, Surface brightness is most commonly measured in units of 
magnitudes per arcsec@mymath{^2} (for the formal definition, see 
@ref{Brightness flux magnitude}).
+Therefore it involves both the values of the pixels within each input label 
(or output row) and their position.
+
+@table @option
+@item --sb
+The surface brightness (in units of mag/arcsec@mymath{^2}) of the labeled 
region (objects or clumps).
+For more on the definition of the surface brightness, see @ref{Brightness flux 
magnitude}.
+
+@item --sb-error
+Error in measuring the surface brightness (the @option{--sb} column).
+This column will use the value given to @option{--spatialresolution} in the 
processing (in pixels).
+For more on @option{--spatialresolution}, see @ref{MakeCatalog inputs and 
basic settings} and for the equation used to derive the surface brightness 
error, see @ref{Surface brightness error of each detection}.
+
+@item --upperlimit-sb
+The upper-limit surface brightness (in units of mag/arcsec@mymath{^2}) of this 
labeled region (object or clump).
+In other words, this option measures the surface brightness of noise within 
the footprint of each input label.
+
+This is just a simple wrapper over lower-level columns: setting B and A as the 
value in the columns @option{--upperlimit} and @option{--area-arcsec2}, we fill 
this column by simply use the surface brightness equation of @ref{Brightness 
flux magnitude}.
+
+@item --half-sum-sb
+Surface brightness (in units of mag/arcsec@mymath{^2}) within the area that 
contains half the total sum of the label's pixels (object or clump).
+This is useful as a measure of the sharpness of an astronomical object: for 
example a star will have very few pixels at half the maximum, so its 
@option{--half-sum-sb} will be much brighter than a galaxy at the same 
magnitude.
+Also consider @option{--half-max-sb} below.
+
+This column just plugs in the values of half the value of the @option{--sum} 
column and the @option{--half-sum-area} column, into the surface brightness 
equation.
+Therefore please see the description in @option{--half-sum-area} to understand 
the systematics of this column and potential biases (see @ref{Morphology 
measurements nonparametric}).
+
+@item --half-max-sb
+The surface brightness (in units of mag/arcsec@mymath{^2}) within the region 
that contains half the maximum value of the labeled region.
+Like @option{--half-sum-sb} this option this is a good way to identify the 
``central'' surface brightness of an object.
+To know when this measurement is reasonable, see the description of 
@option{--fwhm} in @ref{Morphology measurements nonparametric}.
+
+@item --sigclip-mean-sb
+Surface brightness (over 1 pixel's area in arcsec@mymath{^2}) of the 
sigma-clipped mean value of the pixel values distribution associated to each 
label (object or clump).
+This is useful in scenarios where your labels have approximately 
@emph{constant} surface brightness values @emph{after} after removing outliers: 
for example in a radial profile, see @ref{Invoking astscript-radial-profile}).
+
+In other scenarios it should be used with extreme care.
+For example over the full area of a galaxy/star the pixel distribution is not 
constant (or symmetric after adding noise), their pixel distributions are 
inherently skewed (with fewer pixels in the center, having a very large value 
and many pixels in the outer parts having lower values).
+Therefore, sigma-clipping is not meaningful for such objects!
+For more on the definition of the surface brightness, see @ref{Brightness flux 
magnitude}, for more on sigma-clipping, see @ref{Sigma clipping}.
+
+The error in this magnitude can be retrieved from the 
@option{--sigclip-mean-sb-delta} column described below, and you can use the 
@option{--sigclip-std-sb} column to find when the magnitude has become 
noise-dominated (signal-to-noise ratio is roughly 1).
+See the description of these two options for more.
+
+@item --sigclip-mean-sb-delta
+Scatter in the @option{--sigclip-mean-sb} without using the standard deviation 
of each pixel (that is given by @option{--instd} in @ref{MakeCatalog inputs and 
basic settings}).
+The scatter here is measured from the values of the label themselves.
+This measurement is therefore most meaningful when you expect the flux across 
one label to be constant (as in a radial profile for example).
+
+This is calculated using the equation in @ref{Surface brightness error of each 
detection}, where @mymath{\Delta{A}=0} (since sigma-clip is calculated per 
pixel and there is no error in a single pixel).
+Within the equation to derive @mymath{\Delta{M}} (the error in magnitude, 
derived in @ref{Magnitude measurement error of each detection}), the 
signal-to-noise ratio is defined by dividing the sigma-clipped mean by the 
sigma-clipped standard deviation.
+
+@item --sigclip-std-sb
+The surface brightness of the sigma-clipped standard deviation of all the 
pixels with the same label.
+For labels that are expected to have the same value in all their pixels (for 
example each annulus of a radial profile) this can be used to find the reliable 
(@mymath{1\sigma}) surface brightness for that label.
+In other words, if @option{--sigclip-mean-sb} is fainter than the value of 
this column, you know that noise is becoming significant.
+However, as described in @option{--sigclip-mean-sb}, the sigma-clipped 
measurements of MakeCatalog should only be used in certain situations like 
radial profiles, see the description there for more.
+@end table
+
+@node Morphology measurements nonparametric, Morphology measurements 
elliptical, Surface brightness measurements, MakeCatalog measurements
+@subsubsection Morphology measurements (non-parametric)
+
+Morphology defined as a way to quantify the ``shape'' of an object in your 
input image.
+This includes both the position and value of the pixels within your input 
labels.
+There are many ways to define the morphology of an object.
+In this section, we will review the available non-parametric measures of 
morphology.
+By non-parametric, we mean that no functional shape is assumed for the 
measurement.
+
+In @ref{Morphology measurements elliptical} you can see some parametric 
elliptical measurements (which are only valid when the object is actually an 
ellipse).
+
+@table @option
+@item --num-clumps
+[Objects] The number of clumps in this object.
+
+@item --area
+The raw area (number of pixels/voxels) in any clump or object independent of 
what pixel it lies over (if it is NaN/blank or unused for example).
+
+@item --arcsec2-area
+The used (non-blank in values image) area of the labeled region in units of 
arc-seconds squared.
+This column is just the value of the @option{--area} column, multiplied by the 
area of each pixel in the input image (in units of arcsec^2).
+Similar to the @option{--ra} or @option{--dec} columns, for this option to 
work, the objects extension used has to have a WCS structure.
+
+@item --area-min-val
+The number of pixels that are equal to the minimum value of the labeled region 
(clump or object).
+
+@item --area-max-val
+The number of pixels that are equal to the maximum value of the labeled region 
(clump or object).
+
+@item --area-xy
+@cindex IFU: Integral Field Unit
+@cindex Integral Field Unit
+Similar to @option{--area}, when the clump or object is projected onto the 
first two dimensions.
+This is only available for 3-dimensional datasets.
+When working with Integral Field Unit (IFU) datasets, this projection onto the 
first two dimensions would be a narrow-band image.
+
+@item --fwhm
+@cindex FWHM
+The full width at half maximum (in units of pixels, along the semi-major axis) 
of the labeled region (object or clump).
+The maximum value is estimated from the mean of the top-three pixels with the 
highest values, see the description under @option{--maximum}.
+The number of pixels that have half the value of that maximum are then found 
(value in the @option{--half-max-area} column) and a radius is estimated from 
the area.
+See the description under @option{--half-sum-radius} for more on converting 
area to radius along major axis.
+
+Because of its non-parametric nature, this column is most reliable on clumps 
and should only be used in objects with great caution.
+This is because objects can have more than one clump (peak with true signal) 
and multiple peaks are not treated separately in objects, so the result of this 
column will be biased.
+
+Also, because of its non-parametric nature, this FWHM it does not account for 
the PSF, and it will be strongly affected by noise if the object is 
faint/diffuse
+So when half the maximum value (which can be requested using the 
@option{--maximum} column) is too close to the local noise level (which can be 
requested using the @option{--sky-std} column), the value returned in this 
column is meaningless (its just noise peaks which are randomly distributed over 
the area).
+You can therefore use the @option{--maximum} and @option{--sky-std} columns to 
remove, or flag, unreliable FWHMs.
+For example, if a labeled region's maximum is less than 2 times the sky 
standard deviation, the value will certainly be unreliable (half of that is 
@mymath{1\sigma}!).
+For a more reliable value, this fraction should be around 4 (so half the 
maximum is 2@mymath{\sigma}).
+
+@item --half-max-area
+The number of pixels with values larger than half the maximum flux within the 
labeled region.
+This option is used to estimate @option{--fwhm}, so please read the notes 
there for the caveats and necessary precautions.
+
+@item --half-max-radius
+The radius of region containing half the maximum flux within the labeled 
region.
+This is just half the value reported by @option{--fwhm}.
+
+@item --half-max-sum
+The sum of the pixel values containing half the maximum flux within the 
labeled region (or those that are counted in @option{--halfmaxarea}).
+This option uses the pixels within @option{--fwhm}, so please read the notes 
there for the caveats and necessary precautions.
+
+@item --half-sum-area
+The number of pixels that contain half the object or clump's total sum of 
pixels (half the value in the @option{--sum} column).
+To count this area, all the non-blank values associated with the given label 
(object or clump) will be sorted and summed in order (starting from the 
maximum), until the sum becomes larger than half the total sum of the label's 
pixels.
+
+This option is thus good for clumps (which are defined to have a single peak 
in their morphology), but for objects you should be careful: if the object 
includes multiple peaks/clumps at roughly the same level, then the area 
reported by this option will be distributed over all the peaks.
+
+@item --half-sum-radius
+Radius (in units of pixels) derived from the area that contains half the total 
sum of the label's pixels (value reported by @option{--halfsumarea}).
+If the area is @mymath{A_h} and the axis ratio is @mymath{q}, then the value 
returned in this column is @mymath{\sqrt{A_h/({\pi}q)}}.
+This option is a good measure of the concentration of the @emph{observed} 
(after PSF convolution and noisy) object or clump,
+But as described below it underestimates the effective radius.
+Also, it should be used in caution with objects that may have multiple clumps.
+It is most reliable with clumps or objects that have one or zero clumps, see 
the note under @option{--halfsumarea}.
+
+@cindex Ellipse area
+@cindex Area, ellipse
+Recall that in general, for an ellipse with semi-major axis @mymath{a}, 
semi-minor axis @mymath{b}, and axis ratio @mymath{q=b/a} the area (@mymath{A}) 
is @mymath{A={\pi}ab={\pi}qa^2}.
+For a circle (where @mymath{q=1}), this simplifies to the familiar 
@mymath{A={\pi}a^2}.
+
+@cindex S@'ersic profile
+@cindex Effective radius
+This option should not be confused with the @emph{effective radius} for 
S@'ersic profiles, commonly written as @mymath{r_e}.
+For more on the S@'ersic profile and @mymath{r_e}, please see @ref{Galaxies}.
+Therefore, when @mymath{r_e} is meaningful for the target (the target is 
elliptically symmetric and can be parameterized as a S@'ersic profile), 
@mymath{r_e} should be derived from fitting the profile with a S@'ersic 
function which has been convolved with the PSF.
+But from the equation above, you see that this radius is derived from the raw 
image's labeled values (after convolution, with no parametric profile), so this 
column's value will generally be (much) smaller than @mymath{r_e}, depending on 
the PSF, depth of the dataset, the morphology, or if a fraction of the profile 
falls on the edge of the image.
+
+In other words, this option can only be interpreted as an effective radius if 
there is no noise and no PSF and the profile within the image extends to 
infinity (or a very large multiple of the effective radius) and it not near the 
edge of the image.
+
+@item  --frac-max1-area
+@itemx --frac-max2-area
+Number of pixels brighter than the given fraction(s) of the maximum pixel 
value.
+For the maximum value, see the description of @option{--maximum} column.
+The fraction(s) are given through the @option{--frac-max} option (that can 
take two values) and is described in @ref{MakeCatalog inputs and basic 
settings}.
+Recall that in @option{--halfmaxarea}, the fraction is fixed to 0.5.
+Hence, added with these two columns, you can sample three parts of the profile 
area.
+
+@item  --frac-max1-sum
+@itemx --frac-max2-sum
+Sum of pixels brighter than the given fraction(s) of the maximum pixel value.
+For the maximum value, see the description of @option{--maximum} column below.
+The fraction(s) are given through the @option{--frac-max} option (that can 
take two values) and is described in @ref{MakeCatalog inputs and basic 
settings}.
+Recall that in @option{--halfmaxsum}, the fraction is fixed to 0.5.
+Hence, added with these two columns, you can sample three parts of the 
profile's sum of pixels.
+
+@item  --frac-max1-radius
+@itemx --frac-max2-radius
+Radius (in units of pixels) derived from the area that contains the given 
fractions of the maximum valued pixel(s) of the label's pixels (value reported 
by @option{--frac-max1-area} or @option{--frac-max2-area}).
+For the maximum value, see the description of @option{--maximum} column below.
+The fractions are given through the @option{--frac-max} option (that can take 
two values) and is described in @ref{MakeCatalog inputs and basic settings}.
+Recall that in @option{--fwhm}, the fraction is fixed to 0.5.
+Hence, added with these two columns, you can sample three parts of the 
profile's radius.
+
+@item --clumps-area
+[Objects] The total area of all the clumps in this object.
+
+@item --weight-area
+The area (number of pixels) used in the flux weighted position calculations.
+
+@item --geo-area
+The area of all the pixels labeled with an object or clump.
+Note that unlike @option{--area}, pixel values are completely ignored in this 
column.
+For example, if a pixel value is blank, it will not be counted in 
@option{--area}, but will be counted here.
+
+@item --geo-area-xy
+Similar to @option{--geo-area}, when the clump or object is projected onto the 
first two dimensions.
+This is only available for 3-dimensional datasets.
+When working with Integral Field Unit (IFU) datasets, this projection onto the 
first two dimensions would be a narrow-band image.
+@end table
+
+@node Morphology measurements elliptical, Spectra measurement in a cube, 
Morphology measurements nonparametric, MakeCatalog measurements
+@subsubsection Morphology measurements (elliptical)
+
+When your target objects are sufficiently ellipse-like, you can use the 
measurements below to quantify the various parameters of the ellipse.
+For details of how the elliptical parameters are measured, see @ref{Measuring 
elliptical parameters}.
+For non-parametric morphological measurements, see @ref{Morphology 
measurements nonparametric}.
+The measures that start with @option{--geo-*} ignore the pixel values and just 
do the measurements on the label's ``geometric'' shape.
+
+@table @option
+@item --semi-major
+The pixel-value weighted root mean square (RMS) along the semi-major axis of 
the profile (assuming it is an ellipse) in units of pixels.
+
+@item --semi-minor
+The pixel-value weighted root mean square (RMS) along the semi-minor axis of 
the profile (assuming it is an ellipse) in units of pixels.
+
+@item --axis-ratio
+The pixel-value weighted axis ratio (semi-minor/semi-major) of the object or 
clump.
+
+@item --position-angle
+The pixel-value weighted angle of the semi-major axis with the first FITS axis 
in degrees.
+
+@item --geo-semi-major
+The geometric (ignoring pixel values) root mean square (RMS) along the 
semi-major axis of the profile, assuming it is an ellipse, in units of pixels.
+
+@item --geo-semi-minor
+The geometric (ignoring pixel values) root mean square (RMS) along the 
semi-minor axis of the profile, assuming it is an ellipse, in units of pixels.
+
+@item --geo-axis-ratio
+The geometric (ignoring pixel values) axis ratio of the profile, assuming it 
is an ellipse.
+
+@item --geo-position-angle
+The geometric (ignoring pixel values) angle of the semi-major axis with the 
first FITS axis in degrees.
+@end table
+
+@node Spectra measurement in a cube,  , Morphology measurements elliptical, 
MakeCatalog measurements
+@subsubsection Spectra measurement in a cube
+
+@cindex 3D data-cubes
+@cindex Cubes (3D data)
+@cindex IFU: Integral Field Unit
+@cindex Integral field unit (IFU)
+@cindex Spectrum (of astronomical source)
+MakeCatalog can also do multi-valued measurements per label.
+Currently the only such measurement is the creation of spectra from 3D data 
cubes as discussed below:
+
+@table @option
+@item --spectrum
+Generate a spectrum (measurement along the first two FITS dimensions) for each 
label when the input dataset is a 3D data cube.
+With this option, a seprate table/spectrum will be generated for every label.
+If the output is a FITS file, each label's spectrum will be written into an 
extension of that file with a standard name of @code{SPECTRUM_NN} (the label 
will be replaced with @code{NN}).
+If the output is a plain text file, each label's spectrum will be written into 
a separate file with the suffix @file{spec-NN.txt}.
+See @ref{MakeCatalog output} for more on specifying MakeCatalog's output file.
+
+The spectra will contain one row for every slice (third FITS dimension) of the 
cube.
+Since the physical nature of the third dimension is different, two types of 
spectra (along with their errors) are measured:
+1) Sum of values in each slice that only have the requested label.
+2) Sum of values on the 2D projection of the whole label (the area of this 
projection can be requested with the @option{--area-xy} column above).
+
+Labels can overlap when they are projected onto the first two FITS dimensions 
(the spatial domain).
+To help separate them, MakeCatalog does a third measurement on each slice: the 
area, sum of values and error of all pixels that belong to other labels but 
overlap with the 2D projection.
+This can be used to see how reliable the emission line measurement is (on the 
projected spectra) and also if multiple lines (labeled regions) belong to the 
same physical object.
+@end table
+
+
+
+
+
+@node Invoking astmkcatalog,  , MakeCatalog measurements, MakeCatalog
+@subsection Invoking MakeCatalog
+
+MakeCatalog will do measurements and produce a catalog from a labeled dataset 
and optional values dataset(s).
+The executable name is @file{astmkcatalog} with the following general template
+
+@example
+$ astmkcatalog [OPTION ...] InputImage.fits
+@end example
+
+@noindent
+One line examples:
+
+@example
+## Create catalog with RA, Dec, Magnitude and Magnitude error,
+## from Segment's output:
+$ astmkcatalog --ra --dec --magnitude --magnitude-error seg-out.fits
+
+## Same catalog as above (using short options):
+$ asmkcatalog -rdmG seg-out.fits
+
+## Write the catalog to a text table:
+$ astmkcatalog -mpQ seg-out.fits --output=cat.txt
+
+## Output columns specified in `columns.conf':
+$ astmkcatalog --config=columns.conf seg-out.fits
+
+## Use object and clump labels from a K-band image, but pixel values
+## from an i-band image.
+$ astmkcatalog K_segmented.fits --hdu=DETECTIONS --clumpscat     \
+               --clumpsfile=K_segmented.fits --clumpshdu=CLUMPS  \
+               --valuesfile=i_band.fits
+@end example
+
+@cindex Gaussian
+@noindent
+If MakeCatalog is to do processing (not printing help or option values), an 
input labeled image should be provided.
+The options described in this section are those that are particular to 
MakeProfiles.
+For operations that MakeProfiles shares with other programs (mainly involving 
input/output or general processing steps), see @ref{Common options}.
+Also see @ref{Common program behavior} for some general characteristics of all 
Gnuastro programs including MakeCatalog.
+
+The various measurements/columns of MakeCatalog are requested as options, 
either on the command-line or in configuration files, see @ref{Configuration 
files}.
+The full list of available columns is available in @ref{MakeCatalog 
measurements}.
+Depending on the requested columns, MakeCatalog needs more than one input 
dataset, for more details, please see @ref{MakeCatalog inputs and basic 
settings}.
+The upper-limit measurements in particular need several configuration options 
which are thoroughly discussed in @ref{Upper-limit settings}.
+Finally, in @ref{MakeCatalog output} the output file(s) created by MakeCatalog 
are discussed.
+
+@menu
+* MakeCatalog inputs and basic settings::  Input files and basic settings.
+* Upper-limit settings::        Settings for upper-limit measurements.
+* MakeCatalog output::          File names of MakeCatalog's output table.
+@end menu
+
+@node MakeCatalog inputs and basic settings, Upper-limit settings, Invoking 
astmkcatalog, Invoking astmkcatalog
+@subsubsection MakeCatalog inputs and basic settings
+
+MakeCatalog works by using a localized/labeled dataset (see @ref{MakeCatalog}).
+This dataset maps/labels pixels to a specific target (row number in the final 
catalog) and is thus the only necessary input dataset to produce a minimal 
catalog in any situation.
+Because it only has labels/counters, it must have an integer type (see 
@ref{Numeric data types}), see below if your labels are in a floating point 
container.
+When the requested measurements only need this dataset (for example, 
@option{--geo-x}, @option{--geo-y}, or @option{--geo-area}), MakeCatalog will 
not read any more datasets.
+
+Low-level measurements that only use the labeled image are rarely sufficient 
for any high-level science case.
+Therefore necessary input datasets depend on the requested columns in each run.
+For example, let's assume you want the brightness/magnitude and 
signal-to-noise ratio of your labeled regions.
+For these columns, you will also need to provide an extra dataset containing 
values for every pixel of the labeled input (to measure magnitude) and another 
for the Sky standard deviation (to measure error).
+All such auxiliary input files have to have the same size (number of pixels in 
each dimension) as the input labeled image.
+Their numeric data type is irrelevant (they will be converted to 32-bit 
floating point internally).
+For the full list of available measurements, see @ref{MakeCatalog 
measurements}.
+
+The ``values'' dataset is used for measurements like brightness/magnitude, or 
flux-weighted positions.
+If it is a real image, by default it is assumed to be already Sky-subtracted 
prior to running MakeCatalog.
+If it is not, you use the @option{--subtractsky} option to, so MakeCatalog 
reads and subtracts the Sky dataset before any processing.
+To obtain the Sky value, you can use the @option{--sky} option of 
@ref{Statistics}, but the best recommended method is @ref{NoiseChisel}, see 
@ref{Sky value}.
+
+MakeCatalog can also do measurements on sub-structures of detections.
+In other words, it can produce two catalogs.
+Following the nomenclature of Segment (see @ref{Segment}), the main labeled 
input dataset is known as ``object'' labels and the (optional) sub-structure 
input dataset is known as ``clumps''.
+If MakeCatalog is run with the @option{--clumpscat} option, it will also need 
a labeled image containing clumps, similar to what Segment produces (see 
@ref{Segment output}).
+Since clumps are defined within detected regions (they exist over signal, not 
noise), MakeCatalog uses their boundaries to subtract the level of signal under 
them.
+
+There are separate options to explicitly request a file name and HDU/extension 
for each of the required input datasets as fully described below (with the 
@option{--*file} format).
+When each dataset is in a separate file, these options are necessary.
+However, one great advantage of the FITS file format (that is heavily used in 
astronomy) is that it allows the storage of multiple datasets in one file.
+So in most situations (for example, if you are using the outputs of 
@ref{NoiseChisel} or @ref{Segment}), all the necessary input datasets can be in 
one file.
+
+When none of the @option{--*file} options are given, MakeCatalog will assume 
the necessary input datasets are in the file given as its argument (without any 
option).
+When the Sky or Sky standard deviation datasets are necessary and the only 
@option{--*file} option called is @option{--valuesfile}, MakeCatalog will 
search for these datasets (with the default/given HDUs) in the file given to 
@option{--valuesfile} (before looking into the main argument file).
+
+When the clumps image (necessary with the @option{--clumpscat} option) is 
used, MakeCatalog looks into the (possibly existing) @code{NUMLABS} keyword for 
the total number of clumps in the image (irrespective of how many objects there 
are).
+If it is not present, it will count them and possibly re-label the clumps so 
the clump labels always start with 1 and finish with the total number of clumps 
in each object.
+The re-labeled clumps image will be stored with the @file{-clumps-relab.fits} 
suffix.
+This can slightly slow-down the run.
+
+Note that @code{NUMLABS} is automatically written by Segment in its outputs, 
so if you are feeding Segment's clump labels, you can benefit from the improved 
speed.
+Otherwise, if you are creating the clumps label dataset manually, it may be 
good to include the @code{NUMLABS} keyword in its header and also be sure that 
there is no gap in the clump labels.
+For example, if an object has three clumps, they are labeled as 1, 2, 3.
+If they are labeled as 1, 3, 4, or any other combination of three positive 
integers that are not an increment of the previous, you might get unknown 
behavior.
+
+It may happen that your labeled objects image was created with a program that 
only outputs floating point files.
+However, you know it only has integer valued pixels that are stored in a 
floating point container.
+In such cases, you can use Gnuastro's Arithmetic program (see 
@ref{Arithmetic}) to change the numerical data type of the image 
(@file{float.fits}) to an integer type image (@file{int.fits}) with a command 
like below:
 
-@item -n
-@itemx --sn
-The Signal to noise ratio (S/N) of all clumps or objects.
-See Akhlaghi and Ichikawa (2015) for the exact equations used.
+@example
+@command{$ astarithmetic float.fits int32 --output=int.fits}
+@end example
 
-The returned value will be NaN when the label covers only NaN pixels in the 
values image, or a pixel is NaN in the @option{--instd} image, but non-NaN in 
the values image.
-The latter situation usually happens when there is a bug in the previous steps 
of your analysis, and is important because those pixels with a NaN in the 
@option{--instd} image may contribute significantly to the final error.
-If you want to ignore those pixels in the error measurement, set them to zero 
(which is a meaningful number).
+To summarize: if the input file to MakeCatalog is the default/full output of 
Segment (see @ref{Segment output}) you do not have to worry about any of the 
@option{--*file} options below.
+You can just give Segment's output file to MakeCatalog as described in 
@ref{Invoking astmkcatalog}.
+To feed NoiseChisel's output into MakeCatalog, just change the labeled 
dataset's header (with @option{--hdu=DETECTIONS}).
+The full list of input dataset options and general setting options are 
described below.
 
-@item --sky
-The sky flux (per pixel) value under this object or clump.
-This is actually the mean value of all the pixels in the sky image that lie on 
the same position as the object or clump.
+@table @option
 
-@item --skystd
-The sky value standard deviation (per pixel) for this clump or object.
-This is the square root of the mean variance under the object, or the root 
mean square.
+@item -l FITS
+@itemx --clumpsfile=FITS
+The FITS file containing the labeled clumps dataset when @option{--clumpscat} 
is called (see @ref{MakeCatalog output}).
+When @option{--clumpscat} is called, but this option is not, MakeCatalog will 
look into the main input file (given as an argument) for the required 
extension/HDU (value to @option{--clumpshdu}).
 
-@item -C
-@itemx --numclumps
-[Objects] The number of clumps in this object.
+@item --clumpshdu=STR
+The HDU/extension of the clump labels dataset.
+Only pixels with values above zero will be considered.
+The clump labels dataset has to be an integer data type (see @ref{Numeric data 
types}) and only pixels with a value larger than zero will be used.
+See @ref{Segment output} for a description of the expected format.
 
-@item -a
-@itemx --area
-The raw area (number of pixels/voxels) in any clump or object independent of 
what pixel it lies over (if it is NaN/blank or unused for example).
+@item -v FITS
+@itemx --valuesfile=FITS
+The file name of the (sky-subtracted) values dataset.
+When any of the columns need values to associate with the input labels (for 
example, to measure the sum of pixel values or magnitude of a galaxy, see 
@ref{Brightness flux magnitude}), MakeCatalog will look into a ``values'' for 
the respective pixel values.
+In most common processing, this is the actual astronomical image that the 
labels were defined, or detected, over.
+The HDU/extension of this dataset in the given file can be specified with 
@option{--valueshdu}.
+If this option is not called, MakeCatalog will look for the given extension in 
the main input file.
 
-@item --areaarcsec2
-The used (non-blank in values image) area of the labeled region in units of 
arc-seconds squared.
-This column is just the value of the @option{--area} column, multiplied by the 
area of each pixel in the input image (in units of arcsec^2).
-Similar to the @option{--ra} or @option{--dec} columns, for this option to 
work, the objects extension used has to have a WCS structure.
+@item --valueshdu=STR/INT
+The name or number (counting from zero) of the extension containing the 
``values'' dataset, see the descriptions above and those in 
@option{--valuesfile} for more.
 
-@item --areaminv
-The number of pixels that are equal to the minimum value of the labeled region 
(clump or object).
+@item -s FITS/FLT
+@itemx --insky=FITS/FLT
+Sky value as a single number, or the file name containing a dataset (different 
values per pixel or tile).
+The Sky dataset is only necessary when @option{--subtractsky} is called or 
when a column directly related to the Sky value is requested (currently 
@option{--sky}).
+This dataset may be a tessellation, with one element per tile (see 
@option{--oneelempertile} of NoiseChisel's @ref{Processing options}).
 
-@item --areamaxv
-The number of pixels that are equal to the maximum value of the labeled region 
(clump or object).
+When the Sky dataset is necessary but this option is not called, MakeCatalog 
will assume it is an HDU/extension (specified by @option{--skyhdu}) in one of 
the already given files.
+First it will look for it in the @option{--valuesfile} (if it is given) and 
then the main input file (given as an argument).
 
-@item --surfacebrightness
-The surface brightness (in units of mag/arcsec@mymath{^2}) of the labeled 
region (objects or clumps).
-For more on the definition of the surface brightness, see @ref{Brightness flux 
magnitude}.
+By default the values dataset is assumed to be already Sky subtracted, so
+this dataset is not necessary for many of the columns.
 
-@item --sberror
-Error in measuring the surface brightness (the @option{--surfacebrightness} 
column).
-This column will use the value given to @option{--spatialresolution} in the 
processing (in pixels).
-For more on @option{--spatialresolution}, see @ref{MakeCatalog inputs and 
basic settings} and for the equation used to derive the surface brightness 
error, see @ref{Surface brightness error of each detection}.
+@item --skyhdu=STR
+HDU/extension of the Sky dataset, see @option{--skyfile}.
 
-@item --areaxy
-@cindex IFU: Integral Field Unit
-@cindex Integral Field Unit
-Similar to @option{--area}, when the clump or object is projected onto the 
first two dimensions.
-This is only available for 3-dimensional datasets.
-When working with Integral Field Unit (IFU) datasets, this projection onto the 
first two dimensions would be a narrow-band image.
+@item --subtractsky
+Subtract the sky value or dataset from the values file prior to any
+processing.
 
-@item --fwhm
-@cindex FWHM
-The full width at half maximum (in units of pixels, along the semi-major axis) 
of the labeled region (object or clump).
-The maximum value is estimated from the mean of the top-three pixels with the 
highest values, see the description under @option{--maximum}.
-The number of pixels that have half the value of that maximum are then found 
(value in the @option{--halfmaxarea} column) and a radius is estimated from the 
area.
-See the description under @option{--halfsumradius} for more on converting area 
to radius along major axis.
+@item -t STR/FLT
+@itemx --instd=STR/FLT
+Sky standard deviation value as a single number, or the file name containing a 
dataset (different values per pixel or tile).
+With the @option{--variance} option you can tell MakeCatalog to interpret this 
value/dataset as a variance image, not standard deviation.
 
-Because of its non-parametric nature, this column is most reliable on clumps 
and should only be used in objects with great caution.
-This is because objects can have more than one clump (peak with true signal) 
and multiple peaks are not treated separately in objects, so the result of this 
column will be biased.
+@strong{Important note:} This must only be the SKY standard deviation or 
variance (not including the signal's contribution to the error).
+In other words, the final standard deviation of a pixel depends on how much 
signal there is in it.
+MakeCatalog will find the amount of signal within each pixel (while 
subtracting the Sky, if @option{--subtractsky} is called) and account for the 
extra error due to it's value (signal).
+Therefore if the input standard deviation (or variance) image also contains 
the contribution of signal to the error, then the final error measurements will 
be over-estimated.
 
-Also, because of its non-parametric nature, this FWHM it does not account for 
the PSF, and it will be strongly affected by noise if the object is 
faint/diffuse
-So when half the maximum value (which can be requested using the 
@option{--maximum} column) is too close to the local noise level (which can be 
requested using the @option{--skystd} column), the value returned in this 
column is meaningless (its just noise peaks which are randomly distributed over 
the area).
-You can therefore use the @option{--maximum} and @option{--skystd} columns to 
remove, or flag, unreliable FWHMs.
-For example, if a labeled region's maximum is less than 2 times the sky 
standard deviation, the value will certainly be unreliable (half of that is 
@mymath{1\sigma}!).
-For a more reliable value, this fraction should be around 4 (so half the 
maximum is 2@mymath{\sigma}).
+@item --stdhdu=STR
+The HDU of the Sky value standard deviation image.
 
-@item --halfmaxarea
-The number of pixels with values larger than half the maximum flux within the 
labeled region.
-This option is used to estimate @option{--fwhm}, so please read the notes 
there for the caveats and necessary precautions.
+@item --variance
+The dataset given to @option{--instd} (and @option{--stdhdu} has the Sky 
variance of every pixel, not the Sky standard deviation.
 
-@item --halfmaxradius
-The radius of region containing half the maximum flux within the labeled 
region.
-This is just half the value reported by @option{--fwhm}.
+@item --forcereadstd
+Read the input STD image even if it is not required by any of the requested 
columns.
+This is because some of the output catalog's metadata may need it, for 
example, to calculate the dataset's surface brightness limit (see 
@ref{Quantifying measurement limits}, configured with @option{--sfmagarea} and 
@option{--sfmagnsigma} in @ref{MakeCatalog output}).
 
-@item --halfmaxsum
-The sum of the pixel values containing half the maximum flux within the 
labeled region (or those that are counted in @option{--halfmaxarea}).
-This option uses the pixels within @option{--fwhm}, so please read the notes 
there for the caveats and necessary precautions.
+Furthermore, if the input STD image does not have the @code{MEDSTD} keyword 
(that is meant to contain the representative standard deviation of the full 
image), with this option, the median will be calculated and used for the 
surface brightness limit.
 
-@item --halfmaxsb
-The surface brightness (in units of mag/arcsec@mymath{^2}) within the region 
that contains half the maximum value of the labeled region.
-For more on the definition of the surface brightness, see @ref{Brightness flux 
magnitude}.
+@item -z FLT
+@itemx --zeropoint=FLT
+The zero point magnitude for the input image, see @ref{Brightness flux 
magnitude}.
 
-@item --halfsumarea
-The number of pixels that contain half the object or clump's total sum of 
pixels (half the value in the @option{--sum} column).
-To count this area, all the non-blank values associated with the given label 
(object or clump) will be sorted and summed in order (starting from the 
maximum), until the sum becomes larger than half the total sum of the label's 
pixels.
+@item --sigmaclip FLT,FLT
+The sigma-clipping parameters when any of the sigma-clipping related columns 
are requested (for example, @option{--sigclip-median} or 
@option{--sigclip-number}).
 
-This option is thus good for clumps (which are defined to have a single peak 
in their morphology), but for objects you should be careful: if the object 
includes multiple peaks/clumps at roughly the same level, then the area 
reported by this option will be distributed over all the peaks.
+This option takes two values: the first is the multiple of @mymath{\sigma}, 
and the second is the termination criteria.
+If the latter is larger than 1, it is read as an integer number and will be 
the number of times to clip.
+If it is smaller than 1, it is interpreted as the tolerance level to stop 
clipping.
+See @ref{Sigma clipping} for a complete explanation.
 
-@item --halfsumsb
-Surface brightness (in units of mag/arcsec@mymath{^2}) within the area that 
contains half the total sum of the label's pixels (object or clump).
-For more on the definition of the surface brightness, see @ref{Brightness flux 
magnitude}.
+@item --frac-max=FLT[,FLT]
+The fractions (one or two) of maximum value in objects or clumps to be used in 
the related columns, for example, @option{--frac-max1-area}, 
@option{--frac-max1-sum} or @option{--frac-max1-radius}, see @ref{MakeCatalog 
measurements}.
+For the maximum value, see the description of @option{--maximum} column below.
+The value(s) of this option must be larger than 0 and smaller than 1 (they are 
a fraction).
+When only @option{--frac-max1-area} or @option{--frac-max1-sum} is requested, 
one value must be given to this option, but if @option{--frac-max2-area} or 
@option{--frac-max2-sum} are also requested, two values must be given to this 
option.
+The values can be written as simple floating point numbers, or as fractions, 
for example, @code{0.25,0.75} and @code{0.25,3/4} are the same.
 
-This column just plugs in the values of half the value of the @option{--sum} 
column and the @option{--halfsumarea} column, into the surface brightness 
equation.
-Therefore please see the description in @option{--halfsumarea} to understand 
the systematics of this column and potential biases.
+@item --spatialresolution=FLT
+The error in measuring spatial properties (for example, the area) in units of 
pixels.
+You can think of this as the FWHM of the dataset's PSF and is used in 
measurements like the error in surface brightness (@option{--sb-error}, see 
@ref{MakeCatalog measurements}).
+Ideally, images are taken in the optimal Nyquist sampling @ref{Sampling 
theorem}, so the default value for this option is 2.
+But in practice real images my be over-sampled (usually ground-based images, 
where you will need to increase the default value) or undersampled (some 
space-based images, where you will need to decrease the default value).
 
-@item --halfsumradius
-Radius (in units of pixels) derived from the area that contains half the total 
sum of the label's pixels (value reported by @option{--halfsumarea}).
-If the area is @mymath{A_h} and the axis ratio is @mymath{q}, then the value 
returned in this column is @mymath{\sqrt{A_h/({\pi}q)}}.
-This option is a good measure of the concentration of the @emph{observed} 
(after PSF convolution and noisy) object or clump,
-But as described below it underestimates the effective radius.
-Also, it should be used in caution with objects that may have multiple clumps.
-It is most reliable with clumps or objects that have one or zero clumps, see 
the note under @option{--halfsumarea}.
+@item --inbetweenints
+Output will contain one row for all integers between 1 and the largest label 
in the input (irrespective of their existance in the input image).
+By default, MakeCatalog's output will only contain rows with integers that 
actually corresponded to at least one pixel in the input dataset.
 
-@cindex Ellipse area
-@cindex Area, ellipse
-Recall that in general, for an ellipse with semi-major axis @mymath{a}, 
semi-minor axis @mymath{b}, and axis ratio @mymath{q=b/a} the area (@mymath{A}) 
is @mymath{A={\pi}ab={\pi}qa^2}.
-For a circle (where @mymath{q=1}), this simplifies to the familiar 
@mymath{A={\pi}a^2}.
+For example, if the input's only labeled pixel values are 11 and 13, 
MakeCatalog's default output will only have two rows.
+If you use this option, it will have 13 rows and all the columns corresponding 
to integer identifiers that did not correspond to any pixel will be 0 or NaN 
(depending on context).
+@end table
 
-@cindex S@'ersic profile
-@cindex Effective radius
-This option should not be confused with the @emph{effective radius} for 
S@'ersic profiles, commonly written as @mymath{r_e}.
-For more on the S@'ersic profile and @mymath{r_e}, please see @ref{Galaxies}.
-Therefore, when @mymath{r_e} is meaningful for the target (the target is 
elliptically symmetric and can be parameterized as a S@'ersic profile), 
@mymath{r_e} should be derived from fitting the profile with a S@'ersic 
function which has been convolved with the PSF.
-But from the equation above, you see that this radius is derived from the raw 
image's labeled values (after convolution, with no parametric profile), so this 
column's value will generally be (much) smaller than @mymath{r_e}, depending on 
the PSF, depth of the dataset, the morphology, or if a fraction of the profile 
falls on the edge of the image.
 
-In other words, this option can only be interpreted as an effective radius if 
there is no noise and no PSF and the profile within the image extends to 
infinity (or a very large multiple of the effective radius) and it not near the 
edge of the image.
 
-@item --fracmaxarea1
-@itemx --fracmaxarea2
-Number of pixels brighter than the given fraction(s) of the maximum pixel 
value.
-For the maximum value, see the description of @option{--maximum} column.
-The fraction(s) are given through the @option{--fracmax} option (that can take 
two values) and is described in @ref{MakeCatalog inputs and basic settings}.
-Recall that in @option{--halfmaxarea}, the fraction is fixed to 0.5.
-Hence, added with these two columns, you can sample three parts of the profile 
area.
 
-@item --fracmaxsum1
-@itemx --fracmaxsum2
-Sum of pixels brighter than the given fraction(s) of the maximum pixel value.
-For the maximum value, see the description of @option{--maximum} column below.
-The fraction(s) are given through the @option{--fracmax} option (that can take 
two values) and is described in @ref{MakeCatalog inputs and basic settings}.
-Recall that in @option{--halfmaxsum}, the fraction is fixed to 0.5.
-Hence, added with these two columns, you can sample three parts of the 
profile's sum of pixels.
 
-@item --fracmaxradius1
-@itemx --fracmaxradius2
-Radius (in units of pixels) derived from the area that contains the given 
fractions of the maximum valued pixel(s) of the label's pixels (value reported 
by @option{--fracmaxarea1} or @option{--fracmaxarea2}).
-For the maximum value, see the description of @option{--maximum} column below.
-The fractions are given through the @option{--fracmax} option (that can take 
two values) and is described in @ref{MakeCatalog inputs and basic settings}.
-Recall that in @option{--fwhm}, the fraction is fixed to 0.5.
-Hence, added with these two columns, you can sample three parts of the 
profile's radius.
+@node Upper-limit settings, MakeCatalog output, MakeCatalog inputs and basic 
settings, Invoking astmkcatalog
+@subsubsection Upper-limit settings
 
-@item --clumpsarea
-[Objects] The total area of all the clumps in this object.
+The upper-limit magnitude was discussed in @ref{Quantifying measurement 
limits}.
+Unlike other measured values/columns in MakeCatalog, the upper limit magnitude 
needs several extra parameters which are discussed here.
+All the options specific to the upper-limit measurements start with 
@option{up} for ``upper-limit''.
+The only exception is @option{--envseed} that is also present in other 
programs and is general for any job requiring random number generation in 
Gnuastro (see @ref{Generating random numbers}).
 
-@item --weightarea
-The area (number of pixels) used in the flux weighted position calculations.
+@cindex Reproducibility
+One very important consideration in Gnuastro is reproducibility.
+Therefore, the values to all of these parameters along with others (like the 
random number generator type and seed) are also reported in the comments of the 
final catalog when the upper limit magnitude column is desired.
+The random seed that is used to define the random positions for each object or 
clump is unique and set based on the (optionally) given seed, the total number 
of objects and clumps and also the labels of the clumps and objects.
+So with identical inputs, an identical upper-limit magnitude will be found.
+However, even if the seed is identical, when the ordering of the object/clump 
labels differs between different runs, the result of upper-limit measurements 
will not be identical.
 
-@item --geoarea
-The area of all the pixels labeled with an object or clump.
-Note that unlike @option{--area}, pixel values are completely ignored in this 
column.
-For example, if a pixel value is blank, it will not be counted in 
@option{--area}, but will be counted here.
+MakeCatalog will randomly place the object/clump footprint over the dataset.
+When the randomly placed footprint does not fall on any object or masked 
region (see @option{--upmaskfile}) it will be used in the final distribution.
+Otherwise that particular random position will be ignored and another random 
position will be generated.
+Finally, when the distribution has the desired number of successfully measured 
random samples (@option{--upnum}) the distribution's properties will be 
measured and placed in the catalog.
 
-@item --geoareaxy
-Similar to @option{--geoarea}, when the clump or object is projected onto the 
first two dimensions.
-This is only available for 3-dimensional datasets.
-When working with Integral Field Unit (IFU) datasets, this projection onto the 
first two dimensions would be a narrow-band image.
+When the profile is very large or the image is significantly covered by 
detections, it might not be possible to find the desired number of samplings in 
a reasonable time.
+MakeProfiles will continue searching until it is unable to find a successful 
position (since the last successful measurement@footnote{The counting of failed 
positions restarts on every successful measurement.}), for a large multiple of 
@option{--upnum} (currently@footnote{In Gnuastro's source, this constant number 
is defined as the @code{MKCATALOG_UPPERLIMIT_MAXFAILS_MULTIP} macro in 
@file{bin/mkcatalog/main.h}, see @ref{Downloading the source}.} this is 10).
+If @option{--upnum} successful samples cannot be found until this limit is 
reached, MakeCatalog will set the upper-limit magnitude for that object to NaN 
(blank).
 
-@item -A
-@itemx --semimajor
-The pixel-value weighted root mean square (RMS) along the semi-major axis of 
the profile (assuming it is an ellipse) in units of pixels.
-See @ref{Measuring elliptical parameters}.
+MakeCatalog will also print a warning if the range of positions available for 
the labeled region is smaller than double the size of the region.
+In such cases, the limited range of random positions can artificially decrease 
the standard deviation of the final distribution.
+If your dataset can allow it (it is large enough), it is recommended to use a 
larger range if you see such warnings.
 
-@item -B
-@itemx --semiminor
-The pixel-value weighted root mean square (RMS) along the semi-minor axis of 
the profile (assuming it is an ellipse) in units of pixels.
-See @ref{Measuring elliptical parameters}.
+@table @option
 
-@item --axisratio
-The pixel-value weighted axis ratio (semi-minor/semi-major) of the object or 
clump.
+@item --upmaskfile=FITS
+File name of mask image to use for upper-limit calculation.
+In some cases (especially when doing matched photometry), the object labels 
specified in the main input and mask image might not be adequate.
+In other words they do not necessarily have to cover @emph{all} detected 
objects: the user might have selected only a few of the objects in their 
labeled image.
+This option can be used to ignore regions in the image in these situations 
when estimating the upper-limit magnitude.
+All the non-zero pixels of the image specified by this option (in the 
@option{--upmaskhdu} extension) will be ignored in the upper-limit magnitude 
measurements.
 
-@item -p
-@itemx --positionangle
-The pixel-value weighted angle of the semi-major axis with the first FITS
-axis in degrees.
-See @ref{Measuring elliptical parameters}.
+For example, when you are using labels from another image, you can give 
NoiseChisel's objects image output for this image as the value to this option.
+In this way, you can be sure that regions with data do not harm your 
distribution.
+See @ref{Quantifying measurement limits} for more on the upper limit magnitude.
 
-@item --geosemimajor
-The geometric (ignoring pixel values) root mean square (RMS) along the 
semi-major axis of the profile, assuming it is an ellipse, in units of pixels.
+@item --upmaskhdu=STR
+The extension in the file specified by @option{--upmask}.
 
-@item --geosemiminor
-The geometric (ignoring pixel values) root mean square (RMS) along the 
semi-minor axis of the profile, assuming it is an ellipse, in units of pixels.
+@item --upnum=INT
+The number of random samples to take for all the objects.
+A larger value to this option will give a more accurate result 
(asymptotically), but it will also slow down the process.
+When a randomly positioned sample overlaps with a detected/masked pixel it is 
not counted and another random position is found until the object completely 
lies over an undetected region.
+So you can be sure that for each object, this many samples over undetected 
objects are made.
+See the upper limit magnitude discussion in @ref{Quantifying measurement 
limits} for more.
 
-@item --geoaxisratio
-The geometric (ignoring pixel values) axis ratio of the profile, assuming
-it is an ellipse.
+@item --uprange=INT,INT
+The range/width of the region (in pixels) to do random sampling along each 
dimension of the input image around each object's position.
+This is not a mandatory option and if not given (or given a value of zero in a 
dimension), the full possible range of the dataset along that dimension will be 
used.
+This is useful when the noise properties of the dataset vary gradually.
+In such cases, using the full range of the input dataset is going to bias the 
result.
+However, note that decreasing the range of available positions too much will 
also artificially decrease the standard deviation of the final distribution 
(and thus bias the upper-limit measurement).
 
-@item --geopositionangle
-The geometric (ignoring pixel values) angle of the semi-major axis with the 
first FITS axis in degrees.
+@item --envseed
+@cindex Seed, Random number generator
+@cindex Random number generator, Seed
+Read the random number generator type and seed value from the environment (see 
@ref{Generating random numbers}).
+Random numbers are used in calculating the random positions of different 
samples of each object.
 
-@end table
+@item --upsigmaclip=FLT,FLT
+The raw distribution of random values will not be used to find the upper-limit 
magnitude, it will first be @mymath{\sigma}-clipped (see @ref{Sigma clipping}) 
to avoid outliers in the distribution (mainly the faint undetected wings of 
bright/large objects in the image).
+This option takes two values: the first is the multiple of @mymath{\sigma}, 
and the second is the termination criteria.
+If the latter is larger than 1, it is read as an integer number and will be 
the number of times to clip.
+If it is smaller than 1, it is interpreted as the tolerance level to stop 
clipping. See @ref{Sigma clipping} for a complete explanation.
 
-@cindex 3D data-cubes
-@cindex Cubes (3D data)
-@cindex IFU: Integral Field Unit
-@cindex Integral field unit (IFU)
-@cindex Spectrum (of astronomical source)
-Above, all of MakeCatalog's single-valued measurements were listed. As
-mentioned in the start of this section, MakeCatalog can also do
-multi-valued measurements per label. Currently the only such measurement is
-the creation of spectra from 3D data cubes as discussed below:
+@item --upnsigma=FLT
+The multiple of the final (@mymath{\sigma}-clipped) standard deviation (or 
@mymath{\sigma}) used to measure the upper-limit sum or magnitude.
 
-@table @option
-@item --spectrum
-Generate a spectrum (measurement along the first two FITS dimensions) for
-each label when the input dataset is a 3D data cube. With this option, a
-seprate table/spectrum will be generated for every label. If the output is
-a FITS file, each label's spectrum will be written into an extension of
-that file with a standard name of @code{SPECTRUM_NN} (the label will be
-replaced with @code{NN}). If the output is a plain text file, each label's
-spectrum will be written into a separate file with the suffix
-@file{spec-NN.txt}. See @ref{MakeCatalog output} for more on specifying
-MakeCatalog's output file.
-
-The spectra will contain one row for every slice (third FITS dimension) of
-the cube. Since the physical nature of the third dimension is different,
-two types of spectra (along with their errors) are measured: 1) Sum of
-values in each slice that only have the requested label. 2) Sum of values
-on the 2D projection of the whole label (the area of this projection can be
-requested with the @option{--areaxy} column above).
-
-Labels can overlap when they are projected onto the first two FITS
-dimensions (the spatial domain). To help separate them, MakeCatalog does a
-third measurement on each slice: the area, sum of values and error of all
-pixels that belong to other labels but overlap with the 2D projection. This
-can be used to see how reliable the emission line measurement is (on the
-projected spectra) and also if multiple lines (labeled regions) belong to
-the same physical object.
+@item --checkuplim=INT[,INT]
+Print a table of positions and measured values for all the full random 
distribution used for one particular object or clump.
+If only one integer is given to this option, it is interpreted to be an 
object's label.
+If two values are given, the first is the object label and the second is the 
ID of requested clump within it.
 
-@item --inbetweenints
-Output will contain one row for all integers between 1 and the largest label 
in the input (irrespective of their existance in the input image).
-By default, MakeCatalog's output will only contain rows with integers that 
actually corresponded to at least one pixel in the input dataset.
+The output is a table with three columns (its type is determined with the 
@option{--tableformat} option, see @ref{Input output options}).
+The first two columns are the position of the first pixel in each random 
sampling of this particular object/clump.
+The third column is the measured flux over that region.
+If the region overlapped with a detection or masked pixel, then its measured 
value will be a NaN (not-a-number).
+The total number of rows is thus unknown, but you can be sure that the number 
of rows with non-NaN measurements is the number given to the @option{--upnum} 
option.
 
-For example, if the input's only labeled pixel values are 11 and 13, 
MakeCatalog's default output will only have two rows.
-If you use this option, it will have 13 rows and all the columns corresponding 
to integer identifiers that did not correspond to any pixel will be 0 or NaN 
(depending on context).
 @end table
 
 
-
-@node MakeCatalog output,  , MakeCatalog measurements, Invoking astmkcatalog
+@node MakeCatalog output,  , Upper-limit settings, Invoking astmkcatalog
 @subsubsection MakeCatalog output
 After it has completed all the requested measurements (see @ref{MakeCatalog 
measurements}), MakeCatalog will store its measurements in table(s).
 If an output filename is given (see @option{--output} in @ref{Input output 
options}), the format of the table will be deduced from the name.
@@ -25900,7 +25976,7 @@ For more, see the description of @option{--spectrum} in 
@ref{MakeCatalog measure
 @cindex Limit, Surface brightness
 When possible, MakeCatalog will also measure the full input's noise level 
(also known as surface brightness limit, see @ref{Quantifying measurement 
limits}).
 Since these measurements are related to the noise and not any particular 
labeled object, they are stored as keywords in the output table.
-Furthermore, they are only possible when a standard deviation image has been 
loaded (done automatically for any column measurement that involves noise, for 
example, @option{--sn}, @option{--magnitudeerr} or @option{--skystd}).
+Furthermore, they are only possible when a standard deviation image has been 
loaded (done automatically for any column measurement that involves noise, for 
example, @option{--sn}, @option{--magnitude-error} or @option{--sky-std}).
 But if you just want the surface brightness limit and no noise-related column, 
you can use @option{--forcereadstd}.
 All these keywords start with @code{SBL} (for ``surface brightness limit'') 
and are described below:
 
@@ -28887,8 +28963,8 @@ $ astscript-radial-profile image.fits --center=44,37 
--rmax=100 \
 ## Name the output table as `radial-profile.fits'
 $ astscript-radial-profile image.fits --mode=wcs \
                            --center=20.53751695,0.9454292263 \
-                           --rmax=88 --axisratio=0.32 \
-                           --positionangle=148 -oradial-profile.fits
+                           --rmax=88 --axis-ratio=0.32 \
+                           --position-angle=148 -oradial-profile.fits
 
 ## Generate the radial profile centered at RA=40.062675270971,
 ## DEC=-8.1511992735126, up to a radial distance of 20 pixels,
@@ -28937,7 +29013,7 @@ To do this, use @option{--keeptmp} to keep the 
temporary files, and compare @fil
 @cartouche
 @noindent
 @strong{Finding properties of your elliptical target: } you want to measure 
the radial profile of a galaxy, but do not know its exact location, position 
angle or axis ratio.
-To obtain these values, you can use @ref{NoiseChisel} to detect signal in the 
image, feed it to @ref{Segment} to do basic segmentation, then use 
@ref{MakeCatalog} to measure the center (@option{--x} and @option{--y} in 
MakeCatalog), axis ratio (@option{--axisratio}) and position angle 
(@option{--positionangle}).
+To obtain these values, you can use @ref{NoiseChisel} to detect signal in the 
image, feed it to @ref{Segment} to do basic segmentation, then use 
@ref{MakeCatalog} to measure the center (@option{--x} and @option{--y} in 
MakeCatalog), axis ratio (@option{--axis-ratio}) and position angle 
(@option{--position-angle}).
 @end cartouche
 
 @cartouche
@@ -29054,21 +29130,21 @@ For example, if a radial profile computed by default 
has 100 different radii (ap
 This option is good to measure over a larger number of pixels to improve the 
measurement.
 
 @item -Q FLT
-@itemx --axisratio=FLT
+@itemx --axis-ratio=FLT
 The axis ratio of the apertures (minor axis divided by the major axis in a 2D 
ellipse).
 By default (when this option is not given), the radial profile will be 
circular (axis ratio of 1).
 This parameter is used as the option @option{--qcol} in the generation of the 
apertures with @command{astmkprof}.
 
 @item -p FLT
-@itemx --positionangle=FLT
+@itemx --position-angle=FLT
 The position angle (in degrees) of the profiles relative to the first FITS 
axis (horizontal when viewed in SAO DS9).
-By default, it is @option{--positionangle=0}, which means that the semi-major 
axis of the profiles will be parallel to the first FITS axis.
+By default, it is @option{--position-angle=0}, which means that the semi-major 
axis of the profiles will be parallel to the first FITS axis.
 
 @item -a FLT,FLT
 @itemx --azimuth=FLT,FLT
 @cindex Wedge (radial profile)
 @cindex Azimuthal range (radial profile)
-Limit the profile to the given azimuthal angle range (two numbers given to 
this option, in degrees, from 0 to 360) from the major axis (defined by 
@option{--positionangle}).
+Limit the profile to the given azimuthal angle range (two numbers given to 
this option, in degrees, from 0 to 360) from the major axis (defined by 
@option{--position-angle}).
 The radial profile will therefore be created on a wedge-like shape, not the 
full circle/ellipse.
 The pixel containing the center of the profile will always be included in the 
profile (because it contains all azimuthal angles!).
 
@@ -29083,8 +29159,8 @@ For example, see the commands below (based on your 
target object, just change th
 @example
 ## Generate the radial profile
 $ astscript-radial-profile image.fits --center=1.234,6.789 \
-            --mode=wcs --rmax=50 --positionangle=20 \
-            --axisratio=0.8 --azimuth=95,150 --keeptmp \
+            --mode=wcs --rmax=50 --position-angle=20 \
+            --axis-ratio=0.8 --azimuth=95,150 --keeptmp \
             --tmpdir=radial-tmp
 
 ## Visually check the values and apertures used.
@@ -29878,15 +29954,15 @@ The final normalization value is saved into the 
header of the output image with
 If no normalization is done, then the value is set to @code{1.0}.
 
 @item -Q FLT
-@itemx --axisratio=FLT
+@itemx --axis-ratio=FLT
 The axis ratio of the radial profiles for computing the normalization value.
 By default (when this option is not given), the radial profile will be 
circular (axis ratio of 1).
 This parameter is used directly in the @file{astscript-radial-profile} script.
 
 @item -p FLT
-@itemx --positionangle=FLT
+@itemx --position-angle=FLT
 The position angle (in degrees) of the profiles relative to the first FITS 
axis (horizontal when viewed in SAO DS9).
-By default, it is @option{--positionangle=0}, which means that the semi-major 
axis of the profiles will be parallel to the first FITS axis.
+By default, it is @option{--position-angle=0}, which means that the semi-major 
axis of the profiles will be parallel to the first FITS axis.
 This parameter is used directly in the @file{astscript-radial-profile} script.
 
 @item -s FLT,FLT
@@ -29941,8 +30017,8 @@ $ astscript-psf-unite outer.fits \
 ## ellipse (instead of a circle).
 $ astscript-psf-unite outer.fits \
            --core=inner.fits --scale=3 \
-           --radius=25 --axisratio=0.5 \
-           --positionangle=40 --output=joined.fits
+           --radius=25 --axis-ratio=0.5 \
+           --position-angle=40 --output=joined.fits
 
 @end example
 
@@ -29984,7 +30060,7 @@ We recommend doing that tutorial before starting to 
work on your own datasets.
 @itemx --radius=FLT
 Radius (in pixels) at which the junction of the images is done.
 All pixels in the outer image within this radius (from its center) will be 
replaced with the pixels of the inner image (that has been scaled).
-By default, a circle is assumed for the shape of the inner region, but this 
can be tweaked with @option{--axisratio} and @option{--positionangle} (see 
below).
+By default, a circle is assumed for the shape of the inner region, but this 
can be tweaked with @option{--axis-ratio} and @option{--position-angle} (see 
below).
 
 @item -Q FLT
 @itemx --axisratio=FLT
@@ -29997,9 +30073,9 @@ even if the PSF is non-circular, the inner and outer 
parts will both have the sa
 So if the scale factor is chosen accurately, using a circle to select which 
pixels from the inner image to use in the outer image will be irrelevant.
 
 @item -p FLT
-@itemx --positionangle=FLT
+@itemx --position-angle=FLT
 Position angle of the ellipse (in degrees) to define which central pixels of 
the outer image to replace with the scaled inner image.
-Similar to @option{--axisratio} (see above).
+Similar to @option{--axis-ratio} (see above).
 
 @item -t
 @itemx --tmpdir
diff --git a/lib/box.c b/lib/box.c
index 3de7c6cf..3412f1ea 100644
--- a/lib/box.c
+++ b/lib/box.c
@@ -389,11 +389,11 @@ gal_box_border_rotate_around_center(long *fpixel, long 
*lpixel,
   */
 
   /* Update the first and last points. */
-  minx=bl[0];                    maxx=bl[0];
+  minx=bl[0];                      maxx=bl[0];
   if(br[0]<minx) {minx=br[0];}     if(br[0]>maxx) {maxx=br[0];}
   if(tl[0]<minx) {minx=tl[0];}     if(tl[0]>maxx) {maxx=tl[0];}
   if(tr[0]<minx) {minx=tr[0];}     if(tr[0]>maxx) {maxx=tr[0];}
-  miny=bl[1];                    maxy=bl[1];
+  miny=bl[1];                      maxy=bl[1];
   if(br[1]<miny) {miny=br[1];}     if(br[1]>maxy) {maxy=br[1];}
   if(tl[1]<miny) {miny=tl[1];}     if(tl[1]>maxy) {maxy=tl[1];}
   if(tr[1]<miny) {miny=tr[1];}     if(tr[1]>maxy) {maxy=tr[1];}
diff --git a/tests/during-dev.sh b/tests/during-dev.sh
index 68dc988d..0ddcd230 100755
--- a/tests/during-dev.sh
+++ b/tests/during-dev.sh
@@ -71,7 +71,7 @@
 # space characters in them, quote the full value
 numjobs=8
 builddir=build
-outdir=~/tmp
+outdir=
 
 
 
@@ -82,9 +82,9 @@ outdir=~/tmp
 # script, and once for the utility. In such cases it might be easier to
 # just add the argument/option to the final script that runs the utility
 # rather than these variables.
-utilname=table
-arguments=vec.fits
-options="-YO --transpose"
+utilname=
+arguments=
+options=
 
 
 # RUN THE PROCEDURES
@@ -195,7 +195,6 @@ if make -j$numjobs -C "$builddir"; then
 
     # Run the built utility with the given arguments and options.
     "$utility" $arguments $options $extraopts
-    #"$utility" table.fits
 
     # Clean up.
     rm -rf .gnuastro
diff --git a/tests/mkcatalog/aperturephot.sh b/tests/mkcatalog/aperturephot.sh
index c3d5f2ce..d6f5d819 100755
--- a/tests/mkcatalog/aperturephot.sh
+++ b/tests/mkcatalog/aperturephot.sh
@@ -56,6 +56,6 @@ if [ ! -f $objimg   ]; then echo "$objimg does not exist";  
exit 77; fi
 # 'check_with_program' can be something like Valgrind or an empty
 # string. Such programs will execute the command if present and help in
 # debugging when the developer doesn't have access to the user's system.
-$check_with_program $execname $objimg --hdu=1 --valuesfile=$img       \
-                              --output=aperturephot.fits              \
-                              --objid --x --y --ra --dec --magnitude --sn
+$check_with_program $execname $objimg --hdu=1 --valuesfile=$img \
+                              --output=aperturephot.fits \
+                              --obj-id --x --y --ra --dec --magnitude --sn
diff --git a/tests/mkcatalog/objects-clumps.sh 
b/tests/mkcatalog/objects-clumps.sh
index a971222a..aa713d39 100755
--- a/tests/mkcatalog/objects-clumps.sh
+++ b/tests/mkcatalog/objects-clumps.sh
@@ -55,5 +55,5 @@ if [ ! -f $img      ]; then echo "$img does not exist.";   
exit 77; fi
 # string. Such programs will execute the command if present and help in
 # debugging when the developer doesn't have access to the user's system.
 $check_with_program $execname $img --x --y --ra --dec --magnitude     \
-                              --upperlimitmag --sn --tableformat=txt  \
+                              --upperlimit-mag --sn --tableformat=txt  \
                               --clumpscat --output=objects-clumps.txt
diff --git a/tests/script/psf-select-stars.sh b/tests/script/psf-select-stars.sh
index cb3723d7..e89add9b 100755
--- a/tests/script/psf-select-stars.sh
+++ b/tests/script/psf-select-stars.sh
@@ -70,7 +70,7 @@ export PATH="$progbdir:$PATH"
 # Create a catalog with appropiate parameters
 $check_with_program astmkcatalog $fits2name \
                     --ra --dec --magnitude \
-                    --axisratio --output=$fits3name
+                    --axis-ratio --output=$fits3name
 
 # Test the script: selecting good stars
 $check_with_program $execname $fits1name --hdu=1 \



reply via email to

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