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