1
C @(#)necford.for 19.1 (ESO-DMD) 02/25/03 14:20:23
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===========================================================================
32
C.COPYRIGHT: Copyright (c) 1987 European Southern Observatory,
35
C.VERSION: 1.0 ESO-FORTRAN Conversion, AA 21:22 - 3 DEC 1987
37
C.LANGUAGE: F77+ESOext
43
C program ECHSORD version 1.6 830310
47
C 910128 P. Ballester Define and set variables for mmake -i
55
C SEARCH FOR ORDERS IN AN IMAGE. TYPE ECHELLE - FLAT FIELD
56
C OUTPUT IS A TABLE WITH THE FOLLOWING COLUMNS :
57
C COLUMN NO. LABEL UNIT DESCRIPTION
58
C 1 :ORDER - ORDER NUMBER
59
C 2 :X PIXEL SAMPLE NUMBER
60
C 3 :Y PIXEL 1. MOMENT AS SUM(F*Y)/SUM(F)
61
C 4 :YBKG PIXEL POSITION OF THE BACKGROUND
62
C 5 :BKG DN BACKGROUND LEVEL
66
C MAXIMA FOLLOWING ALGORITHM IS USED
68
C CONSTRAINS : MAXIMUM NUMBER OF ORDERS IN THE IMAGE IS 100
69
C FOR EACH ORDER 19 POINTS ARE FOUND
74
C SEARCH/ORDER INPUT W,T,S OUTPUT METH
76
C ECHC(1:8) INPUT - IMAGE NAME
77
C ECHC(21:28) OUTPUT - TABLE NAME
78
C W,T,S - PARAMETERS WHERE :
79
C ECHR(2) T THRESHOLD IN THE DETECTION
83
C----------------------------------------------------------
89
INTEGER NACOL,NAXIS,NDIM,NORDER,NP,NPOINT
91
INTEGER STATUS,WINDOW,IACOL,ID
92
INTEGER NPIX(3),ICOL(7),KUN,KNUL,IMNI
93
INTEGER UPPER(100),LOWER(100),ORDPOS(100)
99
DOUBLE PRECISION START(3),STEP(3)
101
CHARACTER*8 FRMIN,TABLE
106
CHARACTER*16 LABCOL(5),UNIT(5)
109
INCLUDE 'MID_INCLUDE:ST_DEF.INC'
110
COMMON /VMR/MADRID(1)
111
INCLUDE 'MID_INCLUDE:ST_DAT.INC'
113
DATA LABCOL(1)/'ORDER'/,FORM(1)/'I6'/
114
DATA LABCOL(2)/'X'/,FORM(2)/'F7.1'/
115
DATA LABCOL(3)/'Y'/,FORM(3)/'F7.1'/
116
DATA LABCOL(4)/'YBKG'/,FORM(4)/'F7.1'/
117
DATA LABCOL(5)/'BKG'/,FORM(5)/'E12.3'/
118
DATA UNIT(1)/'UNITLESS'/
119
DATA UNIT(2)/'PIXEL'/
120
DATA UNIT(3)/'PIXEL'/
121
DATA UNIT(4)/'PIXEL'/
127
C ... initialize system and read parameters
129
CALL STSPRO('ECHFOR')
130
CALL STKRDC('ECHC',1,1,8,ACTVAL,FRMIN,KUN,KNUL,STATUS)
131
CALL STKRDC('ECHC',1,17,4,ACTVAL,METH,KUN,KNUL,STATUS)
133
CALL STKRDR('ECHR',1,4,ACTVAL,RPAR,KUN,KNUL,STATUS)
135
IF (METH.EQ.'CO') THEN
139
CALL STTPUT(' ECHELLE DEFINITION',STATUS)
140
CALL STTPUT(' ------------------',STATUS)
141
CALL STTPUT(' INPUT IMAGE : '//FRMIN,STATUS)
142
CALL STTPUT(' OUTPUT TABLE : '//TABLE,STATUS)
143
CALL STTPUT(' PARAMETERS ',STATUS)
144
WRITE (LINE,9010) RPAR(2)
145
CALL STTPUT(LINE,STATUS)
149
CALL STIGET(FRMIN,D_R4_FORMAT,F_I_MODE,F_IMA_TYPE,
150
. NDIM,NAXIS,NPIX,START,STEP,IDENA,
151
. CUNITA,PNTRA,IMNI,STATUS)
153
C ... find order positions in the middle of the image
158
NP = NPIX(2) - 2*WINDOW
159
CALL FINDM1(MADRID(PNTRA),NPIX(1),NPIX(2),IXSTR,WINDOW,NP,LEVEL,
160
+ NORDER,ORDPOS,UPPER,LOWER)
161
IF (NORDER.EQ.0) THEN
162
CALL STTPUT('Order detection failed',STATUS)
163
CALL STTPUT('Use a lower threshold',STATUS)
166
WRITE (LINE,9030) NORDER
167
CALL STTPUT(LINE,STATUS)
171
NTOT = (NORDER+1)*NPIX(1)/10
173
CALL TBTINI(TABLE,F_TRANS,F_O_MODE,IACOL,NTOT,ID,STATUS)
175
CALL TBCINI(ID,D_R4_FORMAT,1,FORM(I),
176
. UNIT(I),LABCOL(I),ICOL(I),
179
CALL TBCMAP(ID,0,IADD,STATUS)
183
CALL FOLLOW(MADRID(PNTRA),NPIX(1),NPIX(2),NORDER,ORDPOS,UPPER,
184
+ LOWER,WINDOW,LEVEL,MADRID(IADD),NTOT,NACOL,NPOINT)
186
C ... update number of elements
189
CALL STKWRI('ECHI',NORDER,4,1,KUN,STATUS)
190
CALL STKWRI('ECHI',NPIX,7,2,KUN,STATUS)
191
CALL TBIPUT(ID,NACOL,NTOT,STATUS)
192
IDENA = 'ORDER POSITION'
193
C CALL SXDPUT(TABLEFULL,'IDENT','C',IDENA,1,72,STATUS)
194
C CALL DSCUPD(TABLEFULL,TABLEFULL,' ',STATUS)
195
CALL TBSINI(ID,STATUS)
196
CALL TBTCLO(ID,STATUS)
201
C 9000 FORMAT (' ORDER WIDTH : ',F6.1)
202
9010 FORMAT (' THRESHOLD : ',F6.1)
203
C 9020 FORMAT (' SLOPE : ',F6.3)
204
9030 FORMAT (' NUMBER OF DETECTED ORDERS : ',I4)
207
SUBROUTINE FOLLOW(X,N1,N2,NORDER,ORDPOS,UPPER,LOWER,WINDOW,THRES,
210
C DEFINE ORDER POSTIONS BY FOLLOWING STRUCTURES ABOVE A GIVEN THRESHOLD
214
C X(N1, N2) REAL*4 INPUT ARRAY
215
C N1, N2 INTG*4 DIMENSIONS OF X
216
C NORDER INTG*4 NUMBER OF ORDERS
217
C ORDPOS INTG*4 Y POSITION OF THE ORDERS IN PIXELS
218
C LOWER,UPPER INTG*4 LOWER AND UPPER ORDER POSITIONS
219
C WINDOW INTG*4 NUMBER OF PIXELS IN THE EXCLUDING WINDOW
220
C THRES REAL THRESHOLD
221
C NTOT INTG*4 ALLOCATED SPACE
225
C TAB REAL ARRAY WITH THE LOCATED POSITIONS IN FORMAT
226
C (NTOT,0:NACOL) 1 - ORDER NUMBER
229
C 4 - position of back.
231
C NP INTG NUMBER OF LOCATED POSITIONS
233
C-------------------------------------------------------------
238
INTEGER N1,N2,NORDER,NTOT,NP,NACOL
239
INTEGER NSAMP,ISTAT,IORD,IRL,IL
242
INTEGER ORDPOS(NORDER),LOWER(NORDER),UPPER(NORDER)
243
INTEGER ICPOS(20),ILPOS(20),IUPOS(20),WINDOW
245
DOUBLE PRECISION TDNULL
246
REAL TAB(NTOT,0:NACOL),TRNULL
249
INTEGER NF,IHW,IXSTR,IBACK,ISTEP,IX,IY,I1,IU
250
INTEGER KZ6902,NPTS,NFOUND
252
CALL TBMNUL(TINULL,TRNULL,TDNULL)
256
C ... DISPLAY RESULTS
258
CALL STTPUT(' ',ISTAT)
260
CALL STTPUT(LINE,ISTAT)
262
CALL STTPUT(LINE,ISTAT)
264
C ... ITERATION ON ORDERS
267
DO 40 IORD = 1,NORDER
269
C ... INCLUDE START + END POINTS
272
IF (IORD.NE.NORDER) IHW = (ORDPOS(IORD+1)-ORDPOS(IORD))/2
288
TAB(NP,3) = ORDPOS(IORD)
289
IBACK = ORDPOS(IORD) + IHW
290
IF (IBACK.LT.N2-WINDOW) THEN
292
TAB(NP,5) = X(IXSTR,IBACK)
299
C ... LEFT/RIGHT PART OF THE IMAGE
314
IF ( .NOT. (NEXT)) GO TO 20
316
IY = MAX(IL-3,WINDOW)
317
I1 = MIN(N2-WINDOW,IU+3)
319
CALL FINDM1(X,N1,N2,IX,IY,NPTS,THRES,NFOUND,ICPOS,
322
C ... CHECK IF ONE ORDER FOUND
324
IF (NFOUND.EQ.1) THEN
326
C ... STORE INTO TABLE
328
IF (MOD(IX,NSAMP).EQ.0) THEN
334
IBACK = ICPOS(1) + IHW
335
IF (IBACK.LT.N2-WINDOW) THEN
337
TAB(NP,5) = X(IXSTR,IBACK)
348
NEXT = IL .GT. WINDOW .AND. IU .LT.
349
+ (N2-WINDOW) .AND. IX .GT. WINDOW .AND.
350
+ IX .LT. (N1-WINDOW)
359
WRITE (LINE,9010) IORD,IXSTR,ORDPOS(IORD),IHW,NF
360
CALL STTPUT(LINE,ISTAT)
363
CALL STTPUT(LINE,ISTAT)
367
9010 FORMAT (1X,I7,2X,I8,2X,I8,2X,I10,2X,I8)
368
9020 FORMAT (' SEQ.NO. X CENTER Y CENTER INTERORDER TEMPLA')
369
9030 FORMAT (' ------- -------- -------- ---------- --------')
370
9040 FORMAT (' -------------------------------------------------')
373
SUBROUTINE FINDM1(X,N1,N2,IX,IY,NP,THRES,NORDER,ORDPOS,UPPER,
378
C FIND CENTER OF THE ORDERS IN THE MIDDLE OF THE IMAGE
381
C X(N1,N2) REAL INPUT ARRAY
382
C N1,N2 INTG ARRAY DIMENSION
383
C IX, IY INTG STARTING PIXEL POSITIONS
384
C NP INTG NUMBER OF PIXELS TO SEARCH
385
C THRES REAL THRESHOLD
388
C NORDER INTG NUMBER OD ORDERS
389
C ORDPOS INTG POSITION OF THE ORDER (UPPER-LOWER)/2
390
C UPPER INTG UPPER ORDER LIMIT
391
C LOWER INTG LOWER ORDER LIMIT
393
INTEGER N1,N2,IX,IY,NP,NORDER,ISTART,NO,I,NFIRST,NPIX
394
INTEGER ORDPOS(1),UPPER(1),LOWER(1),WIDTH,WIDTH1,STATUS
406
C ... FIND UPPER LEVEL
410
DO 10, I = IY,IY + NP - 1
411
IF (X(ISTART,I).GT.THRES) THEN
413
C ... ABOVE THE THRESHOLD
417
C ... FIRST VALUE ABOVE THE THRESHOLD
426
C ... BELOW THE THRESHOLD
428
IF ( .NOT. FIRST) THEN
430
C ... FIRST VALUE BELOW THE THRESHOLD
436
ORDPOS(NO) = LOWER(NO) + (UPPER(NO)-LOWER(NO))/2
438
WIDTH = UPPER(NO) - LOWER(NO)
441
WIDTH1 = UPPER(NO) - LOWER(NO)
442
IF (ABS(WIDTH1-WIDTH).GT.0.1*WIDTH)
444
+ 'Warning: Order width changes',STATUS)