This is a flow chart for dsimulator.
Some notes about it.
The input/output in light blue is in the sky plane. The input/output in green is the mask plane.
Iraf procedures are in CAPITAL letters.
The only use of actual distorsions is in LEN_SLITS. This procedure, which is triggered if ADJ_SLIT = YES, only affects the slit edges.
# Open X-Projection mapping fdx = open (XPROJ_MAP, READ_ONLY, TEXT_FILE) call gs_ingest (fdx, asfx, asfy) ...... # We will need to recalculate something ... xlow = X2(sdat,ndx1) + SLIT_GAP(indat) xupp = X1(sdat,ndx2) - SLIT_GAP(indat) xcen = 0.5 * (xlow + xupp) yas = Y2(sdat,ndx1) dxlow = gseval (asfx, xcen, yas) yas = Y1(sdat,ndx2) dxupp = gseval (asfx, xcen, yas) dxavg = 0.5 * (dxupp + dxlow) dxlow = dxlow - dxavg dxupp = dxupp - dxavg call eprintf ("%6.3f %6.3f\n") call pargr (dxlow) call pargr (dxupp) if (pc1 == CODE_AS) { del1 = 0. del2 = X1(sdat,ndx2) - xlow - (dxupp - dxlow) } else if (pc2 == CODE_AS) { del1 = xupp - X2(sdat,ndx1) + (dxlow - dxupp) del2 = 0. } else { del1 = xcen - 0.5*SLIT_GAP(indat) - X2(sdat,ndx1) + dxlow del2 = X1(sdat,ndx2) - (xcen + 0.5*SLIT_GAP(indat)) - dxupp } X2(sdat,ndx1) = X2(sdat,ndx1) + del1 if (del1 != 0. && RELPA(sdat,ndx1) != INDEF) { tana = tan (RELPA(sdat,ndx1)) Y2(sdat,ndx1) = Y2(sdat,ndx1) + del1 * FLIP * tana } X1(sdat,ndx2) = X1(sdat,ndx2) - del2 if (del2 != 0. && RELPA(sdat,ndx2) != INDEF) { tana = tan (RELPA(sdat,ndx2)) Y1(sdat,ndx2) = Y1(sdat,ndx2) - del2 * FLIP * tana }
The other distorsion (based on an optical model of Keck) is done at GNOM_TO_DPROJ procedure.
# # GNOM_TO_DPROJ: adjust gnomonic coords to curved surface, take projection # onto plane, and apply distortion correction, resulting in distortion- # adjusted projected coords ready for a vertical projection to slitmask. # Double inputs, outputs; outputs may be the same arguments as inputs. # ##### ## NB: We assume Sutin's ray trace is already producing radii to curved surface. #### procedure gnom_to_dproj (xg, yg, xd, yd) double xg, yg # x,y gnomonic projection double xd, yd # returned x,y projected on plane (distorted) double rho # radius of input angle (approx from h) double cosa, sina # cos, sin of azimuth in image plane begin rho= sqrt (xg * xg + yg * yg) cosa = yg / rho sina = xg / rho # Apply map gnomonic projection --> real telescope rho = rho * (1. + DIST_C0 + DIST_C2 * rho * rho) xd = rho * sina yd = rho * cosa end
In this procedure, DIST_C0 = 0.0e-4 and DIST_C2 = -1.111311e-8