1
C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
C.IDENTIFICATION ISTHIG.FOR
3
C.AUTHOR: J.D.PONZ ESA-VILSPA
4
C.KEYWORDS IUE, GO FORMAT, HIGH DISPERSION SPECTRUM
5
C.ENVIRONMENT MIDAS, IUE context
8
C Reads High dispersion MEHI file from tape.
9
C The routine performs the following functions (routine names in brackets):
11
C \item Handles the file header (ISTFHD)
12
C \item Creates the MIDAS table file on disk (TBTINI)
13
C \item Creates the table columns (TBCINI)
14
C \item Iterates on orders to
16
C \item Read wavelength record (ISTREA)
17
C \item Decode wavelengths
18
C \item Write the wavelengths into the table (TBEWRR)
19
C \item Read epsilon record (ISTREA)
20
C \item Decode epsilon
21
C \item Write the epsilon values into the table (TBEWRR)
22
C \item Read/decode/write the extracted spectra
23
C (Gross, background, net,
24
C ripple-corrected net and absolute flux)
25
C \item Write the spectral order number
27
C \item Writes IUE specific descriptors (ISTDES)
28
C \item Closes the table file (TBTCLO)
35
C The following extensions are used:
38
C \item INCLUDE statement
39
C \item Long variable names
40
C \item Underscore character
43
C.VERSION: 1.0 9 Jul 1991. Initial coding.
44
C.VERSION: 1.1 27 Nov 1991. Include variable number of records per group.
45
C.VERSION: 1.2 29 Nov 1991. Warning when Calibrated spectrum not present.
46
C.VERSION: 1.3 14 APR 1992. Remove VMS extensions
47
C------------------------------------------------------------------
48
SUBROUTINE ISTHIG(CHANL,BUFF,FILE,DSKFMT,K,KORD,NRECO,NBYTE,
52
INTEGER CHANL ! IN: tape channel number
53
CHARACTER*(*) BUFF ! IN: buffer with the ascii header
54
CHARACTER*(*) FILE ! IN: file name
55
INTEGER DSKFMT ! IN: file format (-1 no file)
56
INTEGER K ! IN: number of orders requested
57
INTEGER KORD(1) ! IN: actual orders requested
58
INTEGER NRECO ! IN: number of records
59
INTEGER NBYTE ! IN: number of bytes per record
60
INTEGER DSPFLG ! IN: display flag
61
INTEGER STATUS ! OUT: status
63
INTEGER I, LEN, NROW, TID, IROW, IVAL, IVALUE
64
INTEGER JG, KG, JB, KB, JN, KN, JF, KF, IC, JR, KR
65
INTEGER NORD, IPREV, JORDER, M, INUM, LAMB, IACT
67
INTEGER BBUFF(1024), BZERO(1024)
69
INTEGER IBUFF(1024), LAMB0(100), IORD(100), NVAL(100)
70
REAL VALUE, SCG, SCB, SCN, SCR, SCF
71
CHARACTER*16 LLABEL,ELABEL,GLABEL,BLABEL,NLABEL,FLABEL
72
CHARACTER*16 RLABEL, RUNIT, OLABEL, OUNIT
73
CHARACTER*16 LUNIT,EUNIT,GUNIT,BUNIT,NUNIT,FUNIT
74
CHARACTER*8 LFORM,EFORM,GFORM,BFORM,NFORM,FFORM,RFORM
77
INCLUDE 'MID_INCLUDE:ST_DEF.INC'
78
EQUIVALENCE (BBUFF, IBUFF)
79
EQUIVALENCE (BZERO, IZERO)
80
EQUIVALENCE (IZERO(103), LAMB0(1))
81
EQUIVALENCE (IZERO(203), IORD(1))
82
EQUIVALENCE (IZERO(303), NVAL(1))
83
INCLUDE 'MID_INCLUDE:ST_DAT.INC'
85
DATA LLABEL/'WAVELENGTH'/,ELABEL/'EPSILON'/
86
DATA GLABEL/'GROSS'/, BLABEL/'BACKGROUND'/
87
DATA NLABEL/'NET'/, RLABEL/'RNET'/
88
DATA OLABEL/'ORDER'/, FLABEL/'FLUX'/
89
DATA LUNIT/'ANGSTROM'/, EUNIT/'UNITLESS'/
90
DATA GUNIT/'FN'/, BUNIT/'FN'/
91
DATA NUNIT/'FN'/, RUNIT/'FN'/
92
DATA FUNIT/'ERGS/CM2/A'/, OUNIT/'UNITLESS'/
93
DATA LFORM/'F8.3'/, EFORM/'I5'/, OFORM/'I4'/
102
C ... decode full header, print it and put info in common area
104
CALL ISTFHD(CHANL,BUFF,DSPFLG,STATUS)
105
IF (STATUS.NE.0) RETURN
106
IF (DSKFMT.LT.0) RETURN ! only displays header
108
C ... reads record zero
110
CALL ISTRHW(CHANL,BZERO,NBYTE,LEN,STATUS)
111
IF (NBYTE.NE.LEN .OR. STATUS.NE.0) RETURN
113
C ... extracts useful info
132
IF (NRECPO.LT.6.OR.NRECPO.GT.7) THEN
136
IF (NRECPO.EQ.6) THEN
137
CALL STTPUT('*** Calibrated flux not present ***',STATUS)
138
CALL STTPUT('*** Output flux set to zero ***',STATUS)
142
C ... finds orders and number of samples
146
NROW = NROW + NVAL(I) ! CHECK ORDER SELECTION
149
C ... create the table file and columns
151
CALL TBTINI(FILE,F_TRANS,F_O_MODE,10,NROW,TID,STATUS)
152
IF (STATUS.NE.0) RETURN
153
CALL TBCINI(TID,D_R4_FORMAT,1,LFORM,LUNIT,LLABEL,IC,STATUS)
154
CALL TBCINI(TID,D_I4_FORMAT,1,EFORM,EUNIT,ELABEL,IC,STATUS)
155
CALL TBCINI(TID,D_R4_FORMAT,1,GFORM,GUNIT,GLABEL,IC,STATUS)
156
CALL TBCINI(TID,D_R4_FORMAT,1,BFORM,BUNIT,BLABEL,IC,STATUS)
157
CALL TBCINI(TID,D_R4_FORMAT,1,NFORM,NUNIT,NLABEL,IC,STATUS)
158
CALL TBCINI(TID,D_R4_FORMAT,1,RFORM,RUNIT,RLABEL,IC,STATUS)
159
CALL TBCINI(TID,D_R4_FORMAT,1,FFORM,FUNIT,FLABEL,IC,STATUS)
160
CALL TBCINI(TID,D_I4_FORMAT,1,OFORM,OUNIT,OLABEL,IC,STATUS)
162
C ... iteration on orders
165
DO 100 JORDER = 1, NORD
171
C ... scaled wavelengths
173
CALL ISTRHW(CHANL,BBUFF,NBYTE,LEN,STATUS)
174
IF (NBYTE.NE.LEN .OR. STATUS.NE.0) RETURN
179
DO 10 I = 5, NBYTE, 2
180
VALUE = LAMB+0.002*IBUFF(IVAL)
181
CALL TBEWRR(TID,IROW,IC,VALUE,STATUS)
185
IF (IACT.GT.INUM) GOTO 15
190
15 CALL ISTRHW(CHANL,BBUFF,NBYTE,LEN,STATUS)
191
IF (NBYTE.NE.LEN .OR. STATUS.NE.0) RETURN
196
DO 20 I = 5, NBYTE, 2
198
CALL TBEWRI(TID,IROW,IC,IVALUE,STATUS)
202
IF (IACT.GT.INUM) GOTO 25
207
25 CALL ISTRHW(CHANL,BBUFF,NBYTE,LEN,STATUS)
208
IF (NBYTE.NE.LEN .OR. STATUS.NE.0) RETURN
213
DO 30 I = 5, NBYTE, 2
214
VALUE = IBUFF(IVAL)*SCG
215
CALL TBEWRR(TID,IROW,IC,VALUE,STATUS)
219
IF (IACT.GT.INUM) GOTO 35
224
35 CALL ISTRHW(CHANL,BBUFF,NBYTE,LEN,STATUS)
225
IF (NBYTE.NE.LEN .OR. STATUS.NE.0) RETURN
230
DO 40 I = 5, NBYTE, 2
231
VALUE = IBUFF(IVAL)*SCB
232
CALL TBEWRR(TID,IROW,IC,VALUE,STATUS)
236
IF (IACT.GT.INUM) GOTO 45
241
45 CALL ISTRHW(CHANL,BBUFF,NBYTE,LEN,STATUS)
242
IF (NBYTE.NE.LEN .OR. STATUS.NE.0) RETURN
247
DO 50 I = 5, NBYTE, 2
248
VALUE = IBUFF(IVAL)*SCN
249
CALL TBEWRR(TID,IROW,IC,VALUE,STATUS)
253
IF (IACT.GT.INUM) GOTO 55
258
55 CALL ISTRHW(CHANL,BBUFF,NBYTE,LEN,STATUS)
259
IF (NBYTE.NE.LEN .OR. STATUS.NE.0) RETURN
264
DO 60 I = 5, NBYTE, 2
265
VALUE = IBUFF(IVAL)*SCR
266
CALL TBEWRR(TID,IROW,IC,VALUE,STATUS)
270
IF (IACT.GT.INUM) GOTO 65
276
IF (NRECPO.EQ.7) THEN
278
C ... calibrated flux included in the file
280
CALL ISTRHW(CHANL,BBUFF,NBYTE,LEN,STATUS)
281
IF (NBYTE.NE.LEN .OR. STATUS.NE.0) RETURN
286
DO 70 I = 5, NBYTE, 2
287
VALUE = IBUFF(IVAL)*SCF
288
CALL TBEWRR(TID,IROW,IC,VALUE,STATUS)
292
IF (IACT.GT.INUM) GOTO 75
296
C ... calibrated flux is not present in the file. Output column set to zero
302
DO 71 I = 5, NBYTE, 2
303
CALL TBEWRR(TID,IROW,IC,VALUE,STATUS)
306
IF (IACT.GT.INUM) GOTO 75
310
C ... generates the order number
315
CALL TBEWRI(TID,IROW,IC,M,STATUS)
321
C ... write label descriptors
323
CALL ISTDES(TID,BUFF,STATUS)
324
CALL TBTCLO(TID,STATUS)