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