1
C @(#)averow.for 19.1 (ESO-DMD) 02/25/03 14:01:40
2
C===========================================================================
3
C Copyright (C) 1995 European Southern Observatory (ESO)
5
C This program is free software; you can redistribute it and/or
6
C modify it under the terms of the GNU General Public License as
7
C published by the Free Software Foundation; either version 2 of
8
C the License, or (at your option) any later version.
10
C This program is distributed in the hope that it will be useful,
11
C but WITHOUT ANY WARRANTY; without even the implied warranty of
12
C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
C GNU General Public License for more details.
15
C You should have received a copy of the GNU General Public
16
C License along with this program; if not, write to the Free
17
C Software Foundation, Inc., 675 Massachusetts Ave, Cambridge,
20
C Correspondence concerning ESO-MIDAS should be addressed as follows:
21
C Internet e-mail: midas@eso.org
22
C Postal address: European Southern Observatory
23
C Data Management Division
24
C Karl-Schwarzschild-Strasse 2
25
C D 85748 Garching bei Muenchen
27
C===========================================================================
30
C --------------------------------------------------------------------
32
C.COPYRIGHT: Copyright (c) 1987 European Southern Observatory,
35
C.VERSION: 1.0 ESO-FORTRAN Conversion, AA 13:37 - 5 JAN 1988
37
C.LANGUAGE: F77+ESOext
40
C 900202 KB take care of options in lower case
52
C produce a 1d image from a 2d by averaging over rows or columns
55
C AVERAGE/ROW output = input start,end [SUM]
56
C AVERAGE/COLUMN output = input start,end [SUM]
64
C KEYWORDS out_a, in_a, p4, p5, action
68
C ------------------------------------------------------------------
75
INTEGER I,IFIRST,INUM,SUBLO(3)
76
INTEGER NAXISA,NAXISB,NN,IMNOA,IMNOB
77
INTEGER NPIXA(2),NPIXB(2),STATUS
80
REAL IAV,LHCUTS(4),FACT
82
DOUBLE PRECISION STEPA(2),STEPB(2)
83
DOUBLE PRECISION STARTA(2),STARTB(2)
85
CHARACTER*80 FRAMEA, FRAMEB
86
CHARACTER*72 IDENT,CUNITA,RANGE
88
CHARACTER*1 IOP,COMLIN
91
INCLUDE 'MID_INCLUDE:ST_DEF.INC'
95
INCLUDE 'MID_INCLUDE:ST_DAT.INC'
98
DATA IDENT /' '/, CUNITA /' '/
100
DATA LHCUTS /0.,0.,0.,0./
102
C connect to Midas environment
104
CALL STSPRO('AVEROW')
108
CALL STKRDC('OUT_A',1,1,80,IAV,FRAMEB,KUN,KNUL,STATUS)
109
CALL STKRDC('IN_A',1,1,80,IAV,FRAMEA,KUN,KNUL,STATUS)
110
CALL STKRDC('P4',1,1,72,IAV,RANGE,KUN,KNUL,STATUS)
111
CALL STKRDC('P5',1,1,1,IAV,IOP,KUN,KNUL,STATUS)
112
CALL STKRDC('ACTION',1,2,1,IAV,COMLIN,KUN,KNUL,STATUS)
114
C open input frame and read descriptors
116
CALL STFOPN(FRAMEA,D_R4_FORMAT,F_I_MODE,F_IMA_TYPE,IMNOA,STATUS)
117
CALL STDRDI(IMNOA,'NAXIS',1,1,IAV,NAXISA,KUN,KNUL,STATUS)
118
CALL STDRDI(IMNOA,'NPIX',1,2,IAV,NPIXA,KUN,KNUL,STATUS)
119
CALL STDRDD(IMNOA,'START',1,2,IAV,STARTA,KUN,KNUL,STATUS)
120
CALL STDRDD(IMNOA,'STEP',1,2,IAV,STEPA,KUN,KNUL,STATUS)
121
CALL STDRDC(IMNOA,'IDENT',1,1,72,IAV,IDENT,KUN,KNUL,STATUS)
122
CALL STDRDC(IMNOA,'CUNIT',1,1,72,IAV,CUNITA,KUN,KNUL,STATUS)
124
C setup descriptors of result frame
130
IF (RANGE(1:1).EQ.'[') THEN
135
II2 = INDEX(RANGE,',')
136
IF (II2.LT.2) CALL STETER(22,'missing comma in range spec.')
138
C get range of pixels I1,I2
140
IF (COMLIN.EQ.'R') THEN
142
STARTB(1) = STARTA(1)
144
CUNITB(1:16) = CUNITA(1:16)
145
CUNITB(17:32) = CUNITA(17:32)
147
NEWSTR(5:) = RANGE(II1:II2-1)
148
NN = INDEX(NEWSTR,' ')
150
CALL EXTCO1(IMNOA,NEWSTR,2,NN,SUBLO,STATUS)
151
IF (STATUS.NE.0) CALL STSEPI
154
NEWSTR(5:) = RANGE(II2+1:)
156
NN = INDEX(NEWSTR,']')
158
NN = INDEX(NEWSTR,' ')
161
CALL EXTCO1(IMNOA,NEWSTR,2,NN,SUBLO,STATUS)
162
IF (STATUS.NE.0) CALL STSEPI
166
STARTB(1) = STARTA(2)
168
CUNITB(1:16) = CUNITA(1:16)
169
CUNITB(17:32) = CUNITA(33:49)
171
NEWSTR(2:) = RANGE(II1:II2-1)
172
NN = INDEX(NEWSTR,' ')
173
NEWSTR(NN:) = ',@1] '
174
CALL EXTCO1(IMNOA,NEWSTR,2,NN,SUBLO,STATUS)
175
IF (STATUS.NE.0) CALL STSEPI
178
NEWSTR(2:) = RANGE(II2+1:)
180
NN = INDEX(NEWSTR,']')
182
NN = INDEX(NEWSTR,' ')
184
NEWSTR(NN:) = ',@1] '
185
CALL EXTCO1(IMNOA,NEWSTR,2,NN,SUBLO,STATUS)
186
IF (STATUS.NE.0) CALL STSEPI
189
IF (I1.GT.I2) CALL STETER(22,'Invalid range')
191
C map output frame + initialize data
193
CALL STIPUT(FRAMEB,D_R4_FORMAT,F_O_MODE,F_IMA_TYPE,NAXISB,
194
+ NPIXB,STARTB,STEPB,IDENT,CUNITA,PNTRB,IMNOB,STATUS)
195
CALL WORK(0,MADRID(PNTRB),NPIXB,0.0,LHCUTS(3))
199
IF (COMLIN.EQ.'R') THEN
200
CALL STFXMP(NPIXB(1),D_R4_FORMAT,PNTRA,STATUS)
201
IFIRST = (I1-1)*NPIXA(1)+1
204
C read row after row and sum up
205
CALL STFGET(IMNOA,IFIRST,NPIXA(1),IAV,MADRID(PNTRA),STATUS)
206
CALL AVER1(MADRID(PNTRB),MADRID(PNTRA),NPIXB(1))
207
IFIRST = IFIRST + NPIXA(1)
212
CALL STFXMP(INUM,D_R4_FORMAT,PNTRA,STATUS)
216
C read the columns which are to be summed up
217
CALL STFGET(IMNOA,IFIRST,INUM,IAV,MADRID(PNTRA),STATUS)
218
CALL AVER2(MADRID(PNTRB),MADRID(PNTRA),
219
+ I,INUM,NPIXA(1),NPIXA(2))
220
IFIRST = IFIRST + NPIXA(1)
224
IF ((IOP.NE.'S').AND.(IOP.NE.'s')) THEN
225
CALL WORK(1,MADRID(PNTRB),NPIXB(1),FACT,
226
+ LHCUTS(3)) !average + find minmax
228
CALL WORK(2,MADRID(PNTRB),NPIXB(1),FACT,
229
+ LHCUTS(3)) !find minmax only
231
CALL STDWRR(IMNOB,'LHCUTS',LHCUTS,1,4,KUN,STATUS)
232
CALL STDWRC(IMNOB,'CUNIT',1,CUNITB,1,72,KUN,STATUS)
233
CALL DSCUPT(IMNOA,IMNOB,' ',STATUS)
238
SUBROUTINE WORK(FLAG,Y,NPIX,FACT,AUX)
244
REAL Y(NPIX),FACT,AUX(2)
250
ELSE IF (FLAG.EQ.1) THEN
255
IF (Y(J).LT.AUX(1)) AUX(1) = Y(J)
256
IF (Y(J).GT.AUX(2)) AUX(2) = Y(J)
262
IF (Y(J).LT.AUX(1)) AUX(1) = Y(J)
263
IF (Y(J).GT.AUX(2)) AUX(2) = Y(J)
270
SUBROUTINE AVER1(Y,Y1,NPIX1)
276
REAL Y(NPIX1), Y1(NPIX1)
285
SUBROUTINE AVER2(Y,Y1,ICOL,INUM,NPXA,NPXB)
290
INTEGER ICOL,J,INUM,NPXA,NPXB
291
REAL Y(NPXA), Y1(NPXB)
294
Y(ICOL) = Y(ICOL)+Y1(J)