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

Last change on this file 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.