aboutsummaryrefslogtreecommitdiff
path: root/noao/imred/quadred/src/quad/quadmerge.x
blob: ec75d2869062b5415961c0bef7e7159b1cf76fca (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
include <imhdr.h>
include "quadgeom.h"

procedure quadmerge (qg)

pointer	qg		#I Pointer to quadgeom structure.

int	nx, ny, xdata, ydata, txskip1, txskip2, tyskip1, tyskip2
int	bxskip1, bxskip2, byskip1, byskip2
int	x, y, amp, pre, namps, nampsx, nampsy

begin
	namps  = QG_NAMPS(qg)
	nampsx = QG_NAMPSX(qg)
	nampsy = QG_NAMPSY(qg)

	# Check consistancy of number of active readouts.
	if (namps == 0)
	    call error (0, "No input images")
	if (namps != nampsx * nampsy)
	    call error (0, "Incomplete or inconsistant set of sub-images")

	# Determine dimensions of the composite image.
	# We just sum the dimensions of the first row and column of sub-images
	# We should realy check that the sub-images do form a regular grid.
	nx = 0
	do x = 1, nampsx {
	    nx = nx + QG_NX(qg, QG_AMP(qg, x, 1))
	}
	ny = 0
	do y = 1, nampsy {
	    ny = ny + QG_NY(qg, QG_AMP(qg, 1, y))
	}
	QG_NX(qg, 0) = nx 
	QG_NY(qg, 0) = ny 

	# Calculate datasec, trimsec, and biassec, ccdsec for composite image.
	# The required sections are those for the equivalent mono-readout image.
	# If datasec is uninitialised assume all these sections are absent as 
	# will be the case for processed [OT] images.
	if (QG_DX1 (qg, 1) != 0) {
	    # Calculate number of data pixels.
	    xdata = 0
	    do x = 1, nampsx {
		amp   = QG_AMP(qg, x, 1)
		xdata = xdata + QG_DX2(qg, amp) - QG_DX1(qg, amp) + 1
	    }
	    ydata = 0
	    do y = 1, nampsy {
		amp   = QG_AMP(qg, 1, y)
		ydata = ydata + QG_DY2(qg, amp) - QG_DY1(qg, amp) + 1
	    }
	    txskip1 = QG_TX1(qg, 1)     - QG_DX1(qg, 1)
	    txskip2 = QG_DX2(qg, namps) - QG_TX2(qg, namps)
	    tyskip1 = QG_TY1(qg, 1)     - QG_DY1(qg, 1)
	    tyskip2 = QG_DY2(qg, namps) - QG_TY2(qg, namps)

	    # Calculate width of bias strip margins.
	    switch (QG_AMPTYPE(qg, 1)) {
	    case AMP11, AMP21:		# "Left amp"
		bxskip1 = QG_BX1(qg, 1) - QG_DX2(qg, 1) - 1
		bxskip2 = QG_NX(qg, 1)  - QG_BX2(qg, 1)

	    case AMP12, AMP22:		# "Right amp"
		bxskip1 = QG_DX1(qg, 1) - QG_BX2(qg, 1) - 1
		bxskip2 = QG_BX1(qg, 1) - 1
	    }

	    byskip1 = QG_BY1(qg, 1)    - 1
	    byskip2 = QG_NY(qg, namps) - QG_BY2(qg, namps)

	    QG_DX1(qg, 0) = QG_DX1(qg, 1)
	    QG_DX2(qg, 0) = QG_DX1(qg, 0) + xdata - 1
	    QG_DY1(qg, 0) = QG_DY1(qg, 1)
	    QG_DY2(qg, 0) = QG_DY1(qg, 0) + ydata - 1

	    QG_TX1(qg, 0) = QG_DX1(qg, 0) + txskip1
	    QG_TX2(qg, 0) = QG_DX2(qg, 0) - txskip2
	    QG_TY1(qg, 0) = QG_DY1(qg, 0) + tyskip1
	    QG_TY2(qg, 0) = QG_DY2(qg, 0) - tyskip2

	    QG_BX1(qg, 0) = QG_DX2(qg, 0) + bxskip1 + 1
	    QG_BX2(qg, 0) = nx - bxskip2
	    QG_BY1(qg, 0) = 1  + byskip1
	    QG_BY2(qg, 0) = ny - byskip2
	}

	# Calculate ccdsec for composite image using sub-images in BLH and TRH
	# corners.
	if (QG_CX1 (qg, 1) != 0) {
	    QG_CX1(qg, 0) = QG_CX1(qg, 1)
	    QG_CX2(qg, 0) = QG_CX2(qg, nampsx)
	    QG_CY1(qg, 0) = QG_CY1(qg, 1)
	    QG_CY2(qg, 0) = QG_CY2(qg, namps)
	}

	# Set up "ampsec" - the section of the composite image derived from
	# each sub-image.
	do y = 1, nampsy {
	    amp = QG_AMP (qg, 1, y)
	    QG_AX1(qg, amp) = 1
	    QG_AX2(qg, amp) = QG_NX(qg, amp)
	    do x = 2, nampsx {
		amp = QG_AMP (qg, x,   y)
		pre = QG_AMP (qg, x-1, y)
		QG_AX1(qg, amp) = QG_AX2(qg, pre) + 1
		QG_AX2(qg, amp) = QG_AX1(qg, amp) + QG_NX(qg, amp) - 1
	    }
	}
	do x = 1, nampsx {
	    amp = QG_AMP (qg, x, 1)
	    QG_AY1(qg, amp) = 1
	    QG_AY2(qg, amp) = QG_NY(qg, amp)
	    do y = 2, nampsy {
		amp = QG_AMP (qg, x, y)
		pre = QG_AMP (qg, x, y-1)
		QG_AY1(qg, amp) = QG_AY2(qg, pre) + 1
		QG_AY2(qg, amp) = QG_AY1(qg, amp) + QG_NY(qg, amp) - 1
	    }
	}

end