wcslib (8.2.2)

(root)/
share/
doc/
wcslib-8.2.2/
html/
lin_8h.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>WCSLIB: lin.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">WCSLIB<span id="projectnumber">&#160;8.2.2</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_af99bb3c152a306abd27951285ad1127.html">C</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a>  </div>
  <div class="headertitle"><div class="title">lin.h File Reference</div></div>
</div><!--header-->
<div class="contents">

<p><a href="lin_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structlinprm.html">linprm</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Linear transformation parameters.  <a href="structlinprm.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:afce62bec193631f6e6b58c5b786cd660" id="r_afce62bec193631f6e6b58c5b786cd660"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#afce62bec193631f6e6b58c5b786cd660">LINLEN</a>&#160;&#160;&#160;(sizeof(struct <a class="el" href="structlinprm.html">linprm</a>)/sizeof(int))</td></tr>
<tr class="memdesc:afce62bec193631f6e6b58c5b786cd660"><td class="mdescLeft">&#160;</td><td class="mdescRight">Size of the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct in <em>int</em> units.  <br /></td></tr>
<tr class="separator:afce62bec193631f6e6b58c5b786cd660"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:affec8a2c0650ebd2168d7772b2ecec19" id="r_affec8a2c0650ebd2168d7772b2ecec19"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#affec8a2c0650ebd2168d7772b2ecec19">linini_errmsg</a>&#160;&#160;&#160;<a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79">lin_errmsg</a></td></tr>
<tr class="memdesc:affec8a2c0650ebd2168d7772b2ecec19"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated.  <br /></td></tr>
<tr class="separator:affec8a2c0650ebd2168d7772b2ecec19"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a58c2822debf5b36daa18fe8711d724f2" id="r_a58c2822debf5b36daa18fe8711d724f2"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#a58c2822debf5b36daa18fe8711d724f2">lincpy_errmsg</a>&#160;&#160;&#160;<a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79">lin_errmsg</a></td></tr>
<tr class="memdesc:a58c2822debf5b36daa18fe8711d724f2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated.  <br /></td></tr>
<tr class="separator:a58c2822debf5b36daa18fe8711d724f2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa6d3f59059c532b0217f570f2b4f50df" id="r_aa6d3f59059c532b0217f570f2b4f50df"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#aa6d3f59059c532b0217f570f2b4f50df">linfree_errmsg</a>&#160;&#160;&#160;<a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79">lin_errmsg</a></td></tr>
<tr class="memdesc:aa6d3f59059c532b0217f570f2b4f50df"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated.  <br /></td></tr>
<tr class="separator:aa6d3f59059c532b0217f570f2b4f50df"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8970e09d61fde987211f8e64061e1fa1" id="r_a8970e09d61fde987211f8e64061e1fa1"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#a8970e09d61fde987211f8e64061e1fa1">linprt_errmsg</a>&#160;&#160;&#160;<a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79">lin_errmsg</a></td></tr>
<tr class="memdesc:a8970e09d61fde987211f8e64061e1fa1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated.  <br /></td></tr>
<tr class="separator:a8970e09d61fde987211f8e64061e1fa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa78f202b20674909aab523018106546e" id="r_aa78f202b20674909aab523018106546e"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#aa78f202b20674909aab523018106546e">linset_errmsg</a>&#160;&#160;&#160;<a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79">lin_errmsg</a></td></tr>
<tr class="memdesc:aa78f202b20674909aab523018106546e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated.  <br /></td></tr>
<tr class="separator:aa78f202b20674909aab523018106546e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acb8c02645d7cc3d42e3db6ebf74de192" id="r_acb8c02645d7cc3d42e3db6ebf74de192"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#acb8c02645d7cc3d42e3db6ebf74de192">linp2x_errmsg</a>&#160;&#160;&#160;<a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79">lin_errmsg</a></td></tr>
<tr class="memdesc:acb8c02645d7cc3d42e3db6ebf74de192"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated.  <br /></td></tr>
<tr class="separator:acb8c02645d7cc3d42e3db6ebf74de192"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7232df93295216e063c438671652c2b4" id="r_a7232df93295216e063c438671652c2b4"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#a7232df93295216e063c438671652c2b4">linx2p_errmsg</a>&#160;&#160;&#160;<a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79">lin_errmsg</a></td></tr>
<tr class="memdesc:a7232df93295216e063c438671652c2b4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deprecated.  <br /></td></tr>
<tr class="separator:a7232df93295216e063c438671652c2b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="enum-members" name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:a6690044d47c6784a4cc0ccf6f52bfc1f" id="r_a6690044d47c6784a4cc0ccf6f52bfc1f"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#a6690044d47c6784a4cc0ccf6f52bfc1f">lin_errmsg_enum</a> { <br />
&#160;&#160;<a class="el" href="lin_8h.html#a6690044d47c6784a4cc0ccf6f52bfc1fa2544660be2086b8225623e8a7b534dfb">LINERR_SUCCESS</a> = 0
, <a class="el" href="lin_8h.html#a6690044d47c6784a4cc0ccf6f52bfc1fa84e4dcf5e518ba3dce985ef7c9687513">LINERR_NULL_POINTER</a> = 1
, <a class="el" href="lin_8h.html#a6690044d47c6784a4cc0ccf6f52bfc1fa28004da63d882a7df754d49047ea7f2d">LINERR_MEMORY</a> = 2
, <a class="el" href="lin_8h.html#a6690044d47c6784a4cc0ccf6f52bfc1fad2248fa36c9d85c91187179ae95207e8">LINERR_SINGULAR_MTX</a> = 3
, <br />
&#160;&#160;<a class="el" href="lin_8h.html#a6690044d47c6784a4cc0ccf6f52bfc1fabf345caedf5c1dd97c44f38b34ca2da7">LINERR_DISTORT_INIT</a> = 4
, <a class="el" href="lin_8h.html#a6690044d47c6784a4cc0ccf6f52bfc1fa3e2bbcacb84e47b393daa1ff8c3e70a2">LINERR_DISTORT</a> = 5
, <a class="el" href="lin_8h.html#a6690044d47c6784a4cc0ccf6f52bfc1fa36fc93e3c5e2d1a1de01d399232a03d9">LINERR_DEDISTORT</a> = 6
<br />
 }</td></tr>
