aboutsummaryrefslogtreecommitdiff
path: root/noao/imred/quadred/src/quad/quadgeomred.x
diff options
context:
space:
mode:
Diffstat (limited to 'noao/imred/quadred/src/quad/quadgeomred.x')
-rw-r--r--noao/imred/quadred/src/quad/quadgeomred.x165
1 files changed, 165 insertions, 0 deletions
diff --git a/noao/imred/quadred/src/quad/quadgeomred.x b/noao/imred/quadred/src/quad/quadgeomred.x
new file mode 100644
index 00000000..ff5d043c
--- /dev/null
+++ b/noao/imred/quadred/src/quad/quadgeomred.x
@@ -0,0 +1,165 @@
+include <imhdr.h>
+include "quadgeom.h"
+
+# QUADGEOMRED -- Set up section information in quadgeom structure based on
+# information in the image header for a reduced image. The sections given in the
+# image header are "whole image" sections (i.e. those that would be appropriate
+# for single readout. From these we must calculate the sections to apply to
+# the data read through each readout.
+
+procedure quadgeomred (im, qg)
+
+pointer im #I Pointer to input image.
+pointer qg #IO Pointer to open quadgeom structure.
+
+char section[SZ_LINE], keyword[SZ_LINE], nampsyx[SZ_LINE]
+int nx, ny, x, y, amp, pre
+int dx1, dx2, dxs, dy1, dy2, dys
+int cx1, cx2, cxs, cy1, cy2, cys
+int ax1, ax2, axs, ay1, ay2, ays
+
+begin
+
+ # Get input image dimensions.
+ nx = IM_LEN(im, 1)
+ ny = IM_LEN(im, 2)
+ QG_NX (qg, 0) = nx
+ QG_NY (qg, 0) = ny
+
+ # Get number of active amplifiers in Y and X.
+ call hdmgstr (im, "nampsyx", nampsyx, SZ_LINE)
+ call sscan (nampsyx)
+ call gargi (QG_NAMPSY(qg))
+ call gargi (QG_NAMPSX(qg))
+
+ QG_NAMPS(qg) = QG_NAMPSY(qg) * QG_NAMPSX(qg)
+ if (QG_NAMPS(qg) > QG_MAXAMPS)
+ call error (0, "CCD has two many read-outs for this program")
+
+ # Get list of active amplifiers.
+ # Presently the header doesn't contain this information so we fake it
+ # since we know all the posibilities.
+ do amp = 1, QG_NAMPS(qg)
+ call malloc (QG_AMPID(qg, amp), SZ_AMPID, TY_CHAR)
+
+ switch (QG_NAMPSX(qg)) {
+ case 1:
+ switch (QG_NAMPSY(qg)) {
+ case 1: # Mono
+ QG_AMPTYPE (qg, 1) = AMP11
+ call strcpy ("11", Memc[QG_AMPID(qg, 1)], SZ_AMPID)
+
+ case 2: # Split parallels
+ call error (0, "Unsuported read-out configuration")
+ }
+
+ case 2:
+
+ switch (QG_NAMPSY(qg)) {
+ case 1: # Split serials
+ QG_AMPTYPE (qg, 1) = AMP11
+ call strcpy ("11", Memc[QG_AMPID(qg, 1)], SZ_AMPID)
+ QG_AMPTYPE (qg, 2) = AMP12
+ call strcpy ("12", Memc[QG_AMPID(qg, 2)], SZ_AMPID)
+
+ case 2: # Quad
+ QG_AMPTYPE (qg, 1) = AMP11
+ call strcpy ("11", Memc[QG_AMPID(qg, 1)], SZ_AMPID)
+ QG_AMPTYPE (qg, 2) = AMP12
+ call strcpy ("12", Memc[QG_AMPID(qg, 2)], SZ_AMPID)
+ QG_AMPTYPE (qg, 3) = AMP21
+ call strcpy ("21", Memc[QG_AMPID(qg, 3)], SZ_AMPID)
+ QG_AMPTYPE (qg, 4) = AMP22
+ call strcpy ("22", Memc[QG_AMPID(qg, 4)], SZ_AMPID)
+ }
+ }
+
+
+ # Get datasec.
+ call hdmgstr (im, "datasec", section, SZ_LINE)
+ dx1 = 1
+ dx2 = nx
+ dxs = 1
+ dy1 = 1
+ dy2 = ny
+ dys = 1
+ call ccd_section (section, dx1, dx2, dxs, dy1, dy2, dys)
+ QG_DX1(qg, 0) = dx1
+ QG_DX2(qg, 0) = dx2
+ QG_DY1(qg, 0) = dy1
+ QG_DY2(qg, 0) = dy2
+
+ # Get ccdsec.
+ call hdmgstr (im, "ccdsec", section, SZ_LINE)
+ cx1 = dx1
+ cx2 = dx2
+ cxs = 1
+ cy1 = dy1
+ cy2 = dy2
+ cys = 1
+ call ccd_section (section, cx1, cx2, cxs, cy1, cy2, cys)
+ QG_CX1(qg, 0) = cx1
+ QG_CX2(qg, 0) = cx2
+ QG_CY1(qg, 0) = cy1
+ QG_CY2(qg, 0) = cy2
+
+
+ do amp = 1, QG_NAMPS (qg) {
+
+ # Get AMPSECmn for each readout
+ call sprintf (keyword, SZ_LINE, "AMPSEC%s")
+ call pargstr (Memc[QG_AMPID(qg, amp)])
+ call hdmgstr (im, keyword, section, SZ_LINE)
+ ax1 = 1
+ ax2 = nx
+ axs = 1
+ ay1 = 1
+ ay2 = ny
+ ays = 1
+ call ccd_section (section, ax1, ax2, axs, ay1, ay2, ays)
+ QG_AX1(qg, amp) = ax1
+ QG_AX2(qg, amp) = ax2
+ QG_AY1(qg, amp) = ay1
+ QG_AY2(qg, amp) = ay2
+
+
+ # Set X and Y dimensions of subimage read out by each amplifier
+ QG_NX(qg, amp) = ax2 - ax1 + 1
+ QG_NY(qg, amp) = ay2 - ay1 + 1
+
+ # Set datsec and trimsec for each sub image
+ QG_DX1(qg, amp) = 1
+ QG_DX2(qg, amp) = QG_NX(qg, amp)
+ QG_DY1(qg, amp) = 1
+ QG_DY2(qg, amp) = QG_NY(qg, amp)
+
+ QG_TX1(qg, amp) = 1
+ QG_TX2(qg, amp) = QG_NX(qg, amp)
+ QG_TY1(qg, amp) = 1
+ QG_TY2(qg, amp) = QG_NY(qg, amp)
+ }
+
+ # Determine ccdsec for each each sub-image.
+ do y = 1, QG_NAMPSY(qg) {
+ amp = QG_AMP (qg, 1, y)
+ QG_CX1(qg, amp) = QG_CX1(qg, 0)
+ QG_CX2(qg, amp) = QG_CX1(qg, amp) + QG_NX(qg, amp) - 1
+ do x = 2, QG_NAMPSX(qg) {
+ amp = QG_AMP (qg, x, y)
+ pre = QG_AMP (qg, x-1, y)
+ QG_CX1(qg, amp) = QG_CX2(qg, pre) + 1
+ QG_CX2(qg, amp) = QG_CX1(qg, amp) + QG_NX(qg, amp) - 1
+ }
+ }
+ do x = 1, QG_NAMPSX(qg) {
+ amp = QG_AMP (qg, x, 1)
+ QG_CY1(qg, amp) = QG_CY1(qg, 0)
+ QG_CY2(qg, amp) = QG_CY1(qg, amp) + QG_NY(qg, amp) - 1
+ do y = 2, QG_NAMPSY(qg) {
+ amp = QG_AMP (qg, x, y)
+ pre = QG_AMP (qg, x, y-1)
+ QG_CY1(qg, amp) = QG_CY2(qg, pre) + 1
+ QG_CY2(qg, amp) = QG_CY1(qg, amp) + QG_NY(qg, amp) - 1
+ }
+ }
+end