source: Sophya/trunk/SophyaExt/CodeMinuit/code/mncntr.F@ 2403

Last change on this file since 2403 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: 5.0 KB
Line 
1*
2* $Id: mncntr.F,v 1.1.1.1 2003-06-11 14:18:26 cmv Exp $
3*
4* $Log: not supported by cvs2svn $
5* Revision 1.1.1.1 1996/03/07 14:31:28 mclareni
6* Minuit
7*
8*
9#include "minuit/pilot.h"
10 SUBROUTINE MNCNTR(FCN,KE1,KE2,IERRF,FUTIL)
11#include "minuit/d506dp.inc"
12CC to print function contours in two variables, on line printer
13CC
14#include "minuit/d506cm.inc"
15 EXTERNAL FCN,FUTIL
16 PARAMETER (NUMBCS=20,NXMAX=115)
17 DIMENSION CONTUR(NUMBCS), FCNA(NXMAX),FCNB(NXMAX)
18 CHARACTER CLABEL*(NUMBCS)
19 CHARACTER CHLN*(NXMAX),CHMID*(NXMAX),CHZERO*(NXMAX)
20 DATA CLABEL/'0123456789ABCDEFGHIJ'/
21C input arguments: parx, pary, devs, ngrid
22 IF (KE1.LE.0 .OR. KE2.LE.0) GO TO 1350
23 IF (KE1.GT.NU .OR. KE2.GT.NU) GO TO 1350
24 KI1 = NIOFEX(KE1)
25 KI2 = NIOFEX(KE2)
26 IF (KI1.LE.0 .OR. KI2.LE.0) GO TO 1350
27 IF (KI1 .EQ. KI2) GO TO 1350
28C
29 IF (ISW(2) .LT. 1) THEN
30 CALL MNHESS(FCN,FUTIL)
31 CALL MNWERR
32 ENDIF
33 NPARX = NPAR
34 XSAV = U(KE1)
35 YSAV = U(KE2)
36 DEVS = WORD7(3)
37 IF (DEVS .LE. ZERO) DEVS=2.
38 XLO = U(KE1) - DEVS*WERR(KI1)
39 XUP = U(KE1) + DEVS*WERR(KI1)
40 YLO = U(KE2) - DEVS*WERR(KI2)
41 YUP = U(KE2) + DEVS*WERR(KI2)
42 NGRID = WORD7(4)
43 IF (NGRID .LE. 0) THEN
44 NGRID=25
45 NX = MIN(NPAGWD-15,NGRID)
46 NY = MIN(NPAGLN-7, NGRID)
47 ELSE
48 NX = NGRID
49 NY = NGRID
50 ENDIF
51 IF (NX .LT. 11) NX=11
52 IF (NY .LT. 11) NY=11
53 IF (NX .GE. NXMAX) NX=NXMAX-1
54C ask if parameter outside limits
55 IF (NVARL(KE1) .GT. 1) THEN
56 IF (XLO .LT. ALIM(KE1)) XLO = ALIM(KE1)
57 IF (XUP .GT. BLIM(KE1)) XUP = BLIM(KE1)
58 ENDIF
59 IF (NVARL(KE2) .GT. 1) THEN
60 IF (YLO .LT. ALIM(KE2)) YLO = ALIM(KE2)
61 IF (YUP .GT. BLIM(KE2)) YUP = BLIM(KE2)
62 ENDIF
63 BWIDX = (XUP-XLO)/REAL(NX)
64 BWIDY = (YUP-YLO)/REAL(NY)
65 IXMID = INT((XSAV-XLO)*REAL(NX)/(XUP-XLO)) + 1
66 IF (AMIN .EQ. UNDEFI) CALL MNAMIN(FCN,FUTIL)
67 DO 185 I= 1, NUMBCS
68 CONTUR(I) = AMIN + UP*FLOAT(I-1)**2
69 185 CONTINUE
70 CONTUR(1) = CONTUR(1) + 0.01*UP
71C fill FCNB to prepare first row, and find column zero
72 U(KE2) = YUP
73 IXZERO = 0
74 XB4 = ONE
75 DO 200 IX= 1, NX+1
76 U(KE1) = XLO + REAL(IX-1)*BWIDX
77 CALL FCN(NPARX,GIN,FF,U,4,FUTIL)
78 FCNB(IX) = FF
79 IF (XB4.LT.ZERO .AND. U(KE1).GT.ZERO) IXZERO = IX-1
80 XB4 = U(KE1)
81 CHMID(IX:IX) = '*'
82 CHZERO(IX:IX)= '-'
83 200 CONTINUE
84 WRITE (ISYSWR,'(A,I3,A,A)') ' Y-AXIS: PARAMETER ',
85 + KE2,': ',CPNAM(KE2)
86 IF (IXZERO .GT. 0) THEN
87 CHZERO(IXZERO:IXZERO) = '+'
88 CHLN = ' '
89 WRITE (ISYSWR,'(12X,A,A)') CHLN(1:IXZERO),'X=0'
90 ENDIF
91C loop over rows
92 DO 280 IY= 1, NY
93 UNEXT = U(KE2) - BWIDY
94C prepare this line's background pattern for contour
95 CHLN = ' '
96 CHLN(IXMID:IXMID) = '*'
97 IF (IXZERO .NE. 0) CHLN(IXZERO:IXZERO) = ':'
98 IF (U(KE2).GT.YSAV .AND. UNEXT.LT.YSAV) CHLN=CHMID
99 IF (U(KE2).GT.ZERO .AND. UNEXT.LT.ZERO) CHLN=CHZERO
100 U(KE2) = UNEXT
101 YLABEL = U(KE2) + 0.5*BWIDY
102C move FCNB to FCNA and fill FCNB with next row
103 DO 220 IX= 1, NX+1
104 FCNA(IX) = FCNB(IX)
105 U(KE1) = XLO + REAL(IX-1)*BWIDX
106 CALL FCN(NPARX,GIN,FF,U,4,FUTIL)
107 FCNB(IX) = FF
108 220 CONTINUE
109C look for contours crossing the FCNxy squares
110 DO 250 IX= 1, NX
111 FMX = MAX(FCNA(IX),FCNB(IX),FCNA(IX+1),FCNB(IX+1))
112 FMN = MIN(FCNA(IX),FCNB(IX),FCNA(IX+1),FCNB(IX+1))
113 DO 230 ICS= 1, NUMBCS
114 IF (CONTUR(ICS) .GT. FMN) GO TO 240
115 230 CONTINUE
116 GO TO 250
117 240 IF (CONTUR(ICS) .LT. FMX) CHLN(IX:IX)=CLABEL(ICS:ICS)
118 250 CONTINUE
119C print a row of the contour plot
120 WRITE (ISYSWR,'(1X,G12.4,1X,A)') YLABEL,CHLN(1:NX)
121 280 CONTINUE
122C contours printed, label x-axis
123 CHLN = ' '
124 CHLN( 1: 1) = 'I'
125 CHLN(IXMID:IXMID) = 'I'
126 CHLN(NX:NX) = 'I'
127 WRITE (ISYSWR,'(14X,A)') CHLN(1:NX)
128C the hardest of all: print x-axis scale!
129 CHLN = ' '
130 IF (NX .LE. 26) THEN
131 NL = MAX(NX-12,2)
132 NL2 = NL/2
133 WRITE (ISYSWR,'(8X,G12.4,A,G12.4)') XLO,CHLN(1:NL),XUP
134 WRITE (ISYSWR,'(14X,A,G12.4)') CHLN(1:NL2),XSAV
135 ELSE
136 NL = MAX(NX-24,2)/2
137 NL2 = NL
138 IF (NL .GT. 10) NL2=NL-6
139 WRITE (ISYSWR,'(8X,G12.4,A,G12.4,A,G12.4)') XLO,
140 + CHLN(1:NL),XSAV,CHLN(1:NL2),XUP
141 ENDIF
142 WRITE (ISYSWR,'(6X,A,I3,A,A,A,G12.4)') ' X-AXIS: PARAMETER',
143 + KE1,': ',CPNAM(KE1),' ONE COLUMN=',BWIDX
144 WRITE (ISYSWR,'(A,G12.4,A,G12.4,A)') ' FUNCTION VALUES: F(I)=',
145 + AMIN,' +',UP,' *I**2'
146C finished. reset input values
147 U(KE1) = XSAV
148 U(KE2) = YSAV
149 IERRF = 0
150 RETURN
151 1350 WRITE (ISYSWR,1351)
152 1351 FORMAT (' INVALID PARAMETER NUMBER(S) REQUESTED. IGNORED.' /)
153 IERRF = 1
154 RETURN
155 END
Note: See TracBrowser for help on using the repository browser.