<tr class="separator:a6690044d47c6784a4cc0ccf6f52bfc1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="func-members" name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a7ddea28768d99f01c6be1c71a4d8fe58" id="r_a7ddea28768d99f01c6be1c71a4d8fe58"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#a7ddea28768d99f01c6be1c71a4d8fe58">linini</a> (int alloc, int naxis, struct <a class="el" href="structlinprm.html">linprm</a> *lin)</td></tr>
<tr class="memdesc:a7ddea28768d99f01c6be1c71a4d8fe58"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor for the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct.  <br /></td></tr>
<tr class="separator:a7ddea28768d99f01c6be1c71a4d8fe58"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa85e4b255b144d2b806f51be0d36be2" id="r_afa85e4b255b144d2b806f51be0d36be2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#afa85e4b255b144d2b806f51be0d36be2">lininit</a> (int alloc, int naxis, struct <a class="el" href="structlinprm.html">linprm</a> *lin, int ndpmax)</td></tr>
<tr class="memdesc:afa85e4b255b144d2b806f51be0d36be2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Default constructor for the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct.  <br /></td></tr>
<tr class="separator:afa85e4b255b144d2b806f51be0d36be2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad68df60cc9fa6f86e2c6e6943dc74cdb" id="r_ad68df60cc9fa6f86e2c6e6943dc74cdb"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#ad68df60cc9fa6f86e2c6e6943dc74cdb">lindis</a> (int sequence, struct <a class="el" href="structlinprm.html">linprm</a> *lin, struct <a class="el" href="structdisprm.html">disprm</a> *dis)</td></tr>
<tr class="memdesc:ad68df60cc9fa6f86e2c6e6943dc74cdb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign a distortion to a <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct.  <br /></td></tr>
<tr class="separator:ad68df60cc9fa6f86e2c6e6943dc74cdb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5bc6ffb673b1c38105bdf2d8def5194" id="r_ad5bc6ffb673b1c38105bdf2d8def5194"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#ad5bc6ffb673b1c38105bdf2d8def5194">lindist</a> (int sequence, struct <a class="el" href="structlinprm.html">linprm</a> *lin, struct <a class="el" href="structdisprm.html">disprm</a> *dis, int ndpmax)</td></tr>
<tr class="memdesc:ad5bc6ffb673b1c38105bdf2d8def5194"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assign a distortion to a <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct.  <br /></td></tr>
<tr class="separator:ad5bc6ffb673b1c38105bdf2d8def5194"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab8fc0ef6b34eb3327b13a00de78232b1" id="r_ab8fc0ef6b34eb3327b13a00de78232b1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#ab8fc0ef6b34eb3327b13a00de78232b1">lincpy</a> (int alloc, const struct <a class="el" href="structlinprm.html">linprm</a> *linsrc, struct <a class="el" href="structlinprm.html">linprm</a> *lindst)</td></tr>
<tr class="memdesc:ab8fc0ef6b34eb3327b13a00de78232b1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy routine for the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct.  <br /></td></tr>
<tr class="separator:ab8fc0ef6b34eb3327b13a00de78232b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aef9ead7c6ea6ab08f3ba3fc6a1c30303" id="r_aef9ead7c6ea6ab08f3ba3fc6a1c30303"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#aef9ead7c6ea6ab08f3ba3fc6a1c30303">linfree</a> (struct <a class="el" href="structlinprm.html">linprm</a> *lin)</td></tr>
<tr class="memdesc:aef9ead7c6ea6ab08f3ba3fc6a1c30303"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor for the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct.  <br /></td></tr>
<tr class="separator:aef9ead7c6ea6ab08f3ba3fc6a1c30303"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4994e12620ea9bb1377dd16d5e31fb20" id="r_a4994e12620ea9bb1377dd16d5e31fb20"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#a4994e12620ea9bb1377dd16d5e31fb20">linsize</a> (const struct <a class="el" href="structlinprm.html">linprm</a> *lin, int sizes[2])</td></tr>
<tr class="memdesc:a4994e12620ea9bb1377dd16d5e31fb20"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute the size of a <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct.  <br /></td></tr>
<tr class="separator:a4994e12620ea9bb1377dd16d5e31fb20"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a946005b038f5c584691630b5d39369e3" id="r_a946005b038f5c584691630b5d39369e3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#a946005b038f5c584691630b5d39369e3">linprt</a> (const struct <a class="el" href="structlinprm.html">linprm</a> *lin)</td></tr>
<tr class="memdesc:a946005b038f5c584691630b5d39369e3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Print routine for the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct.  <br /></td></tr>
<tr class="separator:a946005b038f5c584691630b5d39369e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7bdde709fac889f1c386e9c8993d74f7" id="r_a7bdde709fac889f1c386e9c8993d74f7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#a7bdde709fac889f1c386e9c8993d74f7">linperr</a> (const struct <a class="el" href="structlinprm.html">linprm</a> *lin, const char *prefix)</td></tr>
<tr class="memdesc:a7bdde709fac889f1c386e9c8993d74f7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Print error messages from a <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct.  <br /></td></tr>
<tr class="separator:a7bdde709fac889f1c386e9c8993d74f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5c01c0991c8d0c4437581a7c1453b09a" id="r_a5c01c0991c8d0c4437581a7c1453b09a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#a5c01c0991c8d0c4437581a7c1453b09a">linset</a> (struct <a class="el" href="structlinprm.html">linprm</a> *lin)</td></tr>
<tr class="memdesc:a5c01c0991c8d0c4437581a7c1453b09a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Setup routine for the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct.  <br /></td></tr>
<tr class="separator:a5c01c0991c8d0c4437581a7c1453b09a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae4947608476c198ad27759d1e562d655" id="r_ae4947608476c198ad27759d1e562d655"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#ae4947608476c198ad27759d1e562d655">linp2x</a> (struct <a class="el" href="structlinprm.html">linprm</a> *lin, int ncoord, int nelem, const double pixcrd[], double imgcrd[])</td></tr>
<tr class="memdesc:ae4947608476c198ad27759d1e562d655"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pixel-to-world linear transformation.  <br /></td></tr>
<tr class="separator:ae4947608476c198ad27759d1e562d655"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5490027e9699680dfefe370c28691243" id="r_a5490027e9699680dfefe370c28691243"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#a5490027e9699680dfefe370c28691243">linx2p</a> (struct <a class="el" href="structlinprm.html">linprm</a> *lin, int ncoord, int nelem, const double imgcrd[], double pixcrd[])</td></tr>
<tr class="memdesc:a5490027e9699680dfefe370c28691243"><td class="mdescLeft">&#160;</td><td class="mdescRight">World-to-pixel linear transformation.  <br /></td></tr>
<tr class="separator:a5490027e9699680dfefe370c28691243"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a27a7a4a2cc3183bb1cd639efaade2265" id="r_a27a7a4a2cc3183bb1cd639efaade2265"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#a27a7a4a2cc3183bb1cd639efaade2265">linwarp</a> (struct <a class="el" href="structlinprm.html">linprm</a> *lin, const double pixblc[], const double pixtrc[], const double pixsamp[], int *nsamp, double maxdis[], double *maxtot, double avgdis[], double *avgtot, double rmsdis[], double *rmstot)</td></tr>
<tr class="memdesc:a27a7a4a2cc3183bb1cd639efaade2265"><td class="mdescLeft">&#160;</td><td class="mdescRight">Compute measures of distortion.  <br /></td></tr>
<tr class="separator:a27a7a4a2cc3183bb1cd639efaade2265"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acc7d26efba3ca08d36047253a9315dcc" id="r_acc7d26efba3ca08d36047253a9315dcc"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#acc7d26efba3ca08d36047253a9315dcc">matinv</a> (int n, const double mat[], double inv[])</td></tr>
<tr class="memdesc:acc7d26efba3ca08d36047253a9315dcc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Matrix inversion.  <br /></td></tr>
<tr class="separator:acc7d26efba3ca08d36047253a9315dcc"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="var-members" name="var-members"></a>
Variables</h2></td></tr>
<tr class="memitem:a7bdf034bd750df1e518db9feeebf7a79" id="r_a7bdf034bd750df1e518db9feeebf7a79"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79">lin_errmsg</a> []</td></tr>
<tr class="memdesc:a7bdf034bd750df1e518db9feeebf7a79"><td class="mdescLeft">&#160;</td><td class="mdescRight">Status return messages.  <br /></td></tr>
<tr class="separator:a7bdf034bd750df1e518db9feeebf7a79"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Routines in this suite apply the linear transformation defined by the FITS World Coordinate System (WCS) standard, as described in </p><div class="fragment"><div class="line"><span class="stringliteral">&quot;Representations of world coordinates in FITS&quot;</span>,</div>
<div class="line">Greisen, E.W., &amp; Calabretta, M.R. 2002, A&amp;A, 395, 1061 (WCS Paper I)</div>
</div><!-- fragment --><p>These routines are based on the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct which contains all information needed for the computations. The struct contains some members that must be set by the user, and others that are maintained by these routines, somewhat like a C++ class but with no encapsulation.</p>
<p>Six routines, <a class="el" href="lin_8h.html#a7ddea28768d99f01c6be1c71a4d8fe58" title="Default constructor for the linprm struct.">linini()</a>, <a class="el" href="lin_8h.html#afa85e4b255b144d2b806f51be0d36be2" title="Default constructor for the linprm struct.">lininit()</a>, <a class="el" href="lin_8h.html#ad68df60cc9fa6f86e2c6e6943dc74cdb" title="Assign a distortion to a linprm struct.">lindis()</a>, <a class="el" href="lin_8h.html#ad5bc6ffb673b1c38105bdf2d8def5194" title="Assign a distortion to a linprm struct.">lindist()</a> <a class="el" href="lin_8h.html#ab8fc0ef6b34eb3327b13a00de78232b1" title="Copy routine for the linprm struct.">lincpy()</a>, and <a class="el" href="lin_8h.html#aef9ead7c6ea6ab08f3ba3fc6a1c30303" title="Destructor for the linprm struct.">linfree()</a> are provided to manage the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct, <a class="el" href="lin_8h.html#a4994e12620ea9bb1377dd16d5e31fb20" title="Compute the size of a linprm struct.">linsize()</a> computes its total size including allocated memory, and <a class="el" href="lin_8h.html#a946005b038f5c584691630b5d39369e3" title="Print routine for the linprm struct.">linprt()</a> prints its contents.</p>
<p><a class="el" href="lin_8h.html#a7bdde709fac889f1c386e9c8993d74f7" title="Print error messages from a linprm struct.">linperr()</a> prints the error message(s) (if any) stored in a <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct, and the disprm structs that it may contain.</p>
<p>A setup routine, <a class="el" href="lin_8h.html#a5c01c0991c8d0c4437581a7c1453b09a" title="Setup routine for the linprm struct.">linset()</a>, computes intermediate values in the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct from parameters in it that were supplied by the user. The struct always needs to be set up by <a class="el" href="lin_8h.html#a5c01c0991c8d0c4437581a7c1453b09a" title="Setup routine for the linprm struct.">linset()</a> but need not be called explicitly - refer to the explanation of <a class="el" href="structlinprm.html#a5bb0b2b2ce1f160a8a70f6437a893eea">linprm::flag</a>.</p>
<p><a class="el" href="lin_8h.html#ae4947608476c198ad27759d1e562d655" title="Pixel-to-world linear transformation.">linp2x()</a> and <a class="el" href="lin_8h.html#a5490027e9699680dfefe370c28691243" title="World-to-pixel linear transformation.">linx2p()</a> implement the WCS linear transformations.</p>
<p>An auxiliary routine, <a class="el" href="lin_8h.html#a27a7a4a2cc3183bb1cd639efaade2265" title="Compute measures of distortion.">linwarp()</a>, computes various measures of the distortion over a specified range of pixel coordinates.</p>
<p>An auxiliary matrix inversion routine, <a class="el" href="lin_8h.html#acc7d26efba3ca08d36047253a9315dcc" title="Matrix inversion.">matinv()</a>, is included. It uses LU-triangular factorization with scaled partial pivoting. </p>
</div><h2 class="groupheader">Macro Definition Documentation</h2>
<a id="afce62bec193631f6e6b58c5b786cd660" name="afce62bec193631f6e6b58c5b786cd660"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afce62bec193631f6e6b58c5b786cd660">&#9670;&#160;</a></span>LINLEN</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define LINLEN&#160;&#160;&#160;(sizeof(struct <a class="el" href="structlinprm.html">linprm</a>)/sizeof(int))</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Size of the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct in <em>int</em> units. </p>
<p>Size of the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct in <em>int</em> units, used by the Fortran wrappers. </p>

