SUBROUTINE VSAVE C Writes out calibration tables to disk C Written by David Mozurkewich, 14 october 1988 C New format installed 3 November 1988 IMPLICIT UNDEFINED (A-Z) SAVE INTEGER *4 IERR, I, J, K, TEMP(16), IREC INTEGER *2 I2SCAN, I2OK REAL *8 TEMP8 CHARACTER *8 ICMD INCLUDE 'VPLOT.INC' C---------------------------------------------------------------------- C Since the scan calibration table file already exists, we do not C have to write out the header or the end of file record. C Record 1 = header C Records 2 - ISCAN+1 scan information C Records ISCAN+2 - ISCAN + 5 general information C Records ISCAN+6 - ISCAN+5+NFIT scan calibration information C C Each record is 64 bytes = 16, 4 byte words C C HEADER 2 bytes FLD1(lbs) = NUMBER OF SCANS C 2 FLD1(msb) = unused C 12 FLD2 - 4 = YEAR, MONTH, DAY C 16 FLD5 - 8 = FILTER LIST C 4 FLD9 = FORMAT ID (=1) C 16 FLD10-13 = NDF ratio C 4 FLD14 = COHERENT INT TIME (MS) C 8 FLD15-16 = unused C C SCANS C 2 bytes FLD1(lsb) = scan number C 2 FLD1(msb) = IOK = bad scan flag C 4 FLD2 = first record for scan, time record C 4 FLD3 = last data scan for that star C 4 FLD4 = record for dark count C 16 FLD5 - 8 = Adopted dark count for each filter C 16 FLD9 - 12 = Calibration factor for this scan C 4 FLD13 = NDF status ( 1=>in, 0=>out ) C 12 FLD14- 16 = unused C C information record 1 C FLD1 = NFIT C FLD2 - 3 = TCAL0, TCAL1 C FLD4 - 5 = HCAL0, HCAL1 C FLD6 - 7 = ZCAL0, ZCAL1 C FLD8 - 9 = MCAL0, MCAL1 C information record 2 C FLD1 - 4 = DVDP, slope of visibility versus phase C correlation, first lag C FLD5 = PHIMIN = delete points with phase rms < this. C FLD6 = PHIMAX = delete points with phase rms > this. C FLD7 = PHIREF = phase rms to correct visibilities C FLD8 = PHIPEAK1 phase rms histogram peak C FLD9 = PHIPEAK2 laser rms histogram peak C C Scan calibration inforation C fld1 = cal point number C fld2 - 5 = TCAL, HCAL, ZCAL, MCAL C C Auxiliary information records C fld1 = data name (a8) C fld2-16 = data C DO J =1, 16 TEMP(I) = 0 END DO WRITE(6,'(A)') ' Generating the scan calibration table.' C----------------------------------------------------------------------- C Write the header C I2SCAN = ISCAN I2OK = 0 FORMATID = 1 WRITE(3, REC=1,IOSTAT=IERR) I2SCAN, I2OK, YEAR, MONTH, DAY, $ (FILT(I),I=1,4), FORMATID, (NDFRATIO(I),I=1,4), $ COHINT, (TEMP(I),I=1,2) C----------------------------------------------------------------------- C Write out the scan calibration data. C DO I = 1, ISCAN I2SCAN = I I2OK = OKSCAN(I) WRITE(3,REC=I+1,IOSTAT=IERR) I2SCAN, I2OK, $ REC0(I), REC1(I), DREC(I), (D(I,J),J=1,4), $ (SCAL(I,J),J=1,4), NDFSTATUS(I), (TEMP(J),J=1,3) IF ( IERR .NE. 0 ) THEN WRITE(6,*) ' Error number ', IERR, $ ' writing scan calibration table. ' GO TO 900 END IF END DO C----------------------------------------------------------------------- C Write out the calibration information. C These values should not change C WRITE(3,REC=ISCAN+2) NFIT, TCAL0, TCAL1, HCAL0, HCAL1, $ ZCAL0, ZCAL1, MCAL0, MCAL1, $ (TEMP(J),J=1, 7) C C Point calibration information C WRITE(3, REC=ISCAN+3) DVDP, PHIMIN, PHIMAX, PHIREF, PHIPEAK, $ (TEMP(J),J=1,7) C C Save space for future expansion C WRITE(3, REC=ISCAN+4) (TEMP(J),J=1,16) WRITE(3, REC=ISCAN+5) (TEMP(J),J=1,16) C----------------------------------------------------------------------- C Write out the calibration tables. C DO I = 1, NFIT WRITE(3,REC=I+5+ISCAN, IOSTAT=IERR) $ (TCAL(I,J),J=1,4), (HCAL(I,J),J=1,4), $ (ZCAL(I,J),J=1,4), (MCAL(I,J),J=1,4) IF ( IERR .NE. 0 ) THEN WRITE(6,*) ' FATAL ERROR ', IERR, ' WRITING SCAN ', $ ' CALIBRATION TABLE ' WRITE(6,*) ' FILE CREATION NOT SUCESSFUL ' END IF END DO C C Create the auxiliary information records. C IREC = ISCAN + NFIT + 5 DO I = 1, 16 TEMP(I) = 0. END DO C----------------------------------------------------------------------- C Order of dark count fits IREC = IREC + 1 ICMD = 'D_ORDER ' READ ( ICMD, '(A8)' ) TEMP8 WRITE(3,REC=IREC, IOSTAT=IERR) TEMP8, $ D_ORDER, (TEMP(I),I=11,16) C----------------------------------------------------------------------- C Range of dark count fits IREC = IREC + 1 ICMD = 'D_RANGE ' READ( ICMD, '(A8)' ) TEMP8 WRITE(3,REC=IREC, IOSTAT=IERR) TEMP8, $ D_RANGE, IDUSK, IDAWN, (TEMP(I),I=13,16) C----------------------------------------------------------------------- C Dark count statistics rms and chi square IREC = IREC + 1 ICMD = 'D_STAT ' READ( ICMD, '(A8)' ) TEMP8 WRITE(3,REC=IREC, IOSTAT=IERR) TEMP8, $ D_RMS, D_CHISQ, (TEMP(I),I=11,16) C----------------------------------------------------------------------- C NCAL fit. system magnitude and color terms. C IREC = IREC + 1 ICMD = 'NCAL_FIT' READ( ICMD, '(A8)' ) TEMP8 WRITE(3,REC=IREC, IOSTAT=IERR) TEMP8, $ MAG0, CTERM, (TEMP(I),I=11,16) C----------------------------------------------------------------------- C NCAL statistics. rms IREC = IREC + 1 ICMD = 'NCAL_RMS' READ( ICMD, '(A8)' ) TEMP8 WRITE(3,REC=IREC, IOSTAT=IERR) TEMP8, $ NCAL_RMS, (TEMP(I),I=7,16) C----------------------------------------------------------------------- C CALIBRATION stars. IREC = IREC + 1 ICMD = 'NCALSTAR' READ( ICMD, '(A8)' ) TEMP8 WRITE(3,REC=IREC, IOSTAT=IERR) TEMP8, $ NCALSTAR, (CALSTAR(I),I=1,13) K = 13 DO WHILE ( K .LT. NCALSTAR ) IREC = IREC + 1 WRITE(3,REC=IREC, IOSTAT=IERR) (CALSTAR(I),I=K+1,K+16) K = K + 16 END DO C----------------------------------------------------------------------- C Summary comments ICMD = 'COMMENT ' READ( ICMD, '(A8)' ) TEMP8 DO K = 1, 5 READ( COMMENT(K), '(14A4)') (TEMP(I),I=3,16) IREC = IREC + 1 WRITE(3,REC=IREC, IOSTAT=IERR) TEMP8, (TEMP(I),I=3,16) END DO C----------------------------------------------------------------------- C Calibration scans. IREC = IREC + 1 ICMD = 'NCALSCAN' READ( ICMD, '(A8)' ) TEMP8 WRITE(3,REC=IREC, IOSTAT=IERR) TEMP8, $ NCALSCAN, (TEMP(I),I=7,16) C----------------------------------------------------------------------- C END of data record. IREC = IREC + 1 ICMD = 'END ' READ( ICMD, '(A8)' ) TEMP8 WRITE(3,REC=IREC, IOSTAT=IERR) TEMP8, (TEMP(I),I=3,16) C----------------------------------------------------------------------- 900 CONTINUE RETURN END