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