</div>
</div>
<a id="affec8a2c0650ebd2168d7772b2ecec19" name="affec8a2c0650ebd2168d7772b2ecec19"></a>
<h2 class="memtitle"><span class="permalink"><a href="#affec8a2c0650ebd2168d7772b2ecec19">&#9670;&#160;</a></span>linini_errmsg</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define linini_errmsg&#160;&#160;&#160;<a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79">lin_errmsg</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Deprecated. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000007">Deprecated:</a></b></dt><dd>Added for backwards compatibility, use <a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79" title="Status return messages.">lin_errmsg</a> directly now instead. </dd></dl>

</div>
</div>
<a id="a58c2822debf5b36daa18fe8711d724f2" name="a58c2822debf5b36daa18fe8711d724f2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a58c2822debf5b36daa18fe8711d724f2">&#9670;&#160;</a></span>lincpy_errmsg</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define lincpy_errmsg&#160;&#160;&#160;<a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79">lin_errmsg</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Deprecated. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000008">Deprecated:</a></b></dt><dd>Added for backwards compatibility, use <a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79" title="Status return messages.">lin_errmsg</a> directly now instead. </dd></dl>

</div>
</div>
<a id="aa6d3f59059c532b0217f570f2b4f50df" name="aa6d3f59059c532b0217f570f2b4f50df"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa6d3f59059c532b0217f570f2b4f50df">&#9670;&#160;</a></span>linfree_errmsg</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define linfree_errmsg&#160;&#160;&#160;<a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79">lin_errmsg</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Deprecated. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000009">Deprecated:</a></b></dt><dd>Added for backwards compatibility, use <a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79" title="Status return messages.">lin_errmsg</a> directly now instead. </dd></dl>

