[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
|
---|