[2403] | 1 | *
|
---|
| 2 | * $Id: mnfixp.F,v 1.1.1.1 2003-06-11 14:18:27 cmv Exp $
|
---|
| 3 | *
|
---|
| 4 | * $Log: not supported by cvs2svn $
|
---|
| 5 | * Revision 1.1.1.1 1996/03/07 14:31:29 mclareni
|
---|
| 6 | * Minuit
|
---|
| 7 | *
|
---|
| 8 | *
|
---|
| 9 | #include "minuit/pilot.h"
|
---|
| 10 | SUBROUTINE MNFIXP(IINT,IERR)
|
---|
| 11 | #include "minuit/d506dp.inc"
|
---|
| 12 | CC removes parameter IINT from the internal (variable) parameter
|
---|
| 13 | CC list, and arranges the rest of the list to fill the hole.
|
---|
| 14 | CC
|
---|
| 15 | #include "minuit/d506cm.inc"
|
---|
| 16 | DIMENSION YY(MNI)
|
---|
| 17 | C first see if it can be done
|
---|
| 18 | IERR = 0
|
---|
| 19 | IF (IINT.GT.NPAR .OR. IINT.LE.0) THEN
|
---|
| 20 | IERR = 1
|
---|
| 21 | WRITE (ISYSWR,'(A,I4)')
|
---|
| 22 | + ' MINUIT ERROR. ARGUMENT TO MNFIXP=',IINT
|
---|
| 23 | GO TO 300
|
---|
| 24 | ENDIF
|
---|
| 25 | IEXT = NEXOFI(IINT)
|
---|
| 26 | IF (NPFIX .GE. MNI) THEN
|
---|
| 27 | IERR = 1
|
---|
| 28 | WRITE (ISYSWR,'(A,I4,A,I4)') ' MINUIT CANNOT FIX PARAMETER',
|
---|
| 29 | + IEXT,' MAXIMUM NUMBER THAT CAN BE FIXED IS',MNI
|
---|
| 30 | GO TO 300
|
---|
| 31 | ENDIF
|
---|
| 32 | C reduce number of variable parameters by one
|
---|
| 33 | NIOFEX(IEXT) = 0
|
---|
| 34 | NOLD = NPAR
|
---|
| 35 | NPAR = NPAR - 1
|
---|
| 36 | C save values in case parameter is later restored
|
---|
| 37 | NPFIX = NPFIX + 1
|
---|
| 38 | IPFIX(NPFIX) = IEXT
|
---|
| 39 | LC = IINT
|
---|
| 40 | XS(NPFIX) = X(LC)
|
---|
| 41 | XTS(NPFIX) = XT(LC)
|
---|
| 42 | DIRINS(NPFIX) = WERR(LC)
|
---|
| 43 | GRDS(NPFIX) = GRD(LC)
|
---|
| 44 | G2S(NPFIX) = G2(LC)
|
---|
| 45 | GSTEPS(NPFIX) = GSTEP(LC)
|
---|
| 46 | C shift values for other parameters to fill hole
|
---|
| 47 | DO 100 IK= IEXT+1, NU
|
---|
| 48 | IF (NIOFEX(IK) .GT. 0) THEN
|
---|
| 49 | LC = NIOFEX(IK) - 1
|
---|
| 50 | NIOFEX(IK) = LC
|
---|
| 51 | NEXOFI(LC) = IK
|
---|
| 52 | X(LC) = X(LC+1)
|
---|
| 53 | XT(LC) = XT(LC+1)
|
---|
| 54 | DIRIN(LC) = DIRIN(LC+1)
|
---|
| 55 | WERR(LC) = WERR(LC+1)
|
---|
| 56 | GRD(LC) = GRD(LC+1)
|
---|
| 57 | G2(LC) = G2(LC+1)
|
---|
| 58 | GSTEP(LC) = GSTEP(LC+1)
|
---|
| 59 | ENDIF
|
---|
| 60 | 100 CONTINUE
|
---|
| 61 | IF (ISW(2) .LE. 0) GO TO 300
|
---|
| 62 | C remove one row and one column from variance matrix
|
---|
| 63 | IF (NPAR .LE. 0) GO TO 300
|
---|
| 64 | DO 260 I= 1, NOLD
|
---|
| 65 | M = MAX(I,IINT)
|
---|
| 66 | N = MIN(I,IINT)
|
---|
| 67 | NDEX = M*(M-1)/2 + N
|
---|
| 68 | 260 YY(I)=VHMAT(NDEX)
|
---|
| 69 | YYOVER = 1.0/YY(IINT)
|
---|
| 70 | KNEW = 0
|
---|
| 71 | KOLD = 0
|
---|
| 72 | DO 294 I= 1, NOLD
|
---|
| 73 | DO 292 J= 1, I
|
---|
| 74 | KOLD = KOLD + 1
|
---|
| 75 | IF (J.EQ.IINT .OR. I.EQ.IINT) GO TO 292
|
---|
| 76 | KNEW = KNEW + 1
|
---|
| 77 | VHMAT(KNEW) = VHMAT(KOLD) - YY(J)*YY(I)*YYOVER
|
---|
| 78 | 292 CONTINUE
|
---|
| 79 | 294 CONTINUE
|
---|
| 80 | 300 RETURN
|
---|
| 81 | END
|
---|