| [2403] | 1 | *
 | 
|---|
 | 2 | * $Id: mnmnot.F,v 1.1.1.1 2003-06-11 14:18:28 cmv Exp $
 | 
|---|
 | 3 | *
 | 
|---|
 | 4 | * $Log: not supported by cvs2svn $
 | 
|---|
 | 5 | * Revision 1.1.1.1  1996/03/07 14:31:30  mclareni
 | 
|---|
 | 6 | * Minuit
 | 
|---|
 | 7 | *
 | 
|---|
 | 8 | *
 | 
|---|
 | 9 | #include "minuit/pilot.h"
 | 
|---|
 | 10 |       SUBROUTINE MNMNOT(FCN,ILAX,ILAX2,VAL2PL,VAL2MI,FUTIL)
 | 
|---|
 | 11 | #include "minuit/d506dp.inc"
 | 
|---|
 | 12 | CC        Performs a MINOS error analysis on one parameter.
 | 
|---|
 | 13 | CC        The parameter ILAX is varied, and the minimum of the
 | 
|---|
 | 14 | CC        function with respect to the other parameters is followed
 | 
|---|
 | 15 | CC        until it crosses the value FMIN+UP.
 | 
|---|
 | 16 | CC
 | 
|---|
 | 17 | #include "minuit/d506cm.inc"
 | 
|---|
 | 18 |       EXTERNAL FCN,FUTIL
 | 
|---|
 | 19 |       DIMENSION XDEV(MNI),W(MNI),GCC(MNI)
 | 
|---|
 | 20 |       CHARACTER*4 CPOS,CNEG,CSIG
 | 
|---|
 | 21 |       PARAMETER (CPOS='POSI',CNEG='NEGA')
 | 
|---|
 | 22 | C                                        . . save and prepare start vals
 | 
|---|
 | 23 |       ISW2 = ISW(2)
 | 
|---|
 | 24 |       ISW4 = ISW(4)
 | 
|---|
 | 25 |       SIGSAV = EDM
 | 
|---|
 | 26 |       ISTRAV = ISTRAT
 | 
|---|
 | 27 |       DC = DCOVAR
 | 
|---|
 | 28 |       LNEWMN = .FALSE.
 | 
|---|
 | 29 |       APSI  = EPSI*0.5
 | 
|---|
 | 30 |       ABEST=AMIN
 | 
|---|
 | 31 |       MPAR=NPAR
 | 
|---|
 | 32 |       NFMXIN = NFCNMX
 | 
|---|
 | 33 |       DO 125 I= 1, MPAR
 | 
|---|
 | 34 |   125 XT(I) = X(I)
 | 
|---|
 | 35 |       DO 130 J= 1, MPAR*(MPAR+1)/2
 | 
|---|
 | 36 |   130 VTHMAT(J) = VHMAT(J)
 | 
|---|
 | 37 |       DO 135 I= 1, MPAR
 | 
|---|
 | 38 |       GCC(I) = GLOBCC(I)
 | 
|---|
 | 39 |   135 W(I) = WERR(I)
 | 
|---|
 | 40 |       IT = NIOFEX(ILAX)
 | 
|---|
 | 41 |       ERP(IT) = 0.
 | 
|---|
 | 42 |       ERN(IT) = 0.
 | 
|---|
 | 43 |       CALL MNINEX(XT)
 | 
|---|
 | 44 |       UT = U(ILAX)
 | 
|---|
 | 45 |       IF (NVARL(ILAX) .EQ. 1) THEN
 | 
|---|
 | 46 |          ALIM(ILAX) = UT -100.*W(IT)
 | 
|---|
 | 47 |          BLIM(ILAX) = UT +100.*W(IT)
 | 
|---|
 | 48 |          ENDIF
 | 
|---|
 | 49 |       NDEX = IT*(IT+1)/2
 | 
|---|
 | 50 |       XUNIT = SQRT(UP/VTHMAT(NDEX))
 | 
|---|
 | 51 |       MARC = 0
 | 
|---|
 | 52 |       DO 162 I= 1, MPAR
 | 
|---|
 | 53 |       IF (I .EQ. IT)  GO TO 162
 | 
|---|
 | 54 |       MARC = MARC + 1
 | 
|---|
 | 55 |          IMAX = MAX(IT,I)
 | 
|---|
 | 56 |          INDX = IMAX*(IMAX-1)/2 + MIN(IT,I)
 | 
|---|
 | 57 |       XDEV(MARC) = XUNIT*VTHMAT(INDX)
 | 
|---|
 | 58 |   162 CONTINUE
 | 
|---|
 | 59 | C                           fix the parameter in question
 | 
|---|
 | 60 |       CALL MNFIXP (IT,IERR)
 | 
|---|
 | 61 |       IF (IERR .GT. 0)  THEN
 | 