</div>
</div>
<a id="a8970e09d61fde987211f8e64061e1fa1" name="a8970e09d61fde987211f8e64061e1fa1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8970e09d61fde987211f8e64061e1fa1">&#9670;&#160;</a></span>linprt_errmsg</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define linprt_errmsg&#160;&#160;&#160;<a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79">lin_errmsg</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Deprecated. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000010">Deprecated:</a></b></dt><dd>Added for backwards compatibility, use <a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79" title="Status return messages.">lin_errmsg</a> directly now instead. </dd></dl>

</div>
</div>
<a id="aa78f202b20674909aab523018106546e" name="aa78f202b20674909aab523018106546e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa78f202b20674909aab523018106546e">&#9670;&#160;</a></span>linset_errmsg</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define linset_errmsg&#160;&#160;&#160;<a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79">lin_errmsg</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Deprecated. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000011">Deprecated:</a></b></dt><dd>Added for backwards compatibility, use <a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79" title="Status return messages.">lin_errmsg</a> directly now instead. </dd></dl>

</div>
</div>
<a id="acb8c02645d7cc3d42e3db6ebf74de192" name="acb8c02645d7cc3d42e3db6ebf74de192"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acb8c02645d7cc3d42e3db6ebf74de192">&#9670;&#160;</a></span>linp2x_errmsg</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define linp2x_errmsg&#160;&#160;&#160;<a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79">lin_errmsg</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Deprecated. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000012">Deprecated:</a></b></dt><dd>Added for backwards compatibility, use <a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79" title="Status return messages.">lin_errmsg</a> directly now instead. </dd></dl>

</div>
</div>
<a id="a7232df93295216e063c438671652c2b4" name="a7232df93295216e063c438671652c2b4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7232df93295216e063c438671652c2b4">&#9670;&#160;</a></span>linx2p_errmsg</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define linx2p_errmsg&#160;&#160;&#160;<a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79">lin_errmsg</a></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Deprecated. </p>
<dl class="deprecated"><dt><b><a class="el" href="deprecated.html#_deprecated000013">Deprecated:</a></b></dt><dd>Added for backwards compatibility, use <a class="el" href="lin_8h.html#a7bdf034bd750df1e518db9feeebf7a79" title="Status return messages.">lin_errmsg</a> directly now instead. </dd></dl>

</div>
</div>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="a6690044d47c6784a4cc0ccf6f52bfc1f" name="a6690044d47c6784a4cc0ccf6f52bfc1f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6690044d47c6784a4cc0ccf6f52bfc1f">&#9670;&#160;</a></span>lin_errmsg_enum</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="lin_8h.html#a6690044d47c6784a4cc0ccf6f52bfc1f">lin_errmsg_enum</a></td>
        </tr>
      </table>
</div><div class="memdoc">
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a6690044d47c6784a4cc0ccf6f52bfc1fa2544660be2086b8225623e8a7b534dfb" name="a6690044d47c6784a4cc0ccf6f52bfc1fa2544660be2086b8225623e8a7b534dfb"></a>LINERR_SUCCESS&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a6690044d47c6784a4cc0ccf6f52bfc1fa84e4dcf5e518ba3dce985ef7c9687513" name="a6690044d47c6784a4cc0ccf6f52bfc1fa84e4dcf5e518ba3dce985ef7c9687513"></a>LINERR_NULL_POINTER&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a6690044d47c6784a4cc0ccf6f52bfc1fa28004da63d882a7df754d49047ea7f2d" name="a6690044d47c6784a4cc0ccf6f52bfc1fa28004da63d882a7df754d49047ea7f2d"></a>LINERR_MEMORY&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a6690044d47c6784a4cc0ccf6f52bfc1fad2248fa36c9d85c91187179ae95207e8" name="a6690044d47c6784a4cc0ccf6f52bfc1fad2248fa36c9d85c91187179ae95207e8"></a>LINERR_SINGULAR_MTX&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a6690044d47c6784a4cc0ccf6f52bfc1fabf345caedf5c1dd97c44f38b34ca2da7" name="a6690044d47c6784a4cc0ccf6f52bfc1fabf345caedf5c1dd97c44f38b34ca2da7"></a>LINERR_DISTORT_INIT&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a6690044d47c6784a4cc0ccf6f52bfc1fa3e2bbcacb84e47b393daa1ff8c3e70a2" name="a6690044d47c6784a4cc0ccf6f52bfc1fa3e2bbcacb84e47b393daa1ff8c3e70a2"></a>LINERR_DISTORT&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a6690044d47c6784a4cc0ccf6f52bfc1fa36fc93e3c5e2d1a1de01d399232a03d9" name="a6690044d47c6784a4cc0ccf6f52bfc1fa36fc93e3c5e2d1a1de01d399232a03d9"></a>LINERR_DEDISTORT&#160;</td><td class="fielddoc"></td></tr>
</table>

</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="a7ddea28768d99f01c6be1c71a4d8fe58" name="a7ddea28768d99f01c6be1c71a4d8fe58"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7ddea28768d99f01c6be1c71a4d8fe58">&#9670;&#160;</a></span>linini()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int linini </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>alloc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>naxis</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structlinprm.html">linprm</a> *&#160;</td>
          <td class="paramname"><em>lin</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Default constructor for the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct. </p>
