| 1 | *
 | 
|---|
| 2 | * $Id: mnread.F,v 1.1.1.1 2003-06-11 14:18:29 cmv Exp $
 | 
|---|
| 3 | *
 | 
|---|
| 4 | * $Log: not supported by cvs2svn $
 | 
|---|
| 5 | * Revision 1.1.1.1  1996/03/07 14:31:31  mclareni
 | 
|---|
| 6 | * Minuit
 | 
|---|
| 7 | *
 | 
|---|
| 8 | *
 | 
|---|
| 9 | #include "minuit/pilot.h"
 | 
|---|
| 10 |       SUBROUTINE MNREAD(FCN,IFLGIN,IFLGUT,FUTIL)
 | 
|---|
| 11 | #include "minuit/d506dp.inc"
 | 
|---|
| 12 | CC        Called from MINUIT.  Reads all user input to MINUIT.
 | 
|---|
| 13 | CC     This routine is highly unstructured and defies normal logic.
 | 
|---|
| 14 | CC
 | 
|---|
| 15 | CC     IFLGIN indicates the function originally requested:
 | 
|---|
| 16 | CC           = 1: read one-line title
 | 
|---|
| 17 | CC             2: read parameter definitions
 | 
|---|
| 18 | CC             3: read MINUIT commands
 | 
|---|
| 19 | CC
 | 
|---|
| 20 | CC     IFLGUT= 1: reading terminated normally
 | 
|---|
| 21 | CC             2: end-of-data on input
 | 
|---|
| 22 | CC             3: unrecoverable read error
 | 
|---|
| 23 | CC             4: unable to process parameter requests
 | 
|---|
| 24 | CC             5: more than 100 incomprehensible commands
 | 
|---|
| 25 | CC internally,
 | 
|---|
| 26 | CC     IFLGDO indicates the subfunction to be performed on the next
 | 
|---|
| 27 | CC         input record: 1: read a one-line title
 | 
|---|
| 28 | CC                       2: read a parameter definition
 | 
|---|
| 29 | CC                       3: read a command
 | 
|---|
| 30 | CC                       4: read in covariance matrix
 | 
|---|
| 31 | CC     for example, when IFLGIN=3, but IFLGDO=1, then it should read
 | 
|---|
| 32 | CC       a title, but this was requested by a command, not by MINUIT.
 | 
|---|
| 33 | CC
 | 
|---|
| 34 | #include "minuit/d506cm.inc"
 | 
|---|
| 35 |       EXTERNAL FCN,FUTIL
 | 
|---|
| 36 |       CHARACTER  CRDBUF*80, CUPBUF*10
 | 
|---|
| 37 |       CHARACTER CPROMT(3)*40, CLOWER*26, CUPPER*26
 | 
|---|
| 38 |       LOGICAL LEOF
 | 
|---|
| 39 |       DATA CPROMT/' ENTER MINUIT TITLE, or "SET INPUT n" : ',
 | 
|---|
| 40 |      +            ' ENTER MINUIT PARAMETER DEFINITION:     ',
 | 
|---|
| 41 |      +            ' ENTER MINUIT COMMAND:                  '/
 | 
|---|
| 42 | C
 | 
|---|
| 43 |       DATA CLOWER/'abcdefghijklmnopqrstuvwxyz'/
 | 
|---|
| 44 |       DATA CUPPER/'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
 | 
|---|
| 45 | C
 | 
|---|
| 46 |       IFLGUT = 1
 | 
|---|
| 47 |       IFLGDO = IFLGIN
 | 
|---|
| 48 |       LEOF = .FALSE.
 | 
|---|
| 49 |       INCOMP = 0
 | 
|---|
| 50 | C                                           . . . . read next record
 | 
|---|
| 51 |    10 CONTINUE
 | 
|---|
| 52 |       IF (ISW(6) .EQ. 1) THEN
 | 
|---|
| 53 |            WRITE (ISYSWR,'(A)') CPROMT(IFLGDO)
 | 
|---|
| 54 |            IF (IFLGDO .EQ. 2)  LPHEAD = .FALSE.
 | 
|---|
| 55 |       ENDIF
 | 
|---|
| 56 |       CRDBUF = '   '
 | 
|---|
| 57 |       READ (ISYSRD,'(A)',ERR=500,END=45)  CRDBUF
 | 
|---|
| 58 | C
 | 
|---|
| 59 | C                 CUPBUF is the first few characters in upper case
 | 
|---|
| 60 |       CUPBUF(1:10) = CRDBUF(1:10)
 | 
|---|
| 61 |       DO 12 I= 1, 10
 | 