|---|
 | 62 |          WRITE (ISYSWR,'(A,I5,A,I5)')
 | 
|---|
 | 63 |      +    ' MINUIT ERROR. CANNOT FIX PARAMETER',ILAX,'    INTERNAL',IT
 | 
|---|
 | 64 |          GO TO 700
 | 
|---|
 | 65 |       ENDIF
 | 
|---|
 | 66 | C                       . . . . . Nota Bene: from here on, NPAR=MPAR-1
 | 
|---|
 | 67 | C      Remember: MNFIXP squeezes IT out of X, XT, WERR, and VHMAT,
 | 
|---|
 | 68 | C                                                    not W, VTHMAT
 | 
|---|
 | 69 |       DO 500 ISIG= 1,2
 | 
|---|
 | 70 |       IF (ISIG .EQ. 1) THEN
 | 
|---|
 | 71 |          SIG = 1.0
 | 
|---|
 | 72 |          CSIG = CPOS
 | 
|---|
 | 73 |       ELSE
 | 
|---|
 | 74 |          SIG = -1.0
 | 
|---|
 | 75 |          CSIG = CNEG
 | 
|---|
 | 76 |       ENDIF
 | 
|---|
 | 77 | C                                        . sig=sign of error being calcd
 | 
|---|
 | 78 |       IF (ISW(5) .GT. 1) WRITE (ISYSWR,806)  CSIG,ILAX,CPNAM(ILAX)
 | 
|---|
 | 79 |   806 FORMAT (/' DETERMINATION OF ',A4,'TIVE MINOS ERROR FOR PARAMETER',
 | 
|---|
 | 80 |      +    I3, 2X ,A)
 | 
|---|
 | 81 |       IF (ISW(2).LE.0) CALL MNWARN('D','MINOS','NO COVARIANCE MATRIX.')
 | 
|---|
 | 82 |       NLIMIT = NFCN + NFMXIN
 | 
|---|
 | 83 |       ISTRAT = MAX(ISTRAV-1,0)
 | 
|---|
 | 84 |       DU1 = W(IT)
 | 
|---|
 | 85 |       U(ILAX) = UT + SIG*DU1
 | 
|---|
 | 86 |       U(ILAX) = MIN(U(ILAX),BLIM(ILAX))
 | 
|---|
 | 87 |       U(ILAX) = MAX(U(ILAX),ALIM(ILAX))
 | 
|---|
 | 88 |       DELU = U(ILAX) - UT
 | 
|---|
 | 89 | C         stop if already at limit with negligible step size
 | 
|---|
 | 90 |       IF (ABS(DELU)/(ABS(UT)+ABS(U(ILAX))) .LT. EPSMAC)  GO TO 440
 | 
|---|
 | 91 |       FAC = DELU/W(IT)
 | 
|---|
 | 92 |          DO 185 I= 1, NPAR
 | 
|---|
 | 93 |   185    X(I) = XT(I) + FAC*XDEV(I)
 | 
|---|
 | 94 |       IF (ISW(5) .GT. 1) WRITE (ISYSWR,801)  ILAX,UT,DELU,U(ILAX)
 | 
|---|
 | 95 |   801 FORMAT (/' PARAMETER',I4,' SET TO',E11.3,' + ',E10.3,' = ',E12.3)
 | 
|---|
 | 96 | C                                        loop to hit AMIN+UP
 | 
|---|
 | 97 |       KE1CR = ILAX
 | 
|---|
 | 98 |       KE2CR = 0
 | 
|---|
 | 99 |       XMIDCR = U(ILAX)
 | 
|---|
 | 100 |       XDIRCR = DELU
 | 
|---|
 | 101 | C
 | 
|---|
 | 102 |       AMIN = ABEST
 | 
|---|
 | 103 |       NFCNMX = NLIMIT - NFCN
 | 
|---|
 | 104 |       CALL MNCROS(FCN,AOPT,IERCR,FUTIL)
 | 
|---|
 | 105 |       IF (ABEST-AMIN .GT. 0.01*UP)  GO TO 650
 | 
|---|
 | 106 |       IF (IERCR .EQ. 1)  GO TO 440
 | 
|---|
 | 107 |       IF (IERCR .EQ. 2)  GO TO 450
 | 
|---|
 | 108 |       IF (IERCR .EQ. 3)  GO TO 460
 | 
|---|
 | 109 | C                                        . error successfully calculated
 | 
|---|
 | 110 |       EROS = XMIDCR-UT + AOPT*XDIRCR
 | 
|---|
 | 111 |       IF (ISW(5) .GT. 1) WRITE (ISYSWR,808)  CSIG,ILAX,CPNAM(ILAX),EROS
 | 
|---|
 | 112 |   808 FORMAT (/9X,4HTHE ,A4,  29HTIVE MINOS ERROR OF PARAMETER,I3,   2H
 | 
|---|
 | 113 |      +, ,A10,      4H, IS ,E12.4)
 | 
