SUBROUTINE GET_SYS ( NPAR ) C C This subroutine determines the system calibration error. C The calibration error is added to the error in the calibrated C visibility of each scan and it is adjusted until the chi square C is equal to the number of degrees of freedom. C C NPAR is the number of parameters in the combined fit. C C SYS_CAL is the systematic error. C C 3 JAN 1991 David Mozurkewich C IMPLICIT UNDEFINED (A-Z) SAVE REAL *4 PI, RAD PARAMETER ( PI = 3.1415926535 ) PARAMETER ( RAD= 180. / PI ) INCLUDE 'VPLOT.INC' INTEGER *4 ICHAN, I, J, MASK(4), IBASE, NDATA, NPAR(ichan) REAL *4 YDATA(NFIT), ERROR(NFIT), CHISQ REAL *4 CRMS, CMEAN, DELTA, GRID_SIZE, DOF LOGICAL CAL_SCAN C----------------------------------------------------------------------- DATA MASK / 1, 2, 4, 8 / C----------------------------------------------------------------------- DO ICHAN = 1, 4 IBASE = BLIST(1) NDATA = 0 CMEAN = 0. CRMS = 0. CHISQ = 0. DO 450 I = 1, ISCAN IF ( IAND(OKSCAN(I),MASK(ICHAN)) .NE. 0 ) GO TO 450 IF ( IAND( BAD(I),MASK(ICHAN)) .NE. 0 ) GO TO 450 IF ( BASE(I) .NE. IBASE ) GO TO 450 CAL_SCAN = .FALSE. DO J = 1, NCALSTAR IF ( STAR(I) .EQ. CALSTAR(J) ) CAL_SCAN = .TRUE. END DO IF ( CAL_SCAN ) THEN NDATA = NDATA + 1 YDATA(NDATA) = VCAL(I,ICHAN) / VEST(I,ICHAN) ERROR(NDATA) = VSIG(I,ICHAN) / SCAL(I,ICHAN) $ / VEST(I,ICHAN) CMEAN = CMEAN + YDATA(NDATA) CRMS = CRMS + YDATA(NDATA)*YDATA(NDATA) DELTA = (YDATA(NDATA)-ERROR(NDATA)) / ERROR(NDATA) CHISQ = CHISQ + DELTA * DELTA END IF 450 CONTINUE IF ( NDATA .GT. 5 ) THEN CMEAN = CMEAN / FLOAT(NDATA) CRMS = SQRT( CRMS/FLOAT(NDATA) - CMEAN*CMEAN ) ELSE WRITE(6,*) ' ERROR NOT ENOUGH CALIBRATION SCANS ' SYS_CAL(ICHAN) = 0. GO TO 900 END IF SYS_CAL(ICHAN) = CRMS / 2.0 GRID_SIZE = CRMS / 2.0 DOF = NDATA - NPAR(ICHAN) DO I = 1, 10 CHISQ = 0. DO J = 1, NDATA DELTA = (YDATA(J)-1.) / (ERROR(J)+SYS_CAL(ICHAN) ) CHISQ = CHISQ + DELTA * DELTA END DO GRID_SIZE = GRID_SIZE / 2.0 IF ( CHISQ .GT. DOF ) THEN SYS_CAL(ICHAN) = SYS_CAL(ICHAN) + GRID_SIZE ELSE SYS_CAL(ICHAN) = SYS_CAL(ICHAN) - GRID_SIZE END IF END DO 900 CONTINUE END DO RETURN END