wcslib (8.2.2)

(root)/
include/
wcslib-8.2.2/
log.h
       1  /*============================================================================
       2    WCSLIB 8.2 - an implementation of the FITS WCS standard.
       3    Copyright (C) 1995-2023, Mark Calabretta
       4  
       5    This file is part of WCSLIB.
       6  
       7    WCSLIB is free software: you can redistribute it and/or modify it under the
       8    terms of the GNU Lesser General Public License as published by the Free
       9    Software Foundation, either version 3 of the License, or (at your option)
      10    any later version.
      11  
      12    WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY
      13    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
      14    FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for
      15    more details.
      16  
      17    You should have received a copy of the GNU Lesser General Public License
      18    along with WCSLIB.  If not, see http://www.gnu.org/licenses.
      19  
      20    Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
      21    http://www.atnf.csiro.au/people/Mark.Calabretta
      22    $Id: log.h,v 8.2.1.1 2023/11/16 10:05:57 mcalabre Exp mcalabre $
      23  *=============================================================================
      24  *
      25  * WCSLIB 8.2 - C routines that implement the FITS World Coordinate System
      26  * (WCS) standard.  Refer to the README file provided with WCSLIB for an
      27  * overview of the library.
      28  *
      29  *
      30  * Summary of the log routines
      31  * ---------------------------
      32  * Routines in this suite implement the part of the FITS World Coordinate
      33  * System (WCS) standard that deals with logarithmic coordinates, as described
      34  * in
      35  *
      36  *   "Representations of world coordinates in FITS",
      37  *   Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (WCS Paper I)
      38  *
      39  *   "Representations of spectral coordinates in FITS",
      40  *   Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L.
      41  *   2006, A&A, 446, 747 (WCS Paper III)
      42  *
      43  * These routines define methods to be used for computing logarithmic world
      44  * coordinates from intermediate world coordinates (a linear transformation of
      45  * image pixel coordinates), and vice versa.
      46  *
      47  * logx2s() and logs2x() implement the WCS logarithmic coordinate
      48  * transformations.
      49  *
      50  * Argument checking:
      51  * ------------------
      52  * The input log-coordinate values are only checked for values that would
      53  * result in floating point exceptions and the same is true for the
      54  * log-coordinate reference value.
      55  *
      56  * Accuracy:
      57  * ---------
      58  * No warranty is given for the accuracy of these routines (refer to the
      59  * copyright notice); intending users must satisfy for themselves their
      60  * adequacy for the intended purpose.  However, closure effectively to within
      61  * double precision rounding error was demonstrated by test routine tlog.c
      62  * which accompanies this software.
      63  *
      64  *
      65  * logx2s() - Transform to logarithmic coordinates
      66  * -----------------------------------------------
      67  * logx2s() transforms intermediate world coordinates to logarithmic
      68  * coordinates.
      69  *
      70  * Given and returned:
      71  *   crval     double    Log-coordinate reference value (CRVALia).
      72  *
      73  * Given:
      74  *   nx        int       Vector length.
      75  *
      76  *   sx        int       Vector stride.
      77  *
      78  *   slogc     int       Vector stride.
      79  *
      80  *   x         const double[]
      81  *                       Intermediate world coordinates, in SI units.
      82  *
      83  * Returned:
      84  *   logc      double[]  Logarithmic coordinates, in SI units.
      85  *
      86  *   stat      int[]     Status return value status for each vector element:
      87  *                         0: Success.
      88  *
      89  * Function return value:
      90  *             int       Status return value:
      91  *                         0: Success.
      92  *                         2: Invalid log-coordinate reference value.
      93  *
      94  *
      95  * logs2x() - Transform logarithmic coordinates
      96  * --------------------------------------------
      97  * logs2x() transforms logarithmic world coordinates to intermediate world
      98  * coordinates.
      99  *
     100  * Given and returned:
     101  *   crval     double    Log-coordinate reference value (CRVALia).
     102  *
     103  * Given:
     104  *   nlogc     int       Vector length.
     105  *
     106  *   slogc     int       Vector stride.
     107  *
     108  *   sx        int       Vector stride.
     109  *
     110  *   logc      const double[]
     111  *                       Logarithmic coordinates, in SI units.
     112  *
     113  * Returned:
     114  *   x         double[]  Intermediate world coordinates, in SI units.
     115  *
     116  *   stat      int[]     Status return value status for each vector element:
     117  *                         0: Success.
     118  *                         1: Invalid value of logc.
     119  *
     120  * Function return value:
     121  *             int       Status return value:
     122  *                         0: Success.
     123  *                         2: Invalid log-coordinate reference value.
     124  *                         4: One or more of the world-coordinate values
     125  *                            are incorrect, as indicated by the stat vector.
     126  *
     127  *
     128  * Global variable: const char *log_errmsg[] - Status return messages
     129  * ------------------------------------------------------------------
     130  * Error messages to match the status value returned from each function.
     131  *
     132  *===========================================================================*/
     133  
     134  #ifndef WCSLIB_LOG
     135  #define WCSLIB_LOG
     136  
     137  #ifdef __cplusplus
     138  extern "C" {
     139  #endif
     140  
     141  extern const char *log_errmsg[];
     142  
     143  enum log_errmsg_enum {
     144    LOGERR_SUCCESS         = 0,	// Success.
     145    LOGERR_NULL_POINTER    = 1,	// Null pointer passed.
     146    LOGERR_BAD_LOG_REF_VAL = 2,	// Invalid log-coordinate reference value.
     147    LOGERR_BAD_X           = 3,	// One or more of the x coordinates were
     148  				// invalid.
     149    LOGERR_BAD_WORLD       = 4 	// One or more of the world coordinates were
     150  				// invalid.
     151  };
     152  
     153  int logx2s(double crval, int nx, int sx, int slogc, const double x[],
     154             double logc[], int stat[]);
     155  
     156  int logs2x(double crval, int nlogc, int slogc, int sx, const double logc[],
     157             double x[], int stat[]);
     158  
     159  
     160  #ifdef __cplusplus
     161  }
     162  #endif
     163  
     164  #endif // WCSLIB_LOG