source: Sophya/trunk/SophyaExt/CodeMinuit/code/mnplot.F@ 4049

Last change on this file since 4049 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: 4.4 KB
Line 
1*
2* $Id: mnplot.F,v 1.1.1.1 2003-06-11 14:18:28 cmv Exp $
3*
4* $Log: not supported by cvs2svn $
5* Revision 1.1.1.1 1996/03/07 14:31:31 mclareni
6* Minuit
7*
8*
9#include "minuit/pilot.h"
10 SUBROUTINE MNPLOT(XPT,YPT,CHPT,NXYPT,NUNIT,NPAGWD,NPAGLN)
11#include "minuit/d506dp.inc"
12CC plots points in array xypt onto one page with labelled axes
13CC NXYPT is the number of points to be plotted
14CC XPT(I) = x-coord. of ith point
15CC YPT(I) = y-coord. of ith point
16CC CHPT(I) = character to be plotted at this position
17CC the input point arrays XPT, YPT, CHPT are destroyed.
18CC
19 DIMENSION XPT(*), YPT(*)
20 CHARACTER*1 CHPT(*) , CHSAV, CHBEST, CDOT, CSLASH, CBLANK
21 PARAMETER (MAXWID=100)
22 CHARACTER CLINE*100, CHMESS*30
23 DIMENSION XVALUS(12)
24 LOGICAL OVERPR
25 DATA CDOT,CSLASH,CBLANK/ '.' , '/' , ' '/
26 MAXNX = MIN(NPAGWD-20,MAXWID)
27 IF (MAXNX .LT. 10) MAXNX = 10
28 MAXNY = NPAGLN
29 IF (MAXNY .LT. 10) MAXNY = 10
30 IF (NXYPT .LE. 1) RETURN
31 XBEST = XPT(1)
32 YBEST = YPT(1)
33 CHBEST = CHPT(1)
34C order the points by decreasing y
35 KM1 = NXYPT - 1
36 DO 150 I= 1, KM1
37 IQUIT = 0
38 NI = NXYPT - I
39 DO 140 J= 1, NI
40 IF (YPT(J) .GT. YPT(J+1)) GO TO 140
41 SAVX = XPT(J)
42 XPT(J) = XPT(J+1)
43 XPT(J+1) = SAVX
44 SAVY = YPT(J)
45 YPT(J) = YPT(J+1)
46 YPT(J+1) = SAVY
47 CHSAV = CHPT(J)
48 CHPT(J) = CHPT(J+1)
49 CHPT(J+1) = CHSAV
50 IQUIT = 1
51 140 CONTINUE
52 IF (IQUIT .EQ. 0) GO TO 160
53 150 CONTINUE
54 160 CONTINUE
55C find extreme values
56 XMAX = XPT(1)
57 XMIN = XMAX
58 DO 200 I= 1, NXYPT
59 IF (XPT(I) .GT. XMAX) XMAX = XPT(I)
60 IF (XPT(I) .LT. XMIN) XMIN = XPT(I)
61 200 CONTINUE
62 DXX = 0.001*(XMAX-XMIN)
63 XMAX = XMAX + DXX
64 XMIN = XMIN - DXX
65 CALL MNBINS(XMIN,XMAX,MAXNX,XMIN,XMAX,NX,BWIDX)
66 YMAX = YPT(1)
67 YMIN = YPT(NXYPT)
68 IF (YMAX .EQ. YMIN) YMAX=YMIN+1.0
69 DYY = 0.001*(YMAX-YMIN)
70 YMAX = YMAX + DYY
71 YMIN = YMIN - DYY
72 CALL MNBINS(YMIN,YMAX,MAXNY,YMIN,YMAX,NY,BWIDY)
73 ANY = NY
74C if first point is blank, it is an 'origin'
75 IF (CHBEST .EQ. CBLANK) GO TO 50
76 XBEST = 0.5 * (XMAX+XMIN)
77 YBEST = 0.5 * (YMAX+YMIN)
78 50 CONTINUE
79C find scale constants
80 AX = 1.0/BWIDX
81 AY = 1.0/BWIDY
82 BX = -AX*XMIN + 2.0
83 BY = -AY*YMIN - 2.0
84C convert points to grid positions
85 DO 300 I= 1, NXYPT
86 XPT(I) = AX*XPT(I) + BX
87 300 YPT(I) = ANY-AY*YPT(I) - BY
88 NXBEST = AX*XBEST + BX
89 NYBEST = ANY - AY*YBEST - BY
90C print the points
91 NY = NY + 2
92 NX = NX + 2
93 ISP1 = 1
94 LINODD = 1
95 OVERPR=.FALSE.
96 DO 400 I= 1, NY
97 DO 310 IBK= 1, NX
98 310 CLINE (IBK:IBK) = CBLANK
99 CLINE(1:1) = CDOT
100 CLINE(NX:NX) = CDOT
101 CLINE(NXBEST:NXBEST) = CDOT
102 IF (I.NE.1 .AND. I.NE.NYBEST .AND. I.NE.NY) GO TO 320
103 DO 315 J= 1, NX
104 315 CLINE(J:J) = CDOT
105 320 CONTINUE
106 YPRT = YMAX - FLOAT(I-1)*BWIDY
107 IF (ISP1 .GT. NXYPT) GO TO 350
108C find the points to be plotted on this line
109 DO 341 K= ISP1,NXYPT
110 KS = YPT(K)
111 IF (KS .GT. I) GO TO 345
112 IX = XPT(K)
113 IF (CLINE(IX:IX) .EQ. CDOT) GO TO 340
114 IF (CLINE(IX:IX) .EQ. CBLANK) GO TO 340
115 IF (CLINE(IX:IX) .EQ.CHPT(K)) GO TO 341
116 OVERPR = .TRUE.
117C OVERPR is true if one or more positions contains more than
118C one point
119 CLINE(IX:IX) = '&'
120 GO TO 341
121 340 CLINE(IX:IX) = CHPT(K)
122 341 CONTINUE
123 ISP1 = NXYPT + 1
124 GO TO 350
125 345 ISP1 = K
126 350 CONTINUE
127 IF (LINODD .EQ. 1 .OR. I .EQ. NY) GO TO 380
128 LINODD = 1
129 WRITE (NUNIT, '(18X,A)') CLINE(:NX)
130 GO TO 400
131 380 WRITE (NUNIT,'(1X,G14.7,A,A)') YPRT, ' ..', CLINE(:NX)
132 LINODD = 0
133 400 CONTINUE
134C print labels on x-axis every ten columns
135 DO 410 IBK= 1, NX
136 CLINE(IBK:IBK) = CBLANK
137 IF (MOD(IBK,10) .EQ. 1) CLINE(IBK:IBK) = CSLASH
138 410 CONTINUE
139 WRITE (NUNIT, '(18X,A)') CLINE(:NX)
140C
141 DO 430 IBK= 1, 12
142 430 XVALUS(IBK) = XMIN + FLOAT(IBK-1)*10.*BWIDX
143 ITEN = (NX+9) / 10
144 WRITE (NUNIT,'(12X,12G10.4)') (XVALUS(IBK), IBK=1,ITEN)
145 CHMESS = ' '
146 IF (OVERPR) CHMESS=' Overprint character is &'
147 WRITE (NUNIT,'(25X,A,G13.7,A)') 'ONE COLUMN=',BWIDX, CHMESS
148 500 RETURN
149 END
Note: See TracBrowser for help on using the repository browser.