<p><b>linini</b>() is a thin wrapper on <b>lininit</b>(). It invokes it with ndpmax set to -1 which causes it to use the value of the global variable NDPMAX. It is thereby potentially thread-unsafe if NDPMAX is altered dynamically via <a class="el" href="dis_8h.html#aa5486b870327544f7423ad2751fb4120" title="Memory allocation for DPja and DQia.">disndp()</a>. Use <b>lininit</b>() for a thread-safe alternative in this case. </p>

</div>
</div>
<a id="afa85e4b255b144d2b806f51be0d36be2" name="afa85e4b255b144d2b806f51be0d36be2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afa85e4b255b144d2b806f51be0d36be2">&#9670;&#160;</a></span>lininit()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int lininit </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>alloc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>naxis</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structlinprm.html">linprm</a> *&#160;</td>
          <td class="paramname"><em>lin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>ndpmax</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Default constructor for the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct. </p>
<p><b>lininit</b>() allocates memory for arrays in a <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct and sets all members of the struct to default values.</p>
<p><b>PLEASE NOTE:</b> every <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct must be initialized by <b>lininit</b>(), possibly repeatedly. On the first invokation, and only the first invokation, <a class="el" href="structlinprm.html#a5bb0b2b2ce1f160a8a70f6437a893eea">linprm::flag</a> must be set to -1 to initialize memory management, regardless of whether <b>lininit</b>() will actually be used to allocate memory.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">alloc</td><td>If true, allocate memory unconditionally for arrays in the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct. <br  />
 If false, it is assumed that pointers to these arrays have been set by the user except if they are null pointers in which case memory will be allocated for them regardless. (In other words, setting alloc true saves having to initalize these pointers to zero.) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">naxis</td><td>The number of world coordinate axes, used to determine array sizes.</td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">lin</td><td>Linear transformation parameters. Note that, in order to initialize memory management <a class="el" href="structlinprm.html#a5bb0b2b2ce1f160a8a70f6437a893eea">linprm::flag</a> should be set to -1 when lin is initialized for the first time (memory leaks may result if it had already been initialized).</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ndpmax</td><td>The number of DPja or DQia keywords to allocate space for. If set to -1, the value of the global variable NDPMAX will be used. This is potentially thread-unsafe if <a class="el" href="dis_8h.html#aa5486b870327544f7423ad2751fb4120" title="Memory allocation for DPja and DQia.">disndp()</a> is being used dynamically to alter its value.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> pointer passed.</li>
<li>2: Memory allocation failed.</li>
</ul>
For returns &gt; 1, a detailed error message is set in <a class="el" href="structlinprm.html#a2975830d4214bb6b35cb1ca922875057">linprm::err</a> if enabled, see <a class="el" href="wcserr_8h.html#a1691b8bd184d40ca6fda255be078fa53" title="Enable/disable error messaging.">wcserr_enable()</a>. </dd></dl>

</div>
</div>
<a id="ad68df60cc9fa6f86e2c6e6943dc74cdb" name="ad68df60cc9fa6f86e2c6e6943dc74cdb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad68df60cc9fa6f86e2c6e6943dc74cdb">&#9670;&#160;</a></span>lindis()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int lindis </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>sequence</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structlinprm.html">linprm</a> *&#160;</td>
          <td class="paramname"><em>lin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structdisprm.html">disprm</a> *&#160;</td>
          <td class="paramname"><em>dis</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Assign a distortion to a <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct. </p>
<p><b>lindis</b>() is a thin wrapper on <b>lindist</b>(). It invokes it with ndpmax set to -1 which causes the value of the global variable NDPMAX to be used (by <a class="el" href="dis_8h.html#a3e0e67bdd01c86eede779de63249c703" title="Default constructor for the disprm struct.">disinit()</a>). It is thereby potentially thread-unsafe if NDPMAX is altered dynamically via <a class="el" href="dis_8h.html#aa5486b870327544f7423ad2751fb4120" title="Memory allocation for DPja and DQia.">disndp()</a>. Use <b>lindist</b>() for a thread-safe alternative in this case. </p>

</div>
</div>
<a id="ad5bc6ffb673b1c38105bdf2d8def5194" name="ad5bc6ffb673b1c38105bdf2d8def5194"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad5bc6ffb673b1c38105bdf2d8def5194">&#9670;&#160;</a></span>lindist()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int lindist </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>sequence</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structlinprm.html">linprm</a> *&#160;</td>
          <td class="paramname"><em>lin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structdisprm.html">disprm</a> *&#160;</td>
          <td class="paramname"><em>dis</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>ndpmax</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Assign a distortion to a <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct. </p>
<p><b>lindist</b>() may be used to assign the address of a disprm struct to <a class="el" href="structlinprm.html#a7d951475b1c16f94703fba9e04ec24d2">linprm::dispre</a> or <a class="el" href="structlinprm.html#a2c21e35f61f428ed14ca2b60bccc10c8">linprm::disseq</a>. The <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct must already have been initialized by <a class="el" href="lin_8h.html#afa85e4b255b144d2b806f51be0d36be2" title="Default constructor for the linprm struct.">lininit()</a>.</p>
<p>The disprm struct must have been allocated from the heap (e.g. using malloc(), calloc(), etc.). <b>lindist</b>() will immediately initialize it via a call to <a class="el" href="dis_8h.html#a8896e2a5330e55cd85da4a28ed6ee463" title="Default constructor for the disprm struct.">disini()</a> using the value of <a class="el" href="structlinprm.html#ae281f0f7ebeaf5038cc13c13946641b1">linprm::naxis</a>. Subsequently, it will be reinitialized by calls to <a class="el" href="lin_8h.html#afa85e4b255b144d2b806f51be0d36be2" title="Default constructor for the linprm struct.">lininit()</a>, and freed by <a class="el" href="lin_8h.html#aef9ead7c6ea6ab08f3ba3fc6a1c30303" title="Destructor for the linprm struct.">linfree()</a>, neither of which would happen if the disprm struct was assigned directly.</p>
<p>If the disprm struct had previously been assigned via <b>lindist</b>(), it will be freed before reassignment. It is also permissable for a null disprm pointer to be assigned to disable the distortion correction.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">sequence</td><td>Is it a prior or sequent distortion?<ul>
<li>1: Prior, the assignment is to <a class="el" href="structlinprm.html#a7d951475b1c16f94703fba9e04ec24d2">linprm::dispre</a>.</li>
<li>2: Sequent, the assignment is to <a class="el" href="structlinprm.html#a2c21e35f61f428ed14ca2b60bccc10c8">linprm::disseq</a>.</li>
</ul>
Anything else is an error.</td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">lin</td><td>Linear transformation parameters. </td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">dis</td><td>Distortion function parameters.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ndpmax</td><td>The number of DPja or DQia keywords to allocate space for. If set to -1, the value of the global variable NDPMAX will be used. This is potentially thread-unsafe if <a class="el" href="dis_8h.html#aa5486b870327544f7423ad2751fb4120" title="Memory allocation for DPja and DQia.">disndp()</a> is being used dynamically to alter its value.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> pointer passed.</li>
<li>4: Invalid sequence. </li>
</ul>
</dd></dl>

