Add scat. Temporary fix to rc r.e. note groups.
This commit is contained in:
parent
3f8c70e97c
commit
8a3b2ceb0f
22 changed files with 5997 additions and 2 deletions
247
src/cmd/scat/posn.c
Normal file
247
src/cmd/scat/posn.c
Normal file
|
|
@ -0,0 +1,247 @@
|
|||
#include <u.h>
|
||||
#include <libc.h>
|
||||
#include <bio.h>
|
||||
#include "sky.h"
|
||||
|
||||
void
|
||||
amdinv(Header *h, Angle ra, Angle dec, float mag, float col)
|
||||
{
|
||||
int i, max_iterations;
|
||||
float tolerance;
|
||||
float object_x, object_y, delta_x, delta_y, f, fx, fy, g, gx, gy;
|
||||
float x1, x2, x3, x4;
|
||||
float y1, y2, y3, y4;
|
||||
|
||||
/*
|
||||
* Initialize
|
||||
*/
|
||||
max_iterations = 50;
|
||||
tolerance = 0.0000005;
|
||||
|
||||
/*
|
||||
* Convert RA and Dec to St.coords
|
||||
*/
|
||||
traneqstd(h, ra, dec);
|
||||
|
||||
/*
|
||||
* Set initial value for x,y
|
||||
*/
|
||||
object_x = h->xi/h->param[Ppltscale];
|
||||
object_y = h->eta/h->param[Ppltscale];
|
||||
|
||||
/*
|
||||
* Iterate by Newtons method
|
||||
*/
|
||||
for(i = 0; i < max_iterations; i++) {
|
||||
/*
|
||||
* X plate model
|
||||
*/
|
||||
x1 = object_x;
|
||||
x2 = x1 * object_x;
|
||||
x3 = x1 * object_x;
|
||||
x4 = x1 * object_x;
|
||||
|
||||
y1 = object_y;
|
||||
y2 = y1 * object_y;
|
||||
y3 = y1 * object_y;
|
||||
y4 = y1 * object_y;
|
||||
|
||||
f =
|
||||
h->param[Pamdx1] * x1 +
|
||||
h->param[Pamdx2] * y1 +
|
||||
h->param[Pamdx3] +
|
||||
h->param[Pamdx4] * x2 +
|
||||
h->param[Pamdx5] * x1*y1 +
|
||||
h->param[Pamdx6] * y2 +
|
||||
h->param[Pamdx7] * (x2+y2) +
|
||||
h->param[Pamdx8] * x2*x1 +
|
||||
h->param[Pamdx9] * x2*y1 +
|
||||
h->param[Pamdx10] * x1*y2 +
|
||||
h->param[Pamdx11] * y3 +
|
||||
h->param[Pamdx12] * x1* (x2+y2) +
|
||||
h->param[Pamdx13] * x1 * (x2+y2) * (x2+y2) +
|
||||
h->param[Pamdx14] * mag +
|
||||
h->param[Pamdx15] * mag*mag +
|
||||
h->param[Pamdx16] * mag*mag*mag +
|
||||
h->param[Pamdx17] * mag*x1 +
|
||||
h->param[Pamdx18] * mag * (x2+y2) +
|
||||
h->param[Pamdx19] * mag*x1 * (x2+y2) +
|
||||
h->param[Pamdx20] * col;
|
||||
|
||||
/*
|
||||
* Derivative of X model wrt x
|
||||
*/
|
||||
fx =
|
||||
h->param[Pamdx1] +
|
||||
h->param[Pamdx4] * 2*x1 +
|
||||
h->param[Pamdx5] * y1 +
|
||||
h->param[Pamdx7] * 2*x1 +
|
||||
h->param[Pamdx8] * 3*x2 +
|
||||
h->param[Pamdx9] * 2*x1*y1 +
|
||||
h->param[Pamdx10] * y2 +
|
||||
h->param[Pamdx12] * (3*x2+y2) +
|
||||
h->param[Pamdx13] * (5*x4 + 6*x2*y2 + y4) +
|
||||
h->param[Pamdx17] * mag +
|
||||
h->param[Pamdx18] * mag*2*x1 +
|
||||
h->param[Pamdx19] * mag*(3*x2+y2);
|
||||
|
||||
/*
|
||||
* Derivative of X model wrt y
|
||||
*/
|
||||
fy =
|
||||
h->param[Pamdx2] +
|
||||
h->param[Pamdx5] * x1 +
|
||||
h->param[Pamdx6] * 2*y1 +
|
||||
h->param[Pamdx7] * 2*y1 +
|
||||
h->param[Pamdx9] * x2 +
|
||||
h->param[Pamdx10] * x1*2*y1 +
|
||||
h->param[Pamdx11] * 3*y2 +
|
||||
h->param[Pamdx12] * 2*x1*y1 +
|
||||
h->param[Pamdx13] * 4*x1*y1* (x2+y2) +
|
||||
h->param[Pamdx18] * mag*2*y1 +
|
||||
h->param[Pamdx19] * mag*2*x1*y1;
|
||||
/*
|
||||
* Y plate model
|
||||
*/
|
||||
g =
|
||||
h->param[Pamdy1] * y1 +
|
||||
h->param[Pamdy2] * x1 +
|
||||
h->param[Pamdy3] +
|
||||
h->param[Pamdy4] * y2 +
|
||||
h->param[Pamdy5] * y1*x1 +
|
||||
h->param[Pamdy6] * x2 +
|
||||
h->param[Pamdy7] * (x2+y2) +
|
||||
h->param[Pamdy8] * y3 +
|
||||
h->param[Pamdy9] * y2*x1 +
|
||||
h->param[Pamdy10] * y1*x3 +
|
||||
h->param[Pamdy11] * x3 +
|
||||
h->param[Pamdy12] * y1 * (x2+y2) +
|
||||
h->param[Pamdy13] * y1 * (x2+y2) * (x2+y2) +
|
||||
h->param[Pamdy14] * mag +
|
||||
h->param[Pamdy15] * mag*mag +
|
||||
h->param[Pamdy16] * mag*mag*mag +
|
||||
h->param[Pamdy17] * mag*y1 +
|
||||
h->param[Pamdy18] * mag * (x2+y2) +
|
||||
h->param[Pamdy19] * mag*y1 * (x2+y2) +
|
||||
h->param[Pamdy20] * col;
|
||||
|
||||
/*
|
||||
* Derivative of Y model wrt x
|
||||
*/
|
||||
gx =
|
||||
h->param[Pamdy2] +
|
||||
h->param[Pamdy5] * y1 +
|
||||
h->param[Pamdy6] * 2*x1 +
|
||||
h->param[Pamdy7] * 2*x1 +
|
||||
h->param[Pamdy9] * y2 +
|
||||
h->param[Pamdy10] * y1*2*x1 +
|
||||
h->param[Pamdy11] * 3*x2 +
|
||||
h->param[Pamdy12] * 2*x1*y1 +
|
||||
h->param[Pamdy13] * 4*x1*y1 * (x2+y2) +
|
||||
h->param[Pamdy18] * mag*2*x1 +
|
||||
h->param[Pamdy19] * mag*y1*2*x1;
|
||||
|
||||
/*
|
||||
* Derivative of Y model wrt y
|
||||
*/
|
||||
gy =
|
||||
h->param[Pamdy1] +
|
||||
h->param[Pamdy4] * 2*y1 +
|
||||
h->param[Pamdy5] * x1 +
|
||||
h->param[Pamdy7] * 2*y1 +
|
||||
h->param[Pamdy8] * 3*y2 +
|
||||
h->param[Pamdy9] * 2*y1*x1 +
|
||||
h->param[Pamdy10] * x2 +
|
||||
h->param[Pamdy12] * 3*y2 +
|
||||
h->param[Pamdy13] * (5*y4 + 6*x2*y2 + x4) +
|
||||
h->param[Pamdy17] * mag +
|
||||
h->param[Pamdy18] * mag*2*y1 +
|
||||
h->param[Pamdy19] * mag*(x2 + 3*y2);
|
||||
|
||||
f = f - h->xi;
|
||||
g = g - h->eta;
|
||||
delta_x = (-f*gy+g*fy) / (fx*gy-fy*gx);
|
||||
delta_y = (-g*fx+f*gx) / (fx*gy-fy*gx);
|
||||
object_x = object_x + delta_x;
|
||||
object_y = object_y + delta_y;
|
||||
if((fabs(delta_x) < tolerance) && (fabs(delta_y) < tolerance))
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert mm from plate center to pixels
|
||||
*/
|
||||
h->x = (h->param[Pppo3]-object_x*1000.0)/h->param[Pxpixelsz];
|
||||
h->y = (h->param[Pppo6]+object_y*1000.0)/h->param[Pypixelsz];
|
||||
}
|
||||
|
||||
void
|
||||
ppoinv(Header *h, Angle ra, Angle dec)
|
||||
{
|
||||
|
||||
/*
|
||||
* Convert RA and Dec to standard coords.
|
||||
*/
|
||||
traneqstd(h, ra, dec);
|
||||
|
||||
/*
|
||||
* Convert st.coords from arcsec to radians
|
||||
*/
|
||||
h->xi /= ARCSECONDS_PER_RADIAN;
|
||||
h->eta /= ARCSECONDS_PER_RADIAN;
|
||||
|
||||
/*
|
||||
* Compute PDS coordinates from solution
|
||||
*/
|
||||
h->x =
|
||||
h->param[Pppo1]*h->xi +
|
||||
h->param[Pppo2]*h->eta +
|
||||
h->param[Pppo3];
|
||||
h->y =
|
||||
h->param[Pppo4]*h->xi +
|
||||
h->param[Pppo5]*h->eta +
|
||||
h->param[Pppo6];
|
||||
/*
|
||||
* Convert x,y from microns to pixels
|
||||
*/
|
||||
h->x /= h->param[Pxpixelsz];
|
||||
h->y /= h->param[Pypixelsz];
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
traneqstd(Header *h, Angle object_ra, Angle object_dec)
|
||||
{
|
||||
float div;
|
||||
|
||||
/*
|
||||
* Find divisor
|
||||
*/
|
||||
div =
|
||||
(sin(object_dec)*sin(h->param[Ppltdec]) +
|
||||
cos(object_dec)*cos(h->param[Ppltdec]) *
|
||||
cos(object_ra - h->param[Ppltra]));
|
||||
|
||||
/*
|
||||
* Compute standard coords and convert to arcsec
|
||||
*/
|
||||
h->xi = cos(object_dec) *
|
||||
sin(object_ra - h->param[Ppltra]) *
|
||||
ARCSECONDS_PER_RADIAN/div;
|
||||
|
||||
h->eta = (sin(object_dec)*cos(h->param[Ppltdec])-
|
||||
cos(object_dec)*sin(h->param[Ppltdec])*
|
||||
cos(object_ra - h->param[Ppltra]))*
|
||||
ARCSECONDS_PER_RADIAN/div;
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
xypos(Header *h, Angle ra, Angle dec, float mag, float col)
|
||||
{
|
||||
if (h->amdflag) {
|
||||
amdinv(h, ra, dec, mag, col);
|
||||
} else {
|
||||
ppoinv(h, ra, dec);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue