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