SUBROUTINE HISTO(IH) C C ROUTINE TO OUTPUT HISTOGRAMS C IH = HISTOGRAM NUMBER C BYTE LBUF(140) INTEGER LABL(10) INTEGER*4 IX,IJ,IMIN REAL ABUF(20) LOGICAL LER COMMON /SCRAT/LBUF,ABUF,LABL,IX,IJ,IMIN C C OUTPUT HEADER RUN#,HIST #, LABEL C IHMIN = 1 CALL HSTAT(0,I,IHMAX) IF(IH.EQ. 0)GO TO 1 IHMIN = IH IHMAX = IH 1 DO 600 IHIS = IHMIN,IHMAX CALL HSTAT(IHIS,IXSIZ,IYSIZ,IXS,IX0,IYS,IY0,ITYPE) IF(IXSIZ .LE. 0) GO TO 600 ITYPE = IAND(ITYPE,3) IXSIZ = IXSIZ - 1 IYSIZ = IYSIZ -1 C C GET CUTS (MAX OF 8) FOR PRINT OUT C IM = 1 DO 100 J = 1,96 !LOOK AT ONLY 96 CUT VALUES CALL MGETA(J,K,ABUF(IM)) !GET CUT VALUE LBUF(IM) = 'X' IF(K .LT. 0) LBUF(IM) = 'Y' IF(ABS(K) .EQ. IHIS) IM = IM + 1 !CUT IS FOR THIS HIST IF(IM .GT. 20) GO TO 101 !TOO MANY CUTS, DON'T LOOK FOR MORE 100 CONTINUE 101 CONTINUE IM = IM - 1 CALL GTITL(IHIS,LABL,5) CALL GTITL(0,LABL(6),5) WRITE(6,1000)IHIS,IHIS,LABL,IXS,IYS IF(IM .GT. 0)WRITE(6,1005)(ABUF(J),LBUF(J),J=1,IM) C C CHECK FOR MAX NUMBER TO PRINT C IF MAX = 0 DO NOT PRINT AT ALL C IXMAX = 0 IXMIN = IXSIZ IYMAX = 0 IYMIN = IYSIZ IMIN = 0 IJUMP = 2 IF(ITYPE .EQ. 1) IJUMP = 1 ICHAN = 1 DO 150 JY = 0,IYSIZ DO 150 JX = 0,IXSIZ CALL HGET(IHIS,IJ,ICHAN,IJUMP,IJJ) ICHAN = ICHAN + IJUMP IF(IJ .EQ. 0)GO TO 150 IJ = ABS(IJ) IF(JX .LT. IXMIN)IXMIN = JX IF(JX .GT. IXMAX)IXMAX = JX IF(JY .GT. IYMAX)IYMAX = JY IF(JY .LT. IYMIN)IYMIN = JY IF(IMIN .LT. IJ)IMIN =IJ 150 CONTINUE IF(IMIN .EQ. 0) GO TO 600 C C FIND THE NUMBER OF DIGITS/NUMBER C DO 160 J = 2,12 M = J IMIN = IMIN/10 IF(IMIN .EQ. 0)GO TO 161 160 CONTINUE 161 CONTINUE C C HERE WE DO 2 DIMENSIONAL HISTS C N = 119/M !NUMBERS PER LINE DO 450 JX = IXMIN,IXMAX,N IMAX = N !NUMBERS FOR THIS LINE IF(JX+N.GT.IXSIZ)IMAX = IXSIZ-JX+1 NN = 10 IF(M .GT. 2) NN = 5 IF(M .GT. 5) NN = 2 IJ = 0 CALL NCONV(IJ,LBUF,135) DO 410 I = 0,IMAX-1,NN !SET UP XSCALE PRINT ICHAN = 12 + M + I*M !LOCATION OF X TIC IX = JX + I LBUF(ICHAN) = '$' !TIC IX = IX0 + IX * IXS !VALUE AT TIC CALL NCONV(IX,LBUF(ICHAN-11),11) !CONVERT VALUE TO CHARS 410 CONTINUE IF(JX .EQ. 0) LBUF( 12 + M) = '<' !LOWEST CHAN IF(JX + N .GT. IXSIZ) LBUF(12+M*IMAX ) = '>' !HIGHEST CHAN WRITE(6,1001)(LBUF(I),I = 1,131) !OUTPUT THE X LABLE IF(IYSIZ .EQ. 0) GO TO 412 !IF 1 DIM SKIP EXTRA TICS IJ = 0 CALL NCONV(IJ,LBUF,135) DO 411 I = 1,IMAX ICHAN = 12 + I*M LBUF(ICHAN) = '$' ICH = I - 1 + JX IF(ICH .EQ. 0)LBUF(ICHAN) = '<' IF(ICH .EQ. IXSIZ)LBUF(ICHAN) = '>' 411 CONTINUE WRITE(6,1001)(LBUF(I),I = 1,131) 412 DO 450 JY = IYMAX,IYMIN,-1 ICHAN = JX + (IXSIZ+1) * JY ICHAN = IJUMP*ICHAN + 1 ICH = 13 IJ = 0 DO 420 I = 1,IMAX CALL HGET(IHIS,IJ,ICHAN,IJUMP,IJJ) !VALUE TO PRINT ICHAN = ICHAN + IJUMP CALL NCONV(IJ,LBUF(ICH),M) !CONVERT NUMBER IF(IJ .EQ. 0) LBUF(ICH+M-1) = '.' 420 ICH = ICH + M MAX = 12 + IMAX*M LBUF(12) = '$' IF(IYSIZ .EQ. 0) GO TO 430 !ONLY 1 DIM PRINT IF(JY .EQ. 0)LBUF(12) = '<' IF(JY .EQ. IYSIZ)LBUF(12) = '>' IX = JY IX = IY0 + IX*IYS CALL NCONV(IX,LBUF,11) 430 WRITE(6,1001)(LBUF(J),J= 1,MAX) 450 CONTINUE 600 CONTINUE !END OF MASTER DO LOOP (MULT HIST) RETURN 1000 FORMAT( I4 , T120, I13 1 /10X,5A2,5X,5A2,T40,'XSTEP='I6 ,T60 'YSTEP='I6 1 ,T90'UNDER/OVERFLOW=< / >') 1001 FORMAT(1X,131A1) 1005 FORMAT(T25, 'CUTS'1P,6(G15.7,1X,A1)) END SUBROUTINE NCONV(NUMBER,IBUF,ISIZE) INTEGER*4 NUMBER,N,M BYTE IBUF(ISIZE),ISAVE IF(ISIZE .LE. 0)RETURN N = ABS(NUMBER) DO 10 J = ISIZE,1,-1 M = N N = N / 10 M = M - N*10 IBUF(J) = '0' + M IF(N .NE. 0) GO TO 10 MAX = J - 1 GO TO 11 10 CONTINUE 11 IF(MAX .LE. 0) RETURN ISAVE = ' ' IF(NUMBER .LT. 0) ISAVE = '-' DO 20 J = MAX,1,-1 IBUF(J) = ISAVE ISAVE = ' ' 20 CONTINUE END