SUBROUTINE CAFOUT(WHERE) C C J.T. Armstrong 29 Dec 1990 C C This prints the results from program BINFIT to unit INMOD C (e.g., a model with comments), and a summary to unit OUTC. C Adapted for use with binary data from the Mt. Wilson C interferometer from BAFOUT by R.S. Simon C C----------------------------------------------------------------------- INCLUDE 'BINFIT.INC' CHARACTER*64 MODNAM, OLDMOD CHARACTER*24 MESSGE CHARACTER*80 HISTRY REAL*8 STAR INTEGER*4 VLBOPE, GETIN, IER, I, I1, I2, K, L, LEN1, IFORM, WHERE DATA STAR /'* '/ C WHERE=1 => Write summary to terminal IF (WHERE.EQ.1) GO TO 200 C Otherwise, write to output model file: C C Close the input model file. C INQUIRE (UNIT=INMOD, NAME=MODNAM) CLOSE (UNIT=INMOD,STATUS= 'DELETE') OLDMOD = MODNAM C C Open the output model file. C 17 CONTINUE IER = VLBOPE(INMOD, MODNAM, 'MODEL', 'NEW', MODNAM) IER = 1 IF (IER.NE.1) THEN IER = GETIN(MODNAM, ' Name for output model file: ', L) IF (IER.NE.1) CALL EXIT GOTO 17 END IF C C Write the header in the output model file. C CALL MKHIST('BINFIT', ' 8 Jan 91', HISTRY) ! 1st 2 args <= 16 char L = LEN1(HISTRY) WRITE (INMOD,1000) '! ',HISTRY(1:L) L = LEN1(INDSN) WRITE (INMOD,1000) '! Input data file: ',INDSN(1:L) L = LEN1(OLDMOD) WRITE (INMOD,1000) '! Input model file: ',OLDMOD(1:L) WRITE (INMOD,1001) STARNAME,DATE WRITE (INMOD,1000) '!' WRITE (INMOD,1000) '! Filter Width Reduced Degrees of' WRITE (INMOD,1000) '! Chi squared Freedom' C DO IG=1,NFILT WRITE (INMOD,1002) LAMBDA0(IG),DLAMBDA(IG),FCHISQ(IG), 1 NZVIS(IG)-NVPAR(IG) END DO WRITE (INMOD,1003) ' Reduced chi squared for all data: ',TCHISQ WRITE (INMOD,1004) ' Number of ind. data points: ',NZTOT WRITE (INMOD,1004) ' Degrees of freedom: ',NZTOT-NVPARTOT WRITE (INMOD,1000) '!' WRITE (INMOD,1000) '! Starting Model (v => variable parameter):' CALL CWRITEMD(INMOD,'!',PARMSTRT,0 0) WRITE (INMOD,1000) '!' IF (CONF.GT..5) THEN WRITE(INMOD,1005) CONF*100. WRITE(INMOD,1000) '! estimated from covariance matrix: ' CALL CWRITEMD(INMOD,'!',PUNCERT0,0,0) END IF WRITE (INMOD,1000) '! Final Model:' C Write the final model. CALL CWRITEMD(INMOD,' ',PARM,0,0) 200 CONTINUE ! Enter here for summary to terminal DO IC = 1, NCOMP DO IG = 1, NFILT DO K=1,8 IF (VARY(IC,IG,K)) THEN FLAG(IC,IG,K) = VARIED ELSE FLAG(IC,IG,K) = FIXED ENDIF END DO END DO END DO WRITE (OUTC,1014) STARNAME, ITER, METHOD(1:19) CALL CWRITEMD(OUTC,' ',PARM,0,0) C Generate comment on quality of fit: IF (TCHISQ .LT. 0.5) THEN MESSGE = 'Too good to be true!' ELSEIF (TCHISQ .LT. 1.) then MESSGE = 'Astoundingly good!' ELSEIF (TCHISQ .LT. 2.) THEN MESSGE = 'I''m impressed.' ELSEIF (TCHISQ .LT. 3.) THEN MESSGE = 'Good' ELSE MESSGE = ' ' ENDIF C WRITE (OUTC,1003) 'Total reduced chi squared: ',TCHISQ C RETURN C 1000 FORMAT (A,A,A,A) 1001 FORMAT ('! Source: ',A,'; Date: ',I6) 1002 FORMAT ('!',3X,F5.1,' nm',2X,F3.0,' nm',3X,F8.3,3X,I4) 1003 FORMAT ('!',(A), F8.3 ) 1004 FORMAT ('!',(A), I4 ) 1005 FORMAT ('! Levenberg-Marquardt uncertainties at',F5.1, 1 ' percent confidence level,') 1014 FORMAT (80('-')/' Source: ',A,' Iteration #',I3,6X,A) END