</div>
</div>
<a id="ab8fc0ef6b34eb3327b13a00de78232b1" name="ab8fc0ef6b34eb3327b13a00de78232b1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab8fc0ef6b34eb3327b13a00de78232b1">&#9670;&#160;</a></span>lincpy()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int lincpy </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>alloc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const struct <a class="el" href="structlinprm.html">linprm</a> *&#160;</td>
          <td class="paramname"><em>linsrc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct <a class="el" href="structlinprm.html">linprm</a> *&#160;</td>
          <td class="paramname"><em>lindst</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Copy routine for the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct. </p>
<p><b>lincpy</b>() does a deep copy of one <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct to another, using <a class="el" href="lin_8h.html#afa85e4b255b144d2b806f51be0d36be2" title="Default constructor for the linprm struct.">lininit()</a> to allocate memory for its arrays if required. Only the &quot;information to be provided&quot; part of the struct is copied; a call to <a class="el" href="lin_8h.html#a5c01c0991c8d0c4437581a7c1453b09a" title="Setup routine for the linprm struct.">linset()</a> is required to initialize the remainder.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">alloc</td><td>If true, allocate memory for the crpix, pc, and cdelt arrays in the destination. Otherwise, it is assumed that pointers to these arrays have been set by the user except if they are null pointers in which case memory will be allocated for them regardless. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">linsrc</td><td>Struct to copy from.</td></tr>
    <tr><td class="paramdir">[in,out]</td><td class="paramname">lindst</td><td>Struct to copy to. <a class="el" href="structlinprm.html#a5bb0b2b2ce1f160a8a70f6437a893eea">linprm::flag</a> should be set to -1 if lindst was not previously initialized (memory leaks may result if it was previously initialized).</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> pointer passed.</li>
<li>2: Memory allocation failed.</li>
</ul>
For returns &gt; 1, a detailed error message is set in <a class="el" href="structlinprm.html#a2975830d4214bb6b35cb1ca922875057">linprm::err</a> if enabled, see <a class="el" href="wcserr_8h.html#a1691b8bd184d40ca6fda255be078fa53" title="Enable/disable error messaging.">wcserr_enable()</a>. </dd></dl>

</div>
</div>
<a id="aef9ead7c6ea6ab08f3ba3fc6a1c30303" name="aef9ead7c6ea6ab08f3ba3fc6a1c30303"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aef9ead7c6ea6ab08f3ba3fc6a1c30303">&#9670;&#160;</a></span>linfree()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int linfree </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlinprm.html">linprm</a> *&#160;</td>
          <td class="paramname"><em>lin</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Destructor for the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct. </p>
<p><b>linfree</b>() frees memory allocated for the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> arrays by <a class="el" href="lin_8h.html#afa85e4b255b144d2b806f51be0d36be2" title="Default constructor for the linprm struct.">lininit()</a> and/or <a class="el" href="lin_8h.html#a5c01c0991c8d0c4437581a7c1453b09a" title="Setup routine for the linprm struct.">linset()</a>. <a class="el" href="lin_8h.html#afa85e4b255b144d2b806f51be0d36be2" title="Default constructor for the linprm struct.">lininit()</a> keeps a record of the memory it allocates and <b>linfree</b>() will only attempt to free this.</p>
<p><b>PLEASE NOTE:</b> <b>linfree</b>() must not be invoked on a <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct that was not initialized by <a class="el" href="lin_8h.html#afa85e4b255b144d2b806f51be0d36be2" title="Default constructor for the linprm struct.">lininit()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">lin</td><td>Linear transformation parameters.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> pointer passed. </li>
</ul>
</dd></dl>

