1
C===========================================================================
2
C Copyright (C) 1995-2010 European Southern Observatory (ESO)
4
C This program is free software; you can redistribute it and/or
5
C modify it under the terms of the GNU General Public License as
6
C published by the Free Software Foundation; either version 2 of
7
C the License, or (at your option) any later version.
9
C This program is distributed in the hope that it will be useful,
10
C but WITHOUT ANY WARRANTY; without even the implied warranty of
11
C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
C GNU General Public License for more details.
14
C You should have received a copy of the GNU General Public
15
C License along with this program; if not, write to the Free
16
C Software Foundation, Inc., 675 Massachusetts Ave, Cambridge,
19
C Correspondence concerning ESO-MIDAS should be addressed as follows:
20
C Internet e-mail: midas@eso.org
21
C Postal address: European Southern Observatory
22
C Data Management Division
23
C Karl-Schwarzschild-Strasse 2
24
C D 85748 Garching bei Muenchen
26
C===========================================================================
29
C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
32
C.AUTHOR Andrew T. Young
35
C.PURPOSE convert Danish photometric data files to uniform ascii
37
C.VERSION 5.2 ATY April 21, 1993
40
C-----------------------------------------------------------------------------
41
C*****************************************************************************
43
C This program reads data recorded in intermixed formats and combines
44
C them into a uniform format, in the file 'data.dat' that is converted
45
C into a MIDAS table-format file, using the *.fmt file 'data.fmt'.
47
C The version you see here is designed to convert data from the Danish
48
C 0.5-meter telescope. Data codes are in col. 1.
49
C These codes are read and decoded at statements 110-190 in the main
52
C The basic method is to load the data as they are read from different
53
C types of cards into the COMMON blocks /OUTR/ and /OUTC/, which hold
54
C real and character variables, respectively. (Some compilers want you
55
C to keep such blocks separate.) When enough card images have been read
56
C to make a complete observation, the contents of /OUT*/ are written to
57
C the uniform-format file 'data.dat'; then the common blocks are cleared,
58
C to the appropriate "null" values. (Blanks are used to clear character
61
C The MIDAS command CREATE/TABLE can then be used, with the *.fmt file
62
C supplied, to convert the uniform 'data.dat' file to MIDAS table format.
63
C This is done in the command CONVERT/PHOT.
65
C As this is based on the esodcon program, it probably contains fossils.
68
C*****************************************************************************
74
DOUBLE PRECISION DJD, OLDMJD
80
DOUBLE PRECISION DNULL
81
COMMON /NULLS/ INULL, RNULL, DNULL
88
REAL RELERR(4),COUNT(4)
90
CHARACTER*80 LINE(2), DATFIL
93
COMMON /BUF/LENBUF, NOW
95
INTEGER ITBL, ISTAT, NCOLS, NROWS, NSORTC, NWPRAL,
96
1 NROWSAL, NCOL, NCDIAM, NROW, I, NBANDS, J, LWORD, K, K2
98
CHARACTER A*1, CODE*2, END*1, STATUS*7
99
CHARACTER*10 LSTSTR,OLDLST
100
CHARACTER*32 COM1,COM2,COM3
104
CHARACTER BNDCOD(6),BNAME(6)*5,CODES(4)
110
C Declarations for the output (must be in WRITER too!):
112
DOUBLE PRECISION MJDOBS
113
REAL SIGNAL,EXPTIME,ESTERR
114
COMMON /OUTR/ SIGNAL,EXPTIME,MJDOBS,ESTERR
115
CHARACTER OBJECT*9,STARSKY*4,BAND*8,COMMENT*32,DIAPH
116
COMMON /OUTC/ OBJECT,STARSKY,BAND,COMMENT,DIAPH
118
C Set up MIDAS declarations:
122
INCLUDE 'MID_INCLUDE:ST_DEF.INC'
126
INTEGER NACTEL, IUNIT, NULLS
131
C BEGIN DATA statements:
133
INCLUDE 'MID_INCLUDE:ST_DAT.INC'
135
DATA NDATA/7/, NOUTP/8/
137
DATA BNDCOD/'U', 'V', 'B', 'Y', 'W', 'N'/
138
DATA BNAME /'u', 'v', 'b', 'y', 'betaW','betaN'/
141
C END DATA statements.
144
C ******************** PROLOGUE ********************
146
CALL STSPRO ('DANISH')
148
C Because the Sun library barfs on -Inf (which is used as NULL
149
C by MIDAS), I define my own "NULL" values here as 3.e33:
154
C Real program begins here: (use RUN DANISH to test in MIDAS)
157
INQUIRE(FILE='data.dat',EXIST=EFLAG)
159
CALL TV('File "data.dat" already exists!')
160
1 CALL ASK ('Do you want to write over it?? ',A)
161
IF (MATCH(A,'Y')) THEN
162
OPEN(NOUTP,FILE='data.dat',STATUS='UNKNOWN')
164
C Make sure it gets truncated to zero length.
165
CLOSE (NOUTP,STATUS='DELETE')
166
ELSE IF (MATCH(A,'N')) THEN
168
1 'Please move "data.dat" to a new name.')
170
CALL TV('Please reply "yes" or "no".')
174
C Open the uniform-format ascii file:
175
OPEN(NOUTP,FILE='data.dat',STATUS='UNKNOWN')
178
C Find telescope coordinates:
180
INQUIRE (FILE='esotel.tbl', EXIST=EFLAG)
182
CALL TBTOPN ('esotel.tbl', 0, ITBL, ISTAT)
184
CALL TV('Problem opening "esotel.tbl".')
185
CALL STETER(2,'Do you have read permission?')
188
1 NCOLS, NROWS, NSORTC, NWPRAL, NROWSAL, ISTAT)
189
CALL TBLSER (ITBL, 'TELESCOP', NCOL, ISTAT)
190
CALL TBLSER (ITBL, 'DIAM', NCDIAM, ISTAT)
192
CALL TV ('Which telescope did you use?')
194
CALL TBERDC (ITBL, NROW, NCOL, CTEST, EFLAG, ISTAT)
195
CALL FT_EOS (CTEST,32,COM2,ISTAT)
196
IF (EFLAG.OR. ISTAT.NE.0) GOTO 2
197
CALL TBERDR (ITBL, NROW, NCDIAM, DIAM, EFLAG, ISTAT)
198
IF (EFLAG.OR. ISTAT.NE.0) GOTO 2
199
WRITE (COM1,'(8X,I2,'': '',A8,F6.2,'' m'')')
203
WRITE(COM1,'(8X,I2,'': (None of these)'')') NROWS+1
205
CALL ASK ('Please enter the number: ',COM1)
206
3 READ (COM1,'(BN,I2)', ERR=4) NROW
207
IF (NROW.LE.NROWS .AND. NROW.GE.1) THEN
208
CALL TBERDC (ITBL,NROW,NCOL,CTEST,EFLAG,ISTAT)
209
CALL FT_EOS (CTEST,32,COM2,ISTAT)
217
CALL TBERDC (ITBL, NROW, NCOL,CTEST, EFLAG, ISTAT)
218
CALL FT_EOS (CTEST,32,COM2,ISTAT)
219
IF (COM1.EQ.COM2) THEN
223
CALL ASK ('Please use the numbers at left.',COM1)
226
6 WRITE(COM1,'('' You selected '',A8)') COM2
229
IF (INDEX(COM2,'DAN').NE.1) THEN
230
CALL TV('Not a Danish telescope. Please try again.')
234
IF (NROW.LE.NROWS .AND. NROW.GE.1) THEN
235
CALL TBLSER (ITBL, 'LON', NCOL, ISTAT)
236
CALL TBERDR (ITBL,NROW,NCOL, ELONG,EFLAG,ISTAT)
237
IF(EFLAG.OR. ISTAT.NE.0) THEN
238
CALL QF('Enter EAST longitude (deg):',
241
CALL TBLSER (ITBL, 'LAT', NCOL, ISTAT)
242
CALL TBERDR (ITBL,NROW,NCOL, PHI,EFLAG,ISTAT)
243
IF(EFLAG.OR. ISTAT.NE.0) THEN
244
CALL QF('Enter Latitude (deg):', PHI)
247
CALL QF('Enter EAST longitude (deg):', ELONG)
248
CALL QF('Enter Latitude (deg):', PHI)
251
CALL TBTCLO(ITBL, ISTAT)
253
CALL TV('File "esotel.tbl" not available!')
254
CALL STETER(6,'Please get a copy of "esotel.tbl"')
258
C clear data storage:
270
C *** Prepare input buffer ***
273
7 Call STKRDC ('RAWDAT',1,1,80, NACTEL,DATFIL,IUNIT,NULLS,ISTAT)
274
C 7 CALL ASKFIL('What is the name of the file of observed data?',
276
INQUIRE(FILE=DATFIL,EXIST=EFLAG)
278
CALL TV('No such file exists!')
279
CALL TVN('Please try again:')
282
OPEN(NDATA,FILE=DATFIL,STATUS='UNKNOWN')
284
CALL TV('Converting data...')
292
110 READ (7,'(A80)',END=200) LINE(1),LINE(2)
295
C Start reading first card:
297
IF (A.EQ.'c') GO TO 112
298
READ (LINE(1),111,ERR=301) A,NREC,DJD,LSTSTR,STATUS
299
111 FORMAT(A1,I4,F12.5,2(1X,A7))
300
C Convert Danish MJD to real JD.
302
C Convert real JD to MJD.
303
MJDOBS=DJD-2400000.5D0
304
C Check that times are in order.
305
IF (MJDOBS.LT.OLDMJD .OR. NREC.LT.NRECOLD .OR.
306
1 (LSTSTR.LT.OLDLST .AND. LSTSTR(:2).NE.'00')) THEN
308
CALL TV(' Sequence error:')
309
CALL TV('Record Danish JD LST')
310
CALL TVN('------ ----------- -------')
311
WRITE(DATFIL,'(I4,5X,F11.5,3X,A)')
312
1 NRECOLD,OLDMJD-39999.5,OLDLST
313
IF (DATFIL(10:10).EQ.' ') DATFIL(10:10)='0'
315
CALL TV(' is followed by')
316
WRITE(DATFIL,'(I4,5X,F11.5,3X,A)')
317
1 NREC,MJDOBS-39999.5,LSTSTR
318
IF (DATFIL(10:10).EQ.' ') DATFIL(10:10)='0'
323
IF (NREC.LT.NRECOLD) THEN
324
CALL TVN(' RECORD numbers out of order')
328
IF (MJDOBS.LT.OLDMJD) THEN
329
CALL TVN(' JDs out of order')
333
IF (LSTSTR.LT.OLDLST .AND. LSTSTR(:2).NE.'00' .AND.
334
1 OLDLST(:2).NE.'23') THEN
335
CALL TVN(' LSTs out of order')
340
CALL TV('Bad record number?')
341
ELSE IF (I.EQ.2) THEN
342
CALL TV('JD is probably wrong; others are in order.')
343
ELSE IF (I.EQ.4) THEN
344
CALL TV('LST is probably wrong; others are in order.')
354
112 IF (A.EQ.'s') THEN
358
C Finish reading first card:
359
READ(LINE(1),113,ERR=392)EXPTIME,OBJECT,CODE
360
113 FORMAT(40X,F3.0,1X,A9,1X,A2)
361
IF (EXPTIME.EQ.0.) THEN
362
DATFIL='ZERO exposure time at MJDOBS ='
363
WRITE(DATFIL(31:),'(F12.5)') MJDOBS
365
CALL TVN(' Observation rejected.')
368
C convert MJDOBS from end to start of exposure.
369
MJDOBS=MJDOBS-EXPTIME/86400.
371
C Interpret second card:
372
IF (STATUS(:1).EQ.'U')THEN
374
READ(LINE(2),114,ERR=393)
375
1 (CODES(I),COUNT(I),RELERR(I),NBAD(I),I=1,4),END
376
114 FORMAT(4(A1,F9.0,1X,F4.4,I3,1X),A1)
378
ELSE IF (STATUS(:1).EQ.'H')THEN
380
READ(LINE(2),115,ERR=394)
381
1 (CODES(I),COUNT(I),RELERR(I),NBAD(I),I=1,2),END
382
115 FORMAT(2(A1,F9.0,1X,F4.4,I3,1X),38X,A1)
390
CALL TV('Unknown data:')
397
IF (END.NE.'e') GO TO 395
399
C Convert STAR/SKY flag to standard strings.
400
IF (CODE.EQ.'*0') THEN
402
ELSE IF (CODE.EQ.'B0') THEN
406
CALL TV('Unexpected code in STAR/SKY column:')
410
CALL STETER(118,'Fix data and try again.')
416
C Convert band codes to band names:
418
IF (CODES(I).EQ.BNDCOD(J)) THEN
424
CALL TV('Non-standard band name!')
429
IF (STATUS(3:3).EQ.'1') THEN
430
C OPEN position. Go on.
431
ELSE IF (STATUS(3:3).EQ.'2') THEN
432
C CLOSED position. Set to DARKn.
434
WRITE(BAND(5:5),'(I1)') J
435
ELSE IF (STATUS(3:3).EQ.'3') THEN
436
C ND=1 position. Append ND1.
437
BAND(LWORD(BAND)+1:)='ND1'
439
DATFIL='Undefined shutter code (status(3:3)):'
440
DATFIL(39:39)=STATUS(3:3)
445
1 'Ignore this observation and continue?',A)
446
IF (A.EQ.'Y' .OR. A.EQ.'O')THEN
447
C Clear data & look for next observation.
450
CALL TV('Program cannot continue.')
451
CALLSTETER(122,'Fix data and try again.')
455
C Check for v & b neutral-density filters:
456
IF ((J.EQ.2 .OR. J.EQ.3) .AND.
457
1 STATUS(4:4).EQ.'G') THEN
458
IF (BAND(2:3).EQ.'ND') THEN
462
C Only the vb filter.
467
C Check for viewing optics in the way:
468
IF (STATUS(6:6).EQ.'M' .OR. STATUS(7:7).EQ.'M') THEN
470
IF (STATUS(6:6).EQ.'M') THEN
471
CALL TV('Field-viewing optics in the way.')
472
ELSE IF (STATUS(7:7).EQ.'M') THEN
473
CALL TV('Viewing microscope in the way.')
477
CALL ASK('Do you want to use this as DARK?',A)
478
IF (A.EQ.'Y' .OR. A.EQ.'O') THEN
480
DATFIL=COMMENT(:LWORD(COMMENT))//
489
C RELERR was read as a fraction, not %.
490
ESTERR=RELERR(I)*SIGNAL
491
IF (SIGNAL.EQ.0.) SIGNAL=RNULL
492
IF (ESTERR.EQ.0.) ESTERR=RNULL
509
ELSE IF (A.EQ.'c')THEN
513
C Split up comment card cleanly if possible:
515
IF (LINE(2)(K:K).EQ.' ') GO TO 187
517
187 DO 188 K2=K+32,K+12,-1
518
IF (LINE(2)(K2:K2).EQ.' ') GO TO 189
520
189 IF (LINE(2)(K2+32:).EQ.' ') THEN
525
READ (LINE(2),'(2X,2A32,A14)') COM1,COM2,COM3
531
IF (COM2.NE.' ') CALL WRITER
534
IF (COM3.NE.' ') CALL WRITER
538
ELSE IF (A.EQ.'f') THEN
547
C other: Illegal card.
556
C Now make format file:
558
OPEN (NOUTP,FILE='data.fmt',STATUS='UNKNOWN')
559
WRITE(NOUTP,'(A29)')'! Format file for Danish Data'
561
C Caution -- columns here MUST match FORMATs 5 & 6 in WRITER !!
562
WRITE(NOUTP,300)'DEFINE/FIELD 1 10 R F10.0 :SIGNAL '
563
WRITE(NOUTP,300)'DEFINE/FIELD 11 42 C A9 :OBJECT '
564
WRITE(NOUTP,300)'DEFINE/FIELD 44 47 C A7 :STARSKY'
565
WRITE(NOUTP,300)'DEFINE/FIELD 49 56 C*8 A7 :BAND '
566
WRITE(NOUTP,300)'DEFINE/FIELD 57 68 D F12.6 :MJD_OBS'
567
WRITE(NOUTP,300)'DEFINE/FIELD 69 76 R F8.3 :EXPTIME'
568
WRITE(NOUTP,300)'DEFINE/FIELD 77 108 C A32 :COMMENT'
569
WRITE(NOUTP,300)'DEFINE/FIELD 109 118 R F10.0 :ESTERR '
570
WRITE(NOUTP,300)'DEFINE/FIELD 120 123 C A6 :DIAPHRAGM'
571
WRITE(NOUTP,'(A3)')'END'
574
CALL TV('Danish is finished')
581
C --------------------
585
301 CALL TV('ERROR reading card at 111.')
588
392 CALL TV('ERROR reading card at 113.')
591
393 CALL TV('ERROR reading card at 114.')
594
394 CALL TV('ERROR reading card at 115.')
597
395 CALL TV('Card does not end with "e".')
601
CALL TV('These cards are not in standard format:')
605
CALL TV('Please fix data and try again.')
606
CALL STETER(399,'Data not in std. format')
610
C writes output to uniform ascii file 'data.dat'
614
DOUBLE PRECISION DNULL
615
COMMON /NULLS/ INULL, RNULL, DNULL
617
DOUBLE PRECISION MJDOBS
618
REAL SIGNAL,EXPTIME,ESTERR
619
COMMON /OUTR/ SIGNAL,EXPTIME,MJDOBS,ESTERR
620
CHARACTER OBJECT*9,STARSKY*4,BAND*8,COMMENT*32,DIAPH
621
COMMON /OUTC/ OBJECT,STARSKY,BAND,COMMENT,DIAPH
626
WRITE(C,5) SIGNAL,OBJECT,STARSKY,BAND,MJDOBS,EXPTIME,COMMENT
627
5 FORMAT (F10.0,A9,24X,A4,1X,A8,F12.6,F8.3,A32)
628
WRITE(C(109:),6) ESTERR,DIAPH
629
6 FORMAT(F10.0,1X,A1)
631
C Fix up NULL fields:
633
IF (SIGNAL.EQ.RNULL) C(1:10)=' '
634
IF (MJDOBS.EQ.DNULL) C(57:68)=' '
635
IF (EXPTIME.EQ.RNULL) C(69:76)=' '
636
IF (ESTERR.EQ.RNULL) C(109:118)=' '