|---|
| 62 |       IF (CRDBUF(I:I) .EQ. '''') GO TO 13
 | 
|---|
| 63 |          DO 11 IC= 1, 26
 | 
|---|
| 64 |          IF (CRDBUF(I:I) .EQ. CLOWER(IC:IC)) CUPBUF(I:I)=CUPPER(IC:IC)
 | 
|---|
| 65 |    11    CONTINUE
 | 
|---|
| 66 |    12 CONTINUE
 | 
|---|
| 67 |    13 CONTINUE
 | 
|---|
| 68 | C                                           . .   preemptive commands
 | 
|---|
| 69 |       LEOF = .FALSE.
 | 
|---|
| 70 |       IF (INDEX(CUPBUF,'*EOF') .EQ. 1)    THEN
 | 
|---|
| 71 |          WRITE (ISYSWR,'(A,I3)') ' *EOF ENCOUNTERED ON UNIT NO.',ISYSRD
 | 
|---|
| 72 |          LPHEAD = .TRUE.
 | 
|---|
| 73 |          GO TO 50
 | 
|---|
| 74 |          ENDIF
 | 
|---|
| 75 |       IF (INDEX(CUPBUF,'SET INP') .EQ. 1)    THEN
 | 
|---|
| 76 |          ICOMND = ICOMND + 1
 | 
|---|
| 77 |          WRITE (ISYSWR, 21) ICOMND,CRDBUF(1:50)
 | 
|---|
| 78 |    21    FORMAT (' **********'/' **',I5,' **',A/' **********')
 | 
|---|
| 79 |          LPHEAD = .TRUE.
 | 
|---|
| 80 |          GO TO 50
 | 
|---|
| 81 |          ENDIF
 | 
|---|
| 82 |       GO TO 80
 | 
|---|
| 83 | C                                    . . hardware EOF on current ISYSRD
 | 
|---|
| 84 |    45 CRDBUF = '*EOF '
 | 
|---|
| 85 |       WRITE (ISYSWR,'(A,I3)') ' END OF DATA ON UNIT NO.',ISYSRD
 | 
|---|
| 86 | C                                     or SET INPUT command
 | 
|---|
| 87 |    50 CONTINUE
 | 
|---|
| 88 |          CALL MNSTIN(CRDBUF,IERR)
 | 
|---|
| 89 |          IF (IERR .EQ. 0)  GO TO 10
 | 
|---|
| 90 |          IF (IERR .EQ. 2)  THEN
 | 
|---|
| 91 |             IF (.NOT. LEOF) THEN
 | 
|---|
| 92 |                WRITE (ISYSWR,'(A,A/)') ' TWO CONSECUTIVE EOFs ON ',
 | 
|---|
| 93 |      +              'PRIMARY INPUT FILE WILL TERMINATE EXECUTION.'
 | 
|---|
| 94 |                LEOF = .TRUE.
 | 
|---|
| 95 |                GO TO 10
 | 
|---|
| 96 |             ENDIF
 | 
|---|
| 97 |          ENDIF
 | 
|---|
| 98 |          IFLGUT = IERR
 | 
|---|
| 99 |          GO TO 900
 | 
|---|
| 100 |    80 IF (IFLGDO .GT. 1) GO TO 100
 | 
|---|
| 101 | C                            read title        . . . . .   IFLGDO = 1
 | 
|---|
| 102 | C              if title is 'SET TITLE', skip and read again
 | 
|---|
| 103 |       IF (INDEX(CUPBUF,'SET TIT') .EQ. 1)  GO TO 10
 | 
|---|
| 104 |       CALL MNSETI(CRDBUF(1:50))
 | 
|---|
| 105 |       WRITE (ISYSWR,'(1X,A50)')  CTITL
 | 
|---|
| 106 |       WRITE (ISYSWR,'(1X,78(1H*))')
 | 
|---|
| 107 |          LPHEAD = .TRUE.
 | 
|---|
| 108 |       IF (IFLGIN .EQ. IFLGDO)  GO TO 900
 | 
|---|
| 109 |       IFLGDO = IFLGIN
 | 
|---|
| 110 |       GO TO 10
 | 
|---|
| 111 | C                            data record is not a title.
 | 
|---|
| 112 |   100 CONTINUE
 | 
|---|
| 113 |       IF (IFLGDO .GT. 2)  GO TO 300
 | 
|---|
| 114 | C                          expect parameter definitions.   IFLGDO = 2
 | 
|---|
| 115 | C              if parameter def is 'PARAMETER', skip and read again
 | 
|---|
| 116 |       IF (INDEX(CUPBUF,'PAR') .EQ. 1)  GO TO 10
 | 
|---|
| 117 | C              if line starts with SET TITLE, read a title first
 | 
|---|
| 118 |       IF (INDEX(CUPBUF,'SET TIT') .EQ. 1)  THEN
 | 
|---|
| 119 |          IFLGDO = 1
 | 
|---|
| 120 |          GO TO 10
 | 
|---|
| 121 |          ENDIF
 | 
|---|
| 122 | C                      we really have parameter definitions now
 | 
|---|
| 123 |       CALL MNPARS(CRDBUF,ICONDP)
 | 
|---|
| 124 |       IF (ICONDP .EQ. 0)  GO TO 10
 | 
|---|
| 125 | C          format error
 | 
|---|
| 126 |       IF (ICONDP .EQ. 1)  THEN
 | 
|---|
| 127 |          IF (ISW(6) .EQ. 1)  THEN
 | 
|---|
| 128 |            WRITE (ISYSWR,'(A)') ' FORMAT ERROR.  IGNORED.  ENTER AGAIN.'
 | 
|---|
| 129 |            GO TO 10
 | 
|---|
| 130 |          ELSE
 | 
|---|
| 131 |            WRITE (ISYSWR,'(A)') ' ERROR IN PARAMETER DEFINITION'
 | 
|---|
| 132 |            IFLGUT = 4
 | 
|---|
| 133 |            GO TO 900
 | 
|---|
| 134 |          ENDIF
 | 
|---|
| 135 |       ENDIF
 | 
|---|
| 136 | C                     ICONDP = 2            . . . end parameter requests
 | 
|---|
| 137 |       IF (ISW(5).GE.0 .AND. ISW(6).LT.1) WRITE (ISYSWR,'(4X,75(1H*))')
 | 
|---|
| 138 |       LPHEAD = .TRUE.
 | 
|---|
| 139 |       IF (IFLGIN .EQ. IFLGDO)  GO TO 900
 | 
|---|
| 140 |       IFLGDO = IFLGIN
 | 
|---|
| 141 |       GO TO 10
 | 
|---|
| 142 | C                                              . . . . .   IFLGDO = 3
 | 
|---|
| 143 | C                                           read commands
 | 
|---|
| 144 |   300 CONTINUE
 | 
|---|
| 145 |       CALL MNCOMD(FCN,CRDBUF,ICONDN,FUTIL)
 | 
|---|
| 146 | CC     ICONDN = 0: command executed normally
 | 
|---|
| 147 | CC              1: command is blank, ignored
 | 
|---|
| 148 | CC              2: command line unreadable, ignored
 | 
|---|
| 149 | CC              3: unknown command, ignored
 | 
|---|
| 150 | CC              4: abnormal termination (e.g., MIGRAD not converged)
 | 
|---|
| 151 | CC              5: command is a request to read PARAMETER definitions
 | 
|---|
| 152 | CC              6: 'SET INPUT' command
 | 
|---|
| 153 | CC              7: 'SET TITLE' command
 | 
|---|
| 154 | CC              8: 'SET COVAR' command
 | 
|---|
| 155 | CC              9: reserved
 | 
|---|
| 156 | CC             10: END command
 | 
|---|
| 157 | CC             11: EXIT or STOP command
 | 
|---|
| 158 | CC             12: RETURN command
 | 
|---|
| 159 |       IF (ICONDN .EQ. 2 .OR. ICONDN .EQ. 3) THEN
 | 
|---|
| 160 |          INCOMP = INCOMP + 1
 | 
|---|
| 161 |          IF (INCOMP .GT. 100) THEN
 | 
|---|
| 162 |             IFLGUT = 5
 | 
|---|
| 163 |             GO TO 900
 | 
|---|
| 164 |             ENDIF
 | 
|---|
| 165 |          ENDIF
 | 
|---|
| 166 | C                         parameter
 | 
|---|
| 167 |       IF (ICONDN .EQ. 5)  IFLGDO = 2
 | 
|---|
| 168 | C                         SET INPUT
 | 
|---|
| 169 |       IF (ICONDN .EQ. 6)  GO TO 50
 | 
|---|
| 170 | C                         SET TITLE
 | 
|---|
| 171 |       IF (ICONDN .EQ. 7)  IFLGDO = 1
 | 
|---|
| 172 | C                                        . . . . . . . . . . set covar
 | 
|---|
| 173 |       IF (ICONDN .EQ. 8) THEN
 | 
|---|
| 174 |          ICOMND = ICOMND + 1
 | 
|---|
| 175 |          WRITE (ISYSWR,405) ICOMND,CRDBUF(1:50)
 | 
|---|
| 176 |   405    FORMAT (1H ,10(1H*)/' **',I5,' **',A)
 | 
|---|
| 177 |          WRITE (ISYSWR, '(1H ,10(1H*))' )
 | 
|---|
| 178 |          NPAR2 = NPAR*(NPAR+1)/2
 | 
|---|
| 179 |          READ (ISYSRD,420,ERR=500,END=45)  (VHMAT(I),I=1,NPAR2)
 | 
|---|
| 180 |   420    FORMAT (BN,7E11.4,3X)
 | 
|---|
| 181 |          ISW(2) = 3
 | 
|---|
| 182 |          DCOVAR = 0.0
 | 
|---|
| 183 |          IF (ISW(5) .GE. 0)  CALL MNMATU(1)
 | 
|---|
| 184 |          IF (ISW(5) .GE. 1)  CALL MNPRIN(2,AMIN)
 | 
|---|
| 185 |          GO TO 10
 | 
|---|
| 186 |          ENDIF
 | 
|---|
| 187 |       IF (ICONDN .LT. 10) GO TO 10
 | 
|---|
| 188 |       GO TO 900
 | 
|---|
| 189 | C                                              . . . . error conditions
 | 
|---|
| 190 |   500 IFLGUT = 3
 | 
|---|
| 191 |   900 RETURN
 | 
|---|
| 192 |       END
 | 
|---|