source: Sophya/trunk/SophyaExt/CodeMinuit/code/mnscan.F@ 3056

Last change on this file since 3056 was 2403, checked in by cmv, 22 years ago

Creation du module de code source de MINUIT (CERNLIB) extrait par CMV

cmv 11/06/2003

File size: 3.8 KB
Line 
1*
2* $Id: mnscan.F,v 1.1.1.1 2003-06-11 14:18:29 cmv Exp $
3*
4* $Log: not supported by cvs2svn $
5* Revision 1.2 1996/03/15 18:02:51 james
6* Modified Files:
7* mnderi.F eliminate possible division by zero
8* mnexcm.F suppress print on STOP when print flag=-1
9* set FVAL3 to flag if FCN already called with IFLAG=3
10* mninit.F set version 96.03
11* mnlims.F remove arguments, not needed
12* mnmigr.F VLEN -> LENV in debug print statement
13* mnparm.F move call to MNRSET to after NPAR redefined, to zero all
14* mnpsdf.F eliminate possible division by zero
15* mnscan.F suppress printout when print flag =-1
16* mnset.F remove arguments in call to MNLIMS
17* mnsimp.F fix CSTATU so status is PROGRESS only if new minimum
18* mnvert.F eliminate possible division by zero
19*
20* Revision 1.1.1.1 1996/03/07 14:31:31 mclareni
21* Minuit
22*
23*
24#include "minuit/pilot.h"
25 SUBROUTINE MNSCAN(FCN,FUTIL)
26#include "minuit/d506dp.inc"
27CC Scans the values of FCN as a function of one parameter
28CC and plots the resulting values as a curve using MNPLOT.
29CC It may be called to scan one parameter or all parameters.
30CC retains the best function and parameter values found.
31#include "minuit/d506cm.inc"
32 EXTERNAL FCN,FUTIL
33 XLREQ = MIN(WORD7(3),WORD7(4))
34 XHREQ = MAX(WORD7(3),WORD7(4))
35 NCALL = WORD7(2) + 0.01
36 IF (NCALL .LE. 1) NCALL = 41
37 IF (NCALL .GT. MAXCPT) NCALL = MAXCPT
38 NCCALL = NCALL
39 IF (AMIN .EQ. UNDEFI) CALL MNAMIN(FCN,FUTIL)
40 IPARWD = WORD7(1) + 0.1
41 IPAR = MAX(IPARWD, 0)
42 IINT = NIOFEX(IPAR)
43 CSTATU = 'NO CHANGE'
44 IF (IPARWD .GT. 0) GO TO 200
45C
46C equivalent to a loop over parameters requested
47 100 IPAR = IPAR + 1
48 IF (IPAR .GT. NU) GO TO 900
49 IINT = NIOFEX(IPAR)
50 IF (IINT .LE. 0) GO TO 100
51C set up range for parameter IPAR
52 200 CONTINUE
53 UBEST = U(IPAR)
54 XPT(1) = UBEST
55 YPT(1) = AMIN
56 CHPT(1)= ' '
57 XPT(2) = UBEST
58 YPT(2) = AMIN
59 CHPT(2)= 'X'
60 NXYPT = 2
61 IF (NVARL(IPAR) .GT. 1) GO TO 300
62C no limits on parameter
63 IF (XLREQ .EQ. XHREQ) GO TO 250
64 UNEXT = XLREQ
65 STEP = (XHREQ-XLREQ)/FLOAT(NCALL-1)
66 GO TO 500
67 250 CONTINUE
68 XL = UBEST - WERR(IINT)
69 XH = UBEST+ WERR(IINT)
70 CALL MNBINS(XL,XH,NCALL, UNEXT,UHIGH,NBINS,STEP)
71 NCCALL = NBINS + 1
72 GO TO 500
73C limits on parameter
74 300 CONTINUE
75 IF (XLREQ .EQ. XHREQ) GO TO 350
76 XL = MAX(XLREQ,ALIM(IPAR))
77 XH = MIN(XHREQ,BLIM(IPAR))
78 IF (XL .GE. XH) GO TO 700
79 UNEXT = XL
80 STEP = (XH-XL)/FLOAT(NCALL-1)
81 GO TO 500
82 350 CONTINUE
83 UNEXT = ALIM(IPAR)
84 STEP = (BLIM(IPAR)-ALIM(IPAR))/FLOAT(NCALL-1)
85C main scanning loop over parameter IPAR
86 500 CONTINUE
87 DO 600 ICALL = 1, NCCALL
88 U(IPAR) = UNEXT
89 NPARX = NPAR
90 CALL FCN(NPARX,GIN,FNEXT,U,4,FUTIL)
91 NFCN = NFCN + 1
92 NXYPT = NXYPT + 1
93 XPT(NXYPT) = UNEXT
94 YPT(NXYPT) = FNEXT
95 CHPT(NXYPT) = '*'
96 IF (FNEXT .LT. AMIN) THEN
97 AMIN = FNEXT
98 UBEST = UNEXT
99 CSTATU= 'IMPROVED '
100 ENDIF
101 530 CONTINUE
102 UNEXT = UNEXT + STEP
103 600 CONTINUE
104C finished with scan of parameter IPAR
105 U(IPAR) = UBEST
106 CALL MNEXIN(X)
107 IF (ISW(5) .GE. 1) THEN
108 WRITE (ISYSWR,1001) NEWPAG,IPAR,CPNAM(IPAR)
109 NUNIT = ISYSWR
110 CALL MNPLOT(XPT,YPT,CHPT,NXYPT,NUNIT,NPAGWD,NPAGLN)
111 ENDIF
112 GO TO 800
113 700 CONTINUE
114 WRITE (ISYSWR,1000) IPAR
115 800 CONTINUE
116 IF (IPARWD .LE. 0) GO TO 100
117C finished with all parameters
118 900 CONTINUE
119 IF (ISW(5) .GE. 0) CALL MNPRIN(5,AMIN)
120 RETURN
121 1000 FORMAT (46H REQUESTED RANGE OUTSIDE LIMITS FOR PARAMETER ,I3/)
122 1001 FORMAT (I1,'SCAN OF PARAMETER NO.',I3,3H, ,A10)
123 END
Note: See TracBrowser for help on using the repository browser.