|---|
 | 114 |       GO TO 480
 | 
|---|
 | 115 | C                                        . . . . . . . . failure returns
 | 
|---|
 | 116 |   440 IF (ISW(5) .GE. 1) WRITE(ISYSWR,807)  CSIG,ILAX,CPNAM(ILAX)
 | 
|---|
 | 117 |   807 FORMAT (5X,'THE ',A4,'TIVE MINOS ERROR OF PARAMETER',I3,', ',A,
 | 
|---|
 | 118 |      +', EXCEEDS ITS LIMIT.'/)
 | 
|---|
 | 119 |       EROS = UNDEFI
 | 
|---|
 | 120 |       GO TO 480
 | 
|---|
 | 121 |   450 IF (ISW(5) .GE. 1) WRITE (ISYSWR, 802)  CSIG,ILAX,NFMXIN
 | 
|---|
 | 122 |   802 FORMAT (9X,'THE ',A,'TIVE MINOS ERROR',I4,' REQUIRES MORE THAN',
 | 
|---|
 | 123 |      +   I5,' FUNCTION CALLS.'/)
 | 
|---|
 | 124 |       EROS = 0.
 | 
|---|
 | 125 |       GO TO 480
 | 
|---|
 | 126 |   460 IF (ISW(5) .GE. 1) WRITE (ISYSWR, 805) CSIG,ILAX
 | 
|---|
 | 127 |   805 FORMAT (25X,A,'TIVE MINOS ERROR NOT CALCULATED FOR PARAMETER',I4/)
 | 
|---|
 | 128 |       EROS = 0.
 | 
|---|
 | 129 | C
 | 
|---|
 | 130 |   480 IF (ISW(5) .GT. 1) WRITE (ISYSWR,'(5X, 74(1H*))')
 | 
|---|
 | 131 |       IF (SIG .LT. ZERO)  THEN
 | 
|---|
 | 132 |          ERN(IT) = EROS
 | 
|---|
 | 133 |          IF (ILAX2.GT.0 .AND. ILAX2.LE.NU)  VAL2MI = U(ILAX2)
 | 
|---|
 | 134 |       ELSE
 | 
|---|
 | 135 |          ERP(IT) = EROS
 | 
|---|
 | 136 |          IF (ILAX2.GT.0 .AND. ILAX2.LE.NU)  VAL2PL = U(ILAX2)
 | 
|---|
 | 137 |       ENDIF
 | 
|---|
 | 138 |   500 CONTINUE
 | 
|---|
 | 139 | C                                        . . parameter finished. reset v
 | 
|---|
 | 140 | C                       normal termination
 | 
|---|
 | 141 |       ITAUR = 1
 | 
|---|
 | 142 |       CALL MNFREE(1)
 | 
|---|
 | 143 |       DO 550 J= 1, MPAR*(MPAR+1)/2
 | 
|---|
 | 144 |   550 VHMAT(J) = VTHMAT(J)
 | 
|---|
 | 145 |       DO 595 I= 1, MPAR
 | 
|---|
 | 146 |       WERR(I) = W(I)
 | 
|---|
 | 147 |       GLOBCC(I) = GCC(I)
 | 
|---|
 | 148 |   595 X(I) = XT(I)
 | 
|---|
 | 149 |       CALL MNINEX (X)
 | 
|---|
 | 150 |       EDM = SIGSAV
 | 
|---|
 | 151 |       AMIN = ABEST
 | 
|---|
 | 152 |       ISW(2) = ISW2
 | 
|---|
 | 153 |       ISW(4) = ISW4
 | 
|---|
 | 154 |       DCOVAR = DC
 | 
|---|
 | 155 |       GO TO 700
 | 
|---|
 | 156 | C                       new minimum
 | 
|---|
 | 157 |   650 LNEWMN = .TRUE.
 | 
|---|
 | 158 |       ISW(2) = 0
 | 
|---|
 | 159 |       DCOVAR = 1.
 | 
|---|
 | 160 |       ISW(4) = 0
 | 
|---|
 | 161 |       SAV = U(ILAX)
 | 
|---|
 | 162 |       ITAUR = 1
 | 
|---|
 | 163 |       CALL MNFREE(1)
 | 
|---|
 | 164 |       U(ILAX) = SAV
 | 
|---|
 | 165 |       CALL MNEXIN(X)
 | 
|---|
 | 166 |       EDM = BIGEDM
 | 
|---|
 | 167 | C                       in any case
 | 
|---|
 | 168 |   700 CONTINUE
 | 
|---|
 | 169 |       ITAUR = 0
 | 
|---|
 | 170 |       NFCNMX = NFMXIN
 | 
|---|
 | 171 |       ISTRAT = ISTRAV
 | 
|---|
 | 172 |       RETURN
 | 
|---|
 | 173 |       END
 | 
|---|