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"
|
---|
12 | CC plots points in array xypt onto one page with labelled axes
|
---|
13 | CC NXYPT is the number of points to be plotted
|
---|
14 | CC XPT(I) = x-coord. of ith point
|
---|
15 | CC YPT(I) = y-coord. of ith point
|
---|
16 | CC CHPT(I) = character to be plotted at this position
|
---|
17 | CC the input point arrays XPT, YPT, CHPT are destroyed.
|
---|
18 | CC
|
---|
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)
|
---|
34 | C 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
|
---|
55 | C 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
|
---|
74 | C 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
|
---|
79 | C 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
|
---|
84 | C 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
|
---|
90 | C 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
|
---|
108 | C 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.
|
---|
117 | C OVERPR is true if one or more positions contains more than
|
---|
118 | C 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
|
---|
134 | C 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)
|
---|
140 | C
|
---|
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
|
---|