diff options
Diffstat (limited to 'funtools/fitsy/headwcs.c')
-rw-r--r-- | funtools/fitsy/headwcs.c | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/funtools/fitsy/headwcs.c b/funtools/fitsy/headwcs.c new file mode 100644 index 0000000..8c41c95 --- /dev/null +++ b/funtools/fitsy/headwcs.c @@ -0,0 +1,91 @@ +/* headwcs.c + */ + +#include <xos.h> +#include "fitsy.h" + +int ft_trxlcs(lcs, x0, y0, x1, y1, direction) + FITSLinWCS lcs; + double x0; + double y0; + double *x1; + double *y1; + int direction; +{ + if ( !lcs->has_wcs ) { + *x1 = x0; + *y1 = y0; + return 0; + } + + if ( direction ) { + *x1 = x0 * lcs->fwd[0][0] + y0 * lcs->fwd[1][0] + lcs->fwd[2][0]; + *y1 = x0 * lcs->fwd[0][1] + y0 * lcs->fwd[1][1] + lcs->fwd[2][1]; + } else { + *x1 = x0 * lcs->rev[0][0] + y0 * lcs->rev[1][0] + lcs->rev[2][0]; + *y1 = x0 * lcs->rev[0][1] + y0 * lcs->rev[1][1] + lcs->rev[2][1]; + } + + return 1; +} + +int ft_trxsiz(lcs, x0, y0, x1, y1, direction) + FITSLinWCS lcs; + double x0; + double y0; + double *x1; + double *y1; + int direction; +{ + if ( !lcs->has_wcs ) { + *x1 = x0; + *y1 = y0; + return 0; + } + + if ( direction ) { + *x1 = x0 * lcs->fwd[0][0]; + *y1 = y0 * lcs->fwd[1][1]; + } else { + *x1 = x0 * lcs->rev[0][0]; + *y1 = y0 * lcs->rev[1][1]; + } + + return 1; +} + +void ft_loglcs(fits, m11, m12, m21, m22, v1, v2) + FITSHead fits; + double m11, m12, m21, m22; + double v1, v2; +{ + if ( m11 != 1.0 ) ft_headsetr(fits, "LTM1_1", 0, m11, 7, NULL, 1); + if ( m12 != 0.0 ) ft_headsetr(fits, "LTM1_2", 0, m12, 7, NULL, 1); + if ( m21 != 0.0 ) ft_headsetr(fits, "LTM2_1", 0, m21, 7, NULL, 1); + if ( m22 != 1.0 ) ft_headsetr(fits, "LTM2_2", 0, m22, 7, NULL, 1); + if ( v1 != 0.0 ) ft_headsetr(fits, "LTV1" , 0, v1, 7, NULL, 1); + if ( v2 != 0.0 ) ft_headsetr(fits, "LTV2" , 0, v2, 7, NULL, 1); +} + +void ft_wcslcs(fits, m11, m12, m21, m22, crv1, crv2, crp1, crp2, cun1, cun2) + FITSHead fits; + double m11, m12, m21, m22; + double crv1, crv2, crp1, crp2; + char *cun1, *cun2; +{ + ft_headsets(fits, "CTYPE1" , 0, "LINEAR", NULL, 1); + ft_headsets(fits, "CTYPE2" , 0, "LINEAR", NULL, 1); + + if ( crv1 != 0.0 ) ft_headsetr(fits, "CRVAL1" , 0, crv1, 7, NULL, 1); + if ( crp1 != 0.0 ) ft_headsetr(fits, "CRPIX1" , 0, crp1, 7, NULL, 1); + if ( cun1 != NULL) ft_headsets(fits, "CUNIT1" , 0, cun1, NULL, 1); + + if ( crv2 != 0.0 ) ft_headsetr(fits, "CRVAL2" , 0, crv2, 7, NULL, 1); + if ( crp2 != 0.0 ) ft_headsetr(fits, "CRPIX2" , 0, crp2, 7, NULL, 1); + if ( cun2 != NULL) ft_headsets(fits, "CUNIT2" , 0, cun2, NULL, 1); + + if ( m11 != 1.0 ) ft_headsetr(fits, "CD1_1", 0, m11, 7, NULL, 1); + if ( m12 != 0.0 ) ft_headsetr(fits, "CD1_2", 0, m12, 7, NULL, 1); + if ( m21 != 0.0 ) ft_headsetr(fits, "CD2_1", 0, m21, 7, NULL, 1); + if ( m22 != 1.0 ) ft_headsetr(fits, "CD2_2", 0, m22, 7, NULL, 1); +} |