1
C @(#)rfotselect.for 19.1 (ES0-DMD) 02/25/03 13:30:15
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 Massachusetss Ave, Cambridge,
20
C Corresponding 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===========================================================================
31
C.IDENTIFICATION: RFOTSELECT
32
C.PURPOSE: Select objects from a displayed frame and stored them in an
34
C.AUTHOR: R. Buonanno, G. Buscema, C. Corsi, I. Ferraro, G. Iannicola
35
C Osservatorio Astronomico di Roma
36
C.VERSION: 870417 First running version at ESO (outside MIDAS) R. Buonanno
37
C. 881031 New version R. Buonanno
38
C. 890220 Major changes for portable MIDAS R.H. Warmels
39
C. load of frame done by LOAD/IMAGE
40
C. cursor interaction with GETCURS
43
INCLUDE 'MID_REL_INCL:RFOTDECL.INC/NOLIST'
53
INTEGER IAC, ICOM, IROW, IDUM
54
INTEGER ISTAT,ISTAT1,ISTAT2
70
REAL FPIX1(2),FPIX2(2)
77
REAL RINTD1, RINTD2, RINTD3, RINTD4
78
REAL RINTD5, RINTD6, RINTD7
90
DOUBLE PRECISION BEGIN(3),STEP(3),DDUM
102
C *** this part into the common blocks
103
INTEGER NCINT, NRINT, NSINT, NACINT, NARINT
105
INTEGER NGRP, NOBJ, NINT
107
INCLUDE 'MID_INCLUDE:IDIMEM.INC'
108
INCLUDE 'MID_INCLUDE:IDIDEV.INC'
109
INCLUDE 'MID_INCLUDE:ST_DEF.INC'
111
INCLUDE 'MID_INCLUDE:ST_DAT.INC'
113
DATA IVX/1,2,3,4,5,6,7,8,9/
117
9001 FORMAT('*** INFO: Intermediate table contains', I5,
118
2 ' groups with ',I5,' components')
119
9004 FORMAT(' table will be appended')
120
9003 FORMAT('Enter identification, mag., col1 and col2 [',I6,
124
CALL STSPRO('SELECT')
126
C *** input parameters
127
CALL STKRDC('IN_A',1,1,60,IAC,FRAME,KUN,KNUL,ISTAT) ! name of image
128
CALL STIGET(FRAME,D_R4_FORMAT,F_I_MODE,F_IMA_TYPE,
129
2 2,NAXIS,NPIX,BEGIN,STEP,IDENT,CUNIT,IPNTR,IMF,ISTAT)
133
C *** get the intemediate file name
134
CALL STKRDC('OUT_A',1,1,60,IAC,INTFIL,KUN,KNUL,ISTAT) ! intermediate file
136
C *** open or create the intermediate table
137
CALL STECNT('GET',EC,ED,EL)
138
CALL STECNT('PUT',1,0,0)
139
CALL TBTOPN(INTFIL,F_IO_MODE,TIDINT,ISTAT)
141
STRING = '*** INFO: Intermediate table not present; '//
142
2 'will create a new one ...'
147
CALL STTPUT(STRING,ISTAT)
148
CALL INTINI(INTFIL,TIDINT)
151
CALL TBIGET(TIDINT,NCINT,NRINT,NSINT,NACINT,NARINT,ISTAT)
153
STRING = '*** FATAL: Problems with getting info for '//
154
2 'intermediate table ...'
155
CALL STTPUT(STRING,ISTAT)
160
STRING = '*** INFO: No points in the intermediate table'
161
CALL STTPUT(STRING,ISTAT)
164
C *** get the intermediate table parameters
165
CALL INTDRD(TIDINT,NGRP,NOBJ,NINT,RINTD1,RINTD2,RINTD3,
166
2 RINTD4,RINTD5,RINTD6,RINTD7)
167
IROW = NRINT ! number of rows written
168
WRITE(STRING,9001) NGRP,NOBJ
169
CALL STTPUT(STRING,ISTAT)
171
CALL STTPUT(STRING,ISTAT)
172
CALL TBERDI(TIDINT,NRINT,1,IDNGRP,NUL,ISTAT)
174
CALL STECNT('PUT',EC,ED,EL)
176
C *** open the display device
180
C CALL STKRDC('INPUTC',1,1,40,IAC,STRING,KUN,KNUL,ISTAT) ! user area
181
C CALL EXTRCO(STRING,NAXIS,NPIX,BEGIN,STEP,NDUM,AREA(1),
185
C NX = AREA(3) - AREA(1) + 1
186
C NY = AREA(4) - AREA(2) + 1
188
C IF (IX0.LT.1) IX0 = 1
189
C IF (IY0.LT.1) IY0 = 1
190
C IF ((IX0+NX-1).GT.NPL) NX = NPL-IX0+1
191
C IF ((IY0+NY-1).GT.NL) NY = NL-IY0+1
192
C WRITE (STRING,9001) AREA(1),AREA(2),AREA(3),AREA(4)
193
C CALL STTPUT(STRING,ISTAT)
195
C *** get the window size
196
CALL STKRDI('INPUTI',1,2,IAC,IWND,KUN,KNUL,ISTAT)
197
DIMX = FLOAT(IWND(1))
198
DIMY = FLOAT(IWND(2))
208
C *** infinite loop for cursor interaction
214
CALL STTPUT('*** INFO: Use cursor control panel to '//
215
2 'select object',ISTAT)
220
CALL GETCUR(ACTION,FRAME,XY1,FPIX1,WC01,VALUE1,ISTAT1,
221
2 XY2,FPIX2,WC02,VALUE2,ISTAT2)
222
IF (ISTAT1.EQ.0 .AND. ISTAT2. EQ. 0) THEN
223
IF (CCOUNT.EQ.0) THEN
229
CALL STTPUT('*** WARNING: Switch cursor on ...'//
230
2 ' next time we exit',ISTAT)
244
CALL INTDWR(TIDINT,NGRP,NOBJ,NINT,RINTD1,RINTD2,RINTD3,
245
2 RINTD4,RINTD5,RINTD6,RINTD7)
246
CALL TBSINI(TIDINT,ISTAT)
247
CALL TBTCLO(TIDINT,ISTAT)
269
CALL REALIN(NPL,NL,I,INX,9,MADRID(IPNTR),VET)
273
H1 = AMAX1(H1,VET(J))
284
IF (RX(J).GT.PAR(1)) THEN
288
IF (RX(J).LT.PAR(4)) PAR(4)=RY(J)
291
PAR(1) = PAR(1)-PAR(4)
293
VME = (RX(KL-1)+RX(KL+1))/2.
294
IF (VME.GE.PAR(1)) VME=PAR(1)/2.
295
PAR(3) = SQRT(AL/ALOG(PAR(1)/VME))
306
IF (SL.LE.0.0001.OR.IT.GT.20) GO TO 2000
308
CALL MONO4(IVX,RX,NLIV,PAR,.7)
309
IF (PAR(1).LT..1 .OR. ABS(PAR(2)-PARS(2)).GT.4 .OR.
310
2 PAR(3).LE.0. .OR. PAR(3).GT.20.) THEN
319
FG = PAR(1)*EXP(-4*ALOG(2.)*((I-PAR(2))/PAR(3))**2)
320
SQM = SQM+(RX(I)-FG-PAR(4))**2
323
SL = ABS(SQR-SQM)/SQR
334
IF (RY(J).GT.PAR(1)) THEN
338
IF (RY(J).LT.PAR(4)) THEN
343
PAR(1) = PAR(1)-PAR(4)
345
VME = (RY(KL-1)+RY(KL+1))/2.
346
IF (VME.GE.PAR(1)) VME = PAR(1)/2.
347
PAR(3) = SQRT(AL/ALOG(PAR(1)/VME))
358
IF (SL.LE.0.0001.OR.IT.GT.20) GO TO 3000
360
CALL MONO4(IVX,RY,NLIV,PAR,.7)
361
IF (PAR(1).LT..1 .OR. ABS(PAR(2)-PARS(2)).GT.4 .OR.
362
2 PAR(3).LE.0. .OR. PAR(3).GT.20.) THEN
371
FG = PAR(1)*EXP(-4*ALOG(2.)*((I-PAR(2))/PAR(3))**2)
372
SQM = SQM+(RY(I)-FG-PAR(4))**2
376
SL = ABS(SQR-SQM)/SQR
382
FO1 = (FO1+PAR(4))/2.
385
C *** legge magnitudine v , colori b-v e u-b e nome della
386
C stella prescelta e li scrive sul file f
388
WRITE (STRING,9003) IDNGRP
389
NCH = INDEX(STRING,':')+1
391
CALL STKPRC(STRING(1:NCH),'INPUTC',1,1,60,IAC,CINPUT,
393
ICOM = MIN(INDEX(CINPUT,',')-1,6)
400
CALL GENCNV(CINPUT,2,ICOM,IDUM,RINPUT,DDUM,ISTAT)
401
C CALL USRINP(RINPUT,4,'R',CINPUT)
402
C ICOM = NEL(RINPUT,4)
403
IF (ICOM.GT.0 .AND. ICOM.LT.4) THEN
404
DO 3003 ICOM = ICOM+1, 4
408
IDNGRP= INT(RINPUT(1))
409
IF (IDNGRP.GT.99999) THEN
410
CALL STTPUT('*** WARNING: Group identification should'//
411
2 ' be less than 100000; try again ...',ISTAT)
421
C *** prepare the arrays for writting
427
LX1 = BEGIN(1)+X1-KDX
428
LY1 = BEGIN(2)+Y1-KDY
429
PARINT(1) = FLOAT(LX1)
430
PARINT(2) = FLOAT(LY1)
447
FITCMP(2) = FLOAT(KDX)
448
FITCMP(3) = FLOAT(KDY)
453
CALL INTWWR(TIDINT,IROW,NCP,NHL)