WCSLIB: wcsfix.h Source File

WCSLIB 6.3

wcsfix.h
Go to the documentation of this file.
1 /*============================================================================
2
3 WCSLIB 6.3 - an implementation of the FITS WCS standard.
4 Copyright (C) 1995-2019, Mark Calabretta
5
6 This file is part of WCSLIB.
7
8 WCSLIB is free software: you can redistribute it and/or modify it under the
9 terms of the GNU Lesser General Public License as published by the Free
10 Software Foundation, either version 3 of the License, or (at your option)
11 any later version.
12
13 WCSLIB is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
16 more details.
17
18 You should have received a copy of the GNU Lesser General Public License
19 along with WCSLIB. If not, see http://www.gnu.org/licenses.
20
21 Direct correspondence concerning WCSLIB to mark@calabretta.id.au
22
23 Author: Mark Calabretta, Australia Telescope National Facility, CSIRO.
24 http://www.atnf.csiro.au/people/Mark.Calabretta
25 $Id: wcsfix.h,v 6.3 2019/07/12 07:33:39 mcalabre Exp $
26 *=============================================================================
27 *
28 * WCSLIB 6.3 - C routines that implement the FITS World Coordinate System
29 * (WCS) standard. Refer to the README file provided with WCSLIB for an
30 * overview of the library.
31 *
32 *
33 * Summary of the wcsfix routines
34 * ------------------------------
35 * Routines in this suite identify and translate various forms of construct
36 * known to occur in FITS headers that violate the FITS World Coordinate System
37 * (WCS) standard described in
38 *
39 = "Representations of world coordinates in FITS",
40 = Greisen, E.W., & Calabretta, M.R. 2002, A&A, 395, 1061 (WCS Paper I)
41 =
42 = "Representations of celestial coordinates in FITS",
43 = Calabretta, M.R., & Greisen, E.W. 2002, A&A, 395, 1077 (WCS Paper II)
44 =
45 = "Representations of spectral coordinates in FITS",
46 = Greisen, E.W., Calabretta, M.R., Valdes, F.G., & Allen, S.L.
47 = 2006, A&A, 446, 747 (WCS Paper III)
48 =
49 = "Representations of time coordinates in FITS -
50 = Time and relative dimension in space",
51 = Rots, A.H., Bunclark, P.S., Calabretta, M.R., Allen, S.L.,
52 = Manchester, R.N., & Thompson, W.T. 2015, A&A, 574, A36 (WCS Paper VII)
53 *
54 * Repairs effected by these routines range from the translation of
55 * non-standard values for standard WCS keywords, to the repair of malformed
56 * coordinate representations. Some routines are also provided to check the
57 * consistency of pairs of keyvalues that define the same measure in two
58 * different ways, for example, as a date and an MJD.
59 *
60 * Non-standard keyvalues:
61 * -----------------------
62 * AIPS-convention celestial projection types, NCP and GLS, and spectral
63 * types, 'FREQ-LSR', 'FELO-HEL', etc., set in CTYPEia are translated
64 * on-the-fly by wcsset() but without modifying the relevant ctype[], pv[] or
65 * specsys members of the wcsprm struct. That is, only the information
66 * extracted from ctype[] is translated when wcsset() fills in wcsprm::cel
67 * (celprm struct) or wcsprm::spc (spcprm struct).
68 *
69 * On the other hand, these routines do change the values of wcsprm::ctype[],
70 * wcsprm::pv[], wcsprm::specsys and other wcsprm struct members as
71 * appropriate to produce the same result as if the FITS header itself had
72 * been translated.
73 *
74 * Auxiliary WCS header information not used directly by WCSLIB may also be
75 * translated. For example, the older DATE-OBS date format (wcsprm::dateobs)
76 * is recast to year-2000 standard form, and MJD-OBS (wcsprm::mjdobs) will be
77 * deduced from it if not already set.
78 *
79 * Certain combinations of keyvalues that result in malformed coordinate
80 * systems, as described in Sect. 7.3.4 of Paper I, may also be repaired.
81 * These are handled by cylfix().
82 *
83 * Non-standard keywords:
84 * ----------------------
85 * The AIPS-convention CROTAn keywords are recognized as quasi-standard
86 * and as such are accomodated by wcsprm::crota[] and translated to
87 * wcsprm::pc[][] by wcsset(). These are not dealt with here, nor are any
88 * other non-standard keywords since these routines work only on the contents
89 * of a wcsprm struct and do not deal with FITS headers per se. In
90 * particular, they do not identify or translate CD00i00j, PC00i00j, PROJPn,
91 * EPOCH, VELREF or VSOURCEa keywords; this may be done by the FITS WCS
92 * header parser supplied with WCSLIB, refer to wcshdr.h.
93 *
94 * wcsfix() and wcsfixi() apply all of the corrections handled by the following
95 * specific functions which may also be invoked separately:
96 *
97 * - cdfix(): Sets the diagonal element of the CDi_ja matrix to 1.0 if all
98 * CDi_ja keywords associated with a particular axis are omitted.
99 *
100 * - datfix(): recast an older DATE-OBS date format in dateobs to year-2000
101 * standard form.
102 *
103 * Derive mjdobs from dateobs if not already set. Alternatively, if mjdobs
104 * is set and dateobs isn't, then derive dateobs from it. If both are set,
105 * then check consistency. Likewise for datebeg and mjdbeg; dateavg and
106 * mjdavg; and dateend and mjdend.
107 *
108 * - obsfix(): if only one half of obsgeo[] is set, then derive the other
109 * half from it. If both halves are set, then check consistency.
110 *
111 * - unitfix(): translate some commonly used but non-standard unit strings in
112 * the CUNITia keyvalues, e.g. 'DEG' -> 'deg'.
113 *
114 * - spcfix(): translate AIPS-convention spectral types, 'FREQ-LSR',
115 * 'FELO-HEL', etc., in ctype[] as set from CTYPEia.
116 *
117 * - celfix(): translate AIPS-convention celestial projection types, NCP and
118 * GLS, in ctype[] as set from CTYPEia.
119 *
120 * - cylfix(): fixes WCS keyvalues for malformed cylindrical projections that
121 * suffer from the problem described in Sect. 7.3.4 of Paper I.
122 *
123 *
124 * wcsfix() - Translate a non-standard WCS struct
125 * ----------------------------------------------
126 * wcsfix() is identical to wcsfixi(), but lacks the info argument.
127 *
128 *
129 * wcsfixi() - Translate a non-standard WCS struct
130 * -----------------------------------------------
131 * wcsfixi() applies all of the corrections handled separately by cdfix(),
132 * datfix(), obsfix(), unitfix(), spcfix(), celfix(), and cylfix().
133 *
134 * Given:
135 * ctrl int Do potentially unsafe translations of non-standard
136 * unit strings as described in the usage notes to
137 * wcsutrn().
138 *
139 * naxis const int []
140 * Image axis lengths. If this array pointer is set to
141 * zero then cylfix() will not be invoked.
142 *
143 * Given and returned:
144 * wcs struct wcsprm*
145 * Coordinate transformation parameters.
146 *
147 * Returned:
148 * stat int [NWCSFIX]
149 * Status returns from each of the functions. Use the
150 * preprocessor macros NWCSFIX to dimension this vector
151 * and CDFIX, DATFIX, OBSFIX, UNITFIX, SPCFIX, CELFIX,
152 * and CYLFIX to access its elements. A status value
153 * of -2 is set for functions that were not invoked.
154 *
155 * info struct wcserr [NWCSFIX]
156 * Status messages from each of the functions. Use the
157 * preprocessor macros NWCSFIX to dimension this vector
158 * and CDFIX, DATFIX, OBSFIX, UNITFIX, SPCFIX, CELFIX,
159 * and CYLFIX to access its elements.
160 *
161 * Note that the memory allocated by wcsfixi() for the
162 * message in each wcserr struct (wcserr::msg, if
163 * non-zero) must be freed by the user. See
164 * wcsdealloc().
165 *
166 * Function return value:
167 * int Status return value:
168 * 0: Success.
169 * 1: One or more of the translation functions
170 * returned an error.
171 *
172 *
173 * cdfix() - Fix erroneously omitted CDi_ja keywords
174 * -------------------------------------------------
175 * cdfix() sets the diagonal element of the CDi_ja matrix to unity if all
176 * CDi_ja keywords associated with a given axis were omitted. According to
177 * Paper I, if any CDi_ja keywords at all are given in a FITS header then those
178 * not given default to zero. This results in a singular matrix with an
179 * intersecting row and column of zeros.
180 *
181 * Given and returned:
182 * wcs struct wcsprm*
183 * Coordinate transformation parameters.
184 *
185 * Function return value:
186 * int Status return value:
187 * -1: No change required (not an error).
188 * 0: Success.
189 * 1: Null wcsprm pointer passed.
190 *
191 *
192 * datfix() - Translate DATE-OBS and derive MJD-OBS or vice versa
193 * --------------------------------------------------------------
194 * datfix() translates the old DATE-OBS date format set in wcsprm::dateobs to
195 * year-2000 standard form (yyyy-mm-ddThh:mm:ss).
196 *
197 * datfix() derives wcsprm::mjdobs from wcsprm::datobs if not already set.
198 * Alternatively, if mjdobs is set and dateobs isn't, then it derives dateobs
199 * from it. If both are set but disagree by more than 0.001 day (86.4 seconds)
200 * then status 5 is returned. Likewise for wcsprm::datebeg and wcsprm::mjdbeg;
201 * wcsprm::dateavg and wcsprm::mjdavg; and wcsprm::dateend and wcsprm::mjdend.
202 *
203 * If neither dateobs nor mjdobs are set, but wcsprm::jepoch (primarily) or
204 * wcsprm::bepoch is, then both are derived from it. If jepoch and/or bepoch
205 * are set but disagree with dateobs or mjdobs by more than 0.000002 year
206 * (63.2 seconds), an informative message is produced.
207 *
208 * Given and returned:
209 * wcs struct wcsprm*
210 * Coordinate transformation parameters.
211 * wcsprm::dateobs and/or wcsprm::mjdobs may be changed.
212 * wcsprm::datebeg and/or wcsprm::mjdbeg may be changed.
213 * wcsprm::dateavg and/or wcsprm::mjdavg may be changed.
214 * wcsprm::dateend and/or wcsprm::mjdend may be changed.
215 *
216 * Function return value:
217 * int Status return value:
218 * -1: No change required (not an error).
219 * 0: Success.
220 * 1: Null wcsprm pointer passed.
221 * 5: Invalid parameter value.
222 *
223 * For returns > 1, a detailed error message is set in
224 * wcsprm::err if enabled, see wcserr_enable().
225 *
226 * Notes:
227 * The MJD algorithms used by datfix() are from D.A. Hatcher, 1984, QJRAS,
228 * 25, 53-55, as modified by P.T. Wallace for use in SLALIB subroutines CLDJ
229 * and DJCL.
230 *
231 *
232 * obsfix() - complete the OBSGEO-[XYZLBH] vector of observatory coordinates
233 * -------------------------------------------------------------------------
234 * obsfix() completes the wcsprm::obsgeo vector of observatory coordinates.
235 * That is, if only the (x,y,z) Cartesian coordinate triplet or the (l,b,h)
236 * geodetic coordinate triplet are set, then it derives the other triplet from
237 * it. If both triplets are set, then it checks for consistency at the level
238 * of 1 metre.
239 *
240 * Given:
241 * ctrl int Flag that controls behaviour if one triplet is
242 * defined and the other is only partially defined:
243 * 0: Reset only the undefined elements of an
244 * incomplete coordinate triplet.
245 * 1: Reset all elements of an incomplete triplet.
246 * 2: Don't make any changes, check for consistency
247 * only. Returns an error if either of the two
248 * triplets is incomplete.
249 *
250 * Given and returned:
251 * wcs struct wcsprm*
252 * Coordinate transformation parameters.
253 * wcsprm::obsgeo may be changed.
254 *
255 * Function return value:
256 * int Status return value:
257 * -1: No change required (not an error).
258 * 0: Success.
259 * 1: Null wcsprm pointer passed.
260 * 5: Invalid parameter value.
261 *
262 * For returns > 1, a detailed error message is set in
263 * wcsprm::err if enabled, see wcserr_enable().
264 *
265 * Notes:
266 * 1: While the International Terrestrial Reference System (ITRS) is based
267 * solely on Cartesian coordinates, it recommends the use of the GRS80
268 * ellipsoid in converting to geodetic coordinates. However, while WCS
269 * Paper III recommends ITRS Cartesian coordinates, Paper VII prescribes
270 * the use of the IAU(1976) ellipsoid for geodetic coordinates, and
271 * consequently that is what is used here.
272 *
273 * 2: For reference, parameters of commonly used global reference ellipsoids:
274 *
275 = a (m) 1/f Standard
276 = --------- ------------- --------------------------------
277 = 6378140 298.2577 IAU(1976)
278 = 6378137 298.257222101 GRS80
279 = 6378137 298.257223563 WGS84
280 = 6378136 298.257 IERS(1989)
281 = 6378136.6 298.25642 IERS(2003,2010), IAU(2009/2012)
282 *
283 * where f = (a - b) / a is the flattening, and a and b are the semi-major
284 * and semi-minor radii in metres.
285 *
286 * 3: The transformation from geodetic (lng,lat,hgt) to Cartesian (x,y,z) is
287 *
288 = x = (n + hgt)*coslng*coslat,
289 = y = (n + hgt)*sinlng*coslat,
290 = z = (n*(1.0 - e^2) + hgt)*sinlat,
291 *
292 * where the "prime vertical radius", n, is a function of latitude
293 *
294 = n = a / sqrt(1 - (e*sinlat)^2),
295 *
296 * and a, the equatorial radius, and e^2 = (2 - f)*f, the (first)
297 * eccentricity of the ellipsoid, are constants. obsfix() inverts these
298 * iteratively by writing
299 *
300 = x = rho*coslng*coslat,
301 = y = rho*sinlng*coslat,
302 = zeta = rho*sinlat,
303 *
304 * where
305 *
306 = rho = n + hgt,
307 = = sqrt(x^2 + y^2 + zeta^2),
308 = zeta = z / (1 - n*e^2/rho),
309 *
310 * and iterating over the value of zeta. Since e is small, a good first
311 * approximation is given by zeta = z.
312 *
313 *
314 * unitfix() - Correct aberrant CUNITia keyvalues
315 * ----------------------------------------------
316 * unitfix() applies wcsutrn() to translate non-standard CUNITia keyvalues,
317 * e.g. 'DEG' -> 'deg', also stripping off unnecessary whitespace.
318 *
319 * Given:
320 * ctrl int Do potentially unsafe translations described in the
321 * usage notes to wcsutrn().
322 *
323 * Given and returned:
324 * wcs struct wcsprm*
325 * Coordinate transformation parameters.
326 *
327 * Function return value:
328 * int Status return value:
329 * -1: No change required (not an error).
330 * 0: Success (an alias was applied).
331 * 1: Null wcsprm pointer passed.
332 *
333 * When units are translated (i.e. status 0), status -2
334 * is set in the wcserr struct to allow an informative
335 * message to be returned.
336 *
337 *
338 * spcfix() - Translate AIPS-convention spectral types
339 * ---------------------------------------------------
340 * spcfix() translates AIPS-convention spectral coordinate types,
341 * '{FREQ,FELO,VELO}-{LSR,HEL,OBS}' (e.g. 'FREQ-OBS', 'FELO-HEL', 'VELO-LSR')
342 * set in wcsprm::ctype[], subject to VELREF set in wcsprm::velref.
343 *
344 * Note that if wcs::specsys is already set then it will not be overridden.
345 *
346 * Given and returned:
347 * wcs struct wcsprm*
348 * Coordinate transformation parameters. wcsprm::ctype[]
349 * and/or wcsprm::specsys may be changed.
350 *
351 * Function return value:
352 * int Status return value:
353 * -1: No change required (not an error).
354 * 0: Success.
355 * 1: Null wcsprm pointer passed.
356 * 2: Memory allocation failed.
357 * 3: Linear transformation matrix is singular.
358 * 4: Inconsistent or unrecognized coordinate axis
359 * types.
360 * 5: Invalid parameter value.
361 * 6: Invalid coordinate transformation parameters.
362 * 7: Ill-conditioned coordinate transformation
363 * parameters.
364 *
365 * For returns > 1, a detailed error message is set in
366 * wcsprm::err if enabled, see wcserr_enable().
367 *
368 *
369 * celfix() - Translate AIPS-convention celestial projection types
370 * ---------------------------------------------------------------
371 * celfix() translates AIPS-convention celestial projection types, NCP and
372 * GLS, set in the ctype[] member of the wcsprm struct.
373 *
374 * Two additional pv[] keyvalues are created when translating NCP, and three
375 * are created when translating GLS with non-zero reference point. If the pv[]
376 * array was initially allocated by wcsini() then the array will be expanded if
377 * necessary. Otherwise, error 2 will be returned if sufficient empty slots
378 * are not already available for use.
379 *
380 * Given and returned:
381 * wcs struct wcsprm*
382 * Coordinate transformation parameters. wcsprm::ctype[]
383 * and/or wcsprm::pv[] may be changed.
384 *
385 * Function return value:
386 * int Status return value:
387 * -1: No change required (not an error).
388 * 0: Success.
389 * 1: Null wcsprm pointer passed.
390 * 2: Memory allocation failed.
391 * 3: Linear transformation matrix is singular.
392 * 4: Inconsistent or unrecognized coordinate axis
393 * types.
394 * 5: Invalid parameter value.
395 * 6: Invalid coordinate transformation parameters.
396 * 7: Ill-conditioned coordinate transformation
397 * parameters.
398 *
399 * For returns > 1, a detailed error message is set in
400 * wcsprm::err if enabled, see wcserr_enable().
401 *
402 *
403 * cylfix() - Fix malformed cylindrical projections
404 * ------------------------------------------------
405 * cylfix() fixes WCS keyvalues for malformed cylindrical projections that
406 * suffer from the problem described in Sect. 7.3.4 of Paper I.
407 *
408 * Given:
409 * naxis const int []
410 * Image axis lengths.
411 *
412 * Given and returned:
413 * wcs struct wcsprm*
414 * Coordinate transformation parameters.
415 *
416 * Function return value:
417 * int Status return value:
418 * -1: No change required (not an error).
419 * 0: Success.
420 * 1: Null wcsprm pointer passed.
421 * 2: Memory allocation failed.
422 * 3: Linear transformation matrix is singular.
423 * 4: Inconsistent or unrecognized coordinate axis
424 * types.
425 * 5: Invalid parameter value.
426 * 6: Invalid coordinate transformation parameters.
427 * 7: Ill-conditioned coordinate transformation
428 * parameters.
429 * 8: All of the corner pixel coordinates are invalid.
430 * 9: Could not determine reference pixel coordinate.
431 * 10: Could not determine reference pixel value.
432 *
433 * For returns > 1, a detailed error message is set in
434 * wcsprm::err if enabled, see wcserr_enable().
435 *
436 *
437 * Global variable: const char *wcsfix_errmsg[] - Status return messages
438 * ---------------------------------------------------------------------
439 * Error messages to match the status value returned from each function.
440 *
441 *===========================================================================*/
442
443 #ifndef WCSLIB_WCSFIX
444 #define WCSLIB_WCSFIX
445
446 #include "wcs.h"
447 #include "wcserr.h"
448
449 #ifdef __cplusplus
450 extern "C" {
451 #endif
452
453 #define CDFIX 0
454 #define DATFIX 1
455 #define OBSFIX 2
456 #define UNITFIX 3
457 #define SPCFIX 4
458 #define CELFIX 5
459 #define CYLFIX 6
460 #define NWCSFIX 7
461
462 extern const char *wcsfix_errmsg[];
463 #define cylfix_errmsg wcsfix_errmsg
464
465 enum wcsfix_errmsg_enum {
466 FIXERR_OBSGEO_FIX = -5, /* Observatory coordinates amended. */
467 FIXERR_DATE_FIX = -4, /* Date string reformatted. */
468 FIXERR_SPC_UPDATE = -3, /* Spectral axis type modified. */
469 FIXERR_UNITS_ALIAS = -2, /* Units alias translation. */
470 FIXERR_NO_CHANGE = -1, /* No change. */
471 FIXERR_SUCCESS = 0, /* Success. */
472 FIXERR_NULL_POINTER = 1, /* Null wcsprm pointer passed. */
473 FIXERR_MEMORY = 2, /* Memory allocation failed. */
474 FIXERR_SINGULAR_MTX = 3, /* Linear transformation matrix is
475 singular. */
476 FIXERR_BAD_CTYPE = 4, /* Inconsistent or unrecognized coordinate
477 axis types. */
478 FIXERR_BAD_PARAM = 5, /* Invalid parameter value. */
479 FIXERR_BAD_COORD_TRANS = 6, /* Invalid coordinate transformation
480 parameters. */
481 FIXERR_ILL_COORD_TRANS = 7, /* Ill-conditioned coordinate transformation
482 parameters. */
483 FIXERR_BAD_CORNER_PIX = 8, /* All of the corner pixel coordinates are
484 invalid. */
485 FIXERR_NO_REF_PIX_COORD = 9, /* Could not determine reference pixel
486 coordinate. */
487 FIXERR_NO_REF_PIX_VAL = 10 /* Could not determine reference pixel
488 value. */
489 };
490
491 int wcsfix(int ctrl, const int naxis[], struct wcsprm *wcs, int stat[]);
492
493 int wcsfixi(int ctrl, const int naxis[], struct wcsprm *wcs, int stat[],
494 struct wcserr info[]);
495
496 int cdfix(struct wcsprm *wcs);
497
498 int datfix(struct wcsprm *wcs);
499
500 int obsfix(int ctrl, struct wcsprm *wcs);
501
502 int unitfix(int ctrl, struct wcsprm *wcs);
503
504 int spcfix(struct wcsprm *wcs);
505
506 int celfix(struct wcsprm *wcs);
507
508 int cylfix(const int naxis[], struct wcsprm *wcs);
509
510
511 #ifdef __cplusplus
512 }
513 #endif
514
515 #endif /* WCSLIB_WCSFIX */
FIXERR_BAD_COORD_TRANS
Definition: wcsfix.h:479
unitfix
int unitfix(int ctrl, struct wcsprm *wcs)
Correct aberrant CUNITia keyvalues.
wcsfix
int wcsfix(int ctrl, const int naxis[], struct wcsprm *wcs, int stat[])
Translate a non-standard WCS struct.
FIXERR_BAD_CORNER_PIX
Definition: wcsfix.h:483
wcserr
Error message handling.
Definition: wcserr.h:223
FIXERR_DATE_FIX
Definition: wcsfix.h:467
FIXERR_NO_REF_PIX_COORD
Definition: wcsfix.h:485
FIXERR_BAD_PARAM
Definition: wcsfix.h:478
wcsfixi
int wcsfixi(int ctrl, const int naxis[], struct wcsprm *wcs, int stat[], struct wcserr info[])
Translate a non-standard WCS struct.
FIXERR_NO_REF_PIX_VAL
Definition: wcsfix.h:487
obsfix
int obsfix(int ctrl, struct wcsprm *wcs)
complete the OBSGEO-[XYZLBH] vector of observatory coordinates.
wcsfix_errmsg_enum
wcsfix_errmsg_enum
Definition: wcsfix.h:465
FIXERR_UNITS_ALIAS
Definition: wcsfix.h:469
wcsfix_errmsg
const char * wcsfix_errmsg[]
Status return messages.
wcsprm
Coordinate transformation parameters.
Definition: wcs.h:1730
FIXERR_SPC_UPDATE
Definition: wcsfix.h:468
FIXERR_MEMORY
Definition: wcsfix.h:473
FIXERR_SUCCESS
Definition: wcsfix.h:471
cylfix
int cylfix(const int naxis[], struct wcsprm *wcs)
Fix malformed cylindrical projections.
FIXERR_ILL_COORD_TRANS
Definition: wcsfix.h:481
FIXERR_NO_CHANGE
Definition: wcsfix.h:470
FIXERR_OBSGEO_FIX
Definition: wcsfix.h:466
FIXERR_NULL_POINTER
Definition: wcsfix.h:472
spcfix
int spcfix(struct wcsprm *wcs)
Translate AIPS-convention spectral types.
FIXERR_BAD_CTYPE
Definition: wcsfix.h:476
wcserr.h
wcs.h
cdfix
int cdfix(struct wcsprm *wcs)
Fix erroneously omitted CDi_ja keywords.
datfix
int datfix(struct wcsprm *wcs)
Translate DATE-OBS and derive MJD-OBS or vice versa.
FIXERR_SINGULAR_MTX
Definition: wcsfix.h:474
celfix
int celfix(struct wcsprm *wcs)
Translate AIPS-convention celestial projection types.