| 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 | 
|---|