</div>
</div>
<a id="a4994e12620ea9bb1377dd16d5e31fb20" name="a4994e12620ea9bb1377dd16d5e31fb20"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4994e12620ea9bb1377dd16d5e31fb20">&#9670;&#160;</a></span>linsize()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int linsize </td>
          <td>(</td>
          <td class="paramtype">const struct <a class="el" href="structlinprm.html">linprm</a> *&#160;</td>
          <td class="paramname"><em>lin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>sizes</em>[2]&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Compute the size of a <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct. </p>
<p><b>linsize</b>() computes the full size of a <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct, including allocated memory.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">lin</td><td>Linear transformation parameters. <br  />
 If NULL, the base size of the struct and the allocated size are both set to zero.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">sizes</td><td>The first element is the base size of the struct as returned by sizeof(struct <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a>). <br  />
 The second element is the total size of memory allocated in the struct, in bytes, assuming that the allocation was done by <a class="el" href="lin_8h.html#a7ddea28768d99f01c6be1c71a4d8fe58" title="Default constructor for the linprm struct.">linini()</a>. This figure includes memory allocated for members of constituent structs, such as <a class="el" href="structlinprm.html#a7d951475b1c16f94703fba9e04ec24d2">linprm::dispre</a>. <br  />
 It is not an error for the struct not to have been set up via <a class="el" href="lin_8h.html#a5c01c0991c8d0c4437581a7c1453b09a" title="Setup routine for the linprm struct.">linset()</a>, which normally results in additional memory allocation.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success. </li>
</ul>
</dd></dl>

</div>
</div>
<a id="a946005b038f5c584691630b5d39369e3" name="a946005b038f5c584691630b5d39369e3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a946005b038f5c584691630b5d39369e3">&#9670;&#160;</a></span>linprt()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int linprt </td>
          <td>(</td>
          <td class="paramtype">const struct <a class="el" href="structlinprm.html">linprm</a> *&#160;</td>
          <td class="paramname"><em>lin</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Print routine for the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct. </p>
<p><b>linprt</b>() prints the contents of a <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct using <a class="el" href="wcsprintf_8h.html#a46950abaf5a27347da8160741f98f973" title="Print function used by WCSLIB diagnostic routines.">wcsprintf()</a>. Mainly intended for diagnostic purposes.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">lin</td><td>Linear transformation parameters.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> pointer passed. </li>
</ul>
</dd></dl>

</div>
</div>
<a id="a7bdde709fac889f1c386e9c8993d74f7" name="a7bdde709fac889f1c386e9c8993d74f7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7bdde709fac889f1c386e9c8993d74f7">&#9670;&#160;</a></span>linperr()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int linperr </td>
          <td>(</td>
          <td class="paramtype">const struct <a class="el" href="structlinprm.html">linprm</a> *&#160;</td>
          <td class="paramname"><em>lin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>prefix</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Print error messages from a <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct. </p>
<p><b>linperr</b>() prints the error message(s) (if any) stored in a <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct, and the disprm structs that it may contain. If there are no errors then nothing is printed. It uses <a class="el" href="wcserr_8h.html#a6585b9fc3a59b369e3336f3133dd1ca9" title="Print a wcserr struct.">wcserr_prt()</a>, q.v.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">lin</td><td>Coordinate transformation parameters. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">prefix</td><td>If non-NULL, each output line will be prefixed with this string.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> pointer passed. </li>
</ul>
</dd></dl>

</div>
</div>
<a id="a5c01c0991c8d0c4437581a7c1453b09a" name="a5c01c0991c8d0c4437581a7c1453b09a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5c01c0991c8d0c4437581a7c1453b09a">&#9670;&#160;</a></span>linset()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int linset </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlinprm.html">linprm</a> *&#160;</td>
          <td class="paramname"><em>lin</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Setup routine for the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct. </p>
<p><b>linset</b>(), if necessary, allocates memory for the <a class="el" href="structlinprm.html#aeaaf26fd243da58fee173b075bed1de7">linprm::piximg</a> and <a class="el" href="structlinprm.html#a28a705f744a32cd05dd3aa86ca58998b">linprm::imgpix</a> arrays and sets up the <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> struct according to information supplied within it - refer to the explanation of <a class="el" href="structlinprm.html#a5bb0b2b2ce1f160a8a70f6437a893eea">linprm::flag</a>.</p>
<p>Note that this routine need not be called directly; it will be invoked by <a class="el" href="lin_8h.html#ae4947608476c198ad27759d1e562d655" title="Pixel-to-world linear transformation.">linp2x()</a> and <a class="el" href="lin_8h.html#a5490027e9699680dfefe370c28691243" title="World-to-pixel linear transformation.">linx2p()</a> if the <a class="el" href="structlinprm.html#a5bb0b2b2ce1f160a8a70f6437a893eea">linprm::flag</a> is anything other than a predefined magic value.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">lin</td><td>Linear transformation parameters.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> pointer passed.</li>
<li>2: Memory allocation failed.</li>
<li>3: <code><b>PC</b>i<b>_</b>ja</code> matrix is singular.</li>
<li>4: Failed to initialise distortions.</li>
</ul>
For returns &gt; 1, a detailed error message is set in <a class="el" href="structlinprm.html#a2975830d4214bb6b35cb1ca922875057">linprm::err</a> if enabled, see <a class="el" href="wcserr_8h.html#a1691b8bd184d40ca6fda255be078fa53" title="Enable/disable error messaging.">wcserr_enable()</a>. </dd></dl>

</div>
</div>
<a id="ae4947608476c198ad27759d1e562d655" name="ae4947608476c198ad27759d1e562d655"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae4947608476c198ad27759d1e562d655">&#9670;&#160;</a></span>linp2x()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int linp2x </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlinprm.html">linprm</a> *&#160;</td>
          <td class="paramname"><em>lin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>ncoord</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>nelem</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>pixcrd</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>imgcrd</em>[]&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Pixel-to-world linear transformation. </p>
<p><b>linp2x</b>() transforms pixel coordinates to intermediate world coordinates.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">lin</td><td>Linear transformation parameters.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ncoord,nelem</td><td>The number of coordinates, each of vector length nelem but containing lin.naxis coordinate elements. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pixcrd</td><td>Array of pixel coordinates.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">imgcrd</td><td>Array of intermediate world coordinates.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> pointer passed.</li>
<li>2: Memory allocation failed.</li>
<li>3: <code><b>PC</b>i<b>_</b>ja</code> matrix is singular.</li>
<li>4: Failed to initialise distortions.</li>
<li>5: Distort error.</li>
</ul>
For returns &gt; 1, a detailed error message is set in <a class="el" href="structlinprm.html#a2975830d4214bb6b35cb1ca922875057">linprm::err</a> if enabled, see <a class="el" href="wcserr_8h.html#a1691b8bd184d40ca6fda255be078fa53" title="Enable/disable error messaging.">wcserr_enable()</a>.</dd></dl>
<p><b>Notes:</b> <br  />
 1. Historically, the API to <b>linp2x</b>() did not have a stat[] vector because a valid linear transformation should always succeed. However, now that it invokes <a class="el" href="dis_8h.html#a135726e4c4c5bc00e2eba865ab202201" title="Apply distortion function.">disp2x()</a> if distortions are present, it does have the potential to fail. Consequently, when distortions are present and a status return (stat[]) is required for each coordinate, then <b>linp2x</b>() should be invoked separately for each of them. </p>

</div>
</div>
<a id="a5490027e9699680dfefe370c28691243" name="a5490027e9699680dfefe370c28691243"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5490027e9699680dfefe370c28691243">&#9670;&#160;</a></span>linx2p()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int linx2p </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlinprm.html">linprm</a> *&#160;</td>
          <td class="paramname"><em>lin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>ncoord</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>nelem</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>imgcrd</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>pixcrd</em>[]&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>World-to-pixel linear transformation. </p>
<p><b>linx2p</b>() transforms intermediate world coordinates to pixel coordinates.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">lin</td><td>Linear transformation parameters.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ncoord,nelem</td><td>The number of coordinates, each of vector length nelem but containing lin.naxis coordinate elements. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">imgcrd</td><td>Array of intermediate world coordinates.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">pixcrd</td><td>Array of pixel coordinates. Status return value:<ul>
<li>0: Success.</li>
<li>1: Null <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> pointer passed.</li>
<li>2: Memory allocation failed.</li>
<li>3: <code><b>PC</b>i<b>_</b>ja</code> matrix is singular.</li>
<li>4: Failed to initialise distortions.</li>
<li>6: De-distort error.</li>
</ul>
For returns &gt; 1, a detailed error message is set in <a class="el" href="structlinprm.html#a2975830d4214bb6b35cb1ca922875057">linprm::err</a> if enabled, see <a class="el" href="wcserr_8h.html#a1691b8bd184d40ca6fda255be078fa53" title="Enable/disable error messaging.">wcserr_enable()</a>.</td></tr>
  </table>
  </dd>
</dl>
<p><b>Notes:</b> <br  />
 1. Historically, the API to <b>linx2p</b>() did not have a stat[] vector because a valid linear transformation should always succeed. However, now that it invokes <a class="el" href="dis_8h.html#ac589d5e85afe3d775cba4c06734ce653" title="Apply de-distortion function.">disx2p()</a> if distortions are present, it does have the potential to fail. Consequently, when distortions are present and a status return (stat[]) is required for each coordinate, then <b>linx2p</b>() should be invoked separately for each of them. </p>

</div>
</div>
<a id="a27a7a4a2cc3183bb1cd639efaade2265" name="a27a7a4a2cc3183bb1cd639efaade2265"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a27a7a4a2cc3183bb1cd639efaade2265">&#9670;&#160;</a></span>linwarp()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int linwarp </td>
          <td>(</td>
          <td class="paramtype">struct <a class="el" href="structlinprm.html">linprm</a> *&#160;</td>
          <td class="paramname"><em>lin</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>pixblc</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>pixtrc</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>pixsamp</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int *&#160;</td>
          <td class="paramname"><em>nsamp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>maxdis</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&#160;</td>
          <td class="paramname"><em>maxtot</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>avgdis</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&#160;</td>
          <td class="paramname"><em>avgtot</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>rmsdis</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&#160;</td>
          <td class="paramname"><em>rmstot</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Compute measures of distortion. </p>
<p><b>linwarp</b>() computes various measures of the distortion over a specified range of pixel coordinates.</p>
<p>All distortion measures are specified as an offset in pixel coordinates, as given directly by prior distortions. The offset in intermediate pixel coordinates given by sequent distortions is translated back to pixel coordinates by applying the inverse of the linear transformation matrix (<code><b>PC</b>i<b>_</b>ja</code> or <code><b>CD</b>i<b>_</b>ja</code>). The difference may be significant if the matrix introduced a scaling.</p>
<p>If all distortions are prior, then <b>linwarp</b>() uses <a class="el" href="dis_8h.html#a91fa2d34c30be042516a0246d393b116" title="Compute measures of distortion.">diswarp()</a>, q.v.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in,out]</td><td class="paramname">lin</td><td>Linear transformation parameters plus distortions.</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pixblc</td><td>Start of the range of pixel coordinates (i.e. &quot;bottom left-hand corner&quot; in the conventional FITS image display orientation). May be specified as a NULL pointer which is interpreted as (1,1,...). </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pixtrc</td><td>End of the range of pixel coordinates (i.e. &quot;top right-hand corner&quot; in the conventional FITS image display orientation). </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pixsamp</td><td>If positive or zero, the increment on the particular axis, starting at pixblc[]. Zero is interpreted as a unit increment. pixsamp may also be specified as a NULL pointer which is interpreted as all zeroes, i.e. unit increments on all axes. <br  />
 If negative, the grid size on the particular axis (the absolute value being rounded to the nearest integer). For example, if pixsamp is (-128.0,-128.0,...) then each axis will be sampled at 128 points between pixblc[] and pixtrc[] inclusive. Use caution when using this option on non-square images.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">nsamp</td><td>The number of pixel coordinates sampled. <br  />
 Can be specified as a NULL pointer if not required. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">maxdis</td><td>For each individual distortion function, the maximum absolute value of the distortion. <br  />
 Can be specified as a NULL pointer if not required. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">maxtot</td><td>For the combination of all distortion functions, the maximum absolute value of the distortion. <br  />
 Can be specified as a NULL pointer if not required. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">avgdis</td><td>For each individual distortion function, the mean value of the distortion. <br  />
 Can be specified as a NULL pointer if not required. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">avgtot</td><td>For the combination of all distortion functions, the mean value of the distortion. <br  />
 Can be specified as a NULL pointer if not required. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">rmsdis</td><td>For each individual distortion function, the root mean square deviation of the distortion. <br  />
 Can be specified as a NULL pointer if not required. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">rmstot</td><td>For the combination of all distortion functions, the root mean square deviation of the distortion. <br  />
 Can be specified as a NULL pointer if not required.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>1: Null <a class="el" href="structlinprm.html" title="Linear transformation parameters.">linprm</a> pointer passed.</li>
<li>2: Memory allocation failed.</li>
<li>3: Invalid parameter.</li>
<li>4: Distort error. </li>
</ul>
</dd></dl>

</div>
</div>
<a id="acc7d26efba3ca08d36047253a9315dcc" name="acc7d26efba3ca08d36047253a9315dcc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acc7d26efba3ca08d36047253a9315dcc">&#9670;&#160;</a></span>matinv()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">matinv </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>n</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double&#160;</td>
          <td class="paramname"><em>mat</em>[], </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>inv</em>[]&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Matrix inversion. </p>
<p><b>matinv</b>() performs matrix inversion using LU-triangular factorization with scaled partial pivoting.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">n</td><td>Order of the matrix ( <picture><source srcset="form_14_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$n \times n$" src="form_14.png" width="31" height="8"/></picture>).</td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">mat</td><td>Matrix to be inverted, stored as mat[ <picture><source srcset="form_15_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i n + j$" src="form_15.png" width="34" height="11"/></picture>] where <picture><source srcset="form_16_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$i$" src="form_16.png" width="5" height="9"/></picture> and <picture><source srcset="form_17_dark.png" media="(prefers-color-scheme: dark)"/><img class="formulaInl" alt="$j$" src="form_17.png" width="6" height="11"/></picture> are the row and column indices respectively.</td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">inv</td><td>Inverse of mat with the same storage convention.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Status return value:<ul>
<li>0: Success.</li>
<li>2: Memory allocation failed.</li>
<li>3: Singular matrix. </li>
</ul>
</dd></dl>

</div>
</div>
<h2 class="groupheader">Variable Documentation</h2>
<a id="a7bdf034bd750df1e518db9feeebf7a79" name="a7bdf034bd750df1e518db9feeebf7a79"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7bdf034bd750df1e518db9feeebf7a79">&#9670;&#160;</a></span>lin_errmsg</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">const char * lin_errmsg[]</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">extern</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Status return messages. </p>
<p>Error messages to match the status value returned from each function. </p>

</div>
</div>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Wed Nov 29 2023 19:09:57 for WCSLIB by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>