File indexing completed on 2025-08-05 08:21:14
0001
0002
0003
0004
0005
0006
0007 SUBROUTINE PYPLOT(ID)
0008
0009
0010 IMPLICIT DOUBLE PRECISION(A-H, O-Z)
0011 IMPLICIT INTEGER(I-N)
0012
0013 COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
0014 COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
0015 SAVE /PYDAT1/,/PYBINS/
0016
0017 DIMENSION IDATI(6), IROW(100), IFRA(100), DYAC(10)
0018 CHARACTER TITLE*60, OUT*100, CHA(0:11)*1
0019
0020
0021 DATA DYAC/.04,.05,.06,.08,.10,.12,.15,.20,.25,.30/
0022 DATA CHA/'0','1','2','3','4','5','6','7','8','9','X','-'/
0023
0024
0025 IF(ID.LE.0.OR.ID.GT.IHIST(1)) RETURN
0026 IS=INDX(ID)
0027 IF(IS.EQ.0) RETURN
0028 IF(NINT(BIN(IS+5)).LE.0) THEN
0029 WRITE(MSTU(11),5000) ID
0030 RETURN
0031 ENDIF
0032
0033
0034 LIN=IHIST(3)-18
0035 NX=NINT(BIN(IS+1))
0036
0037
0038 DO 100 IT=1,20
0039 IEQ=NINT(BIN(IS+8+NX+IT))
0040 TITLE(3*IT-2:3*IT)=CHAR(IEQ/256**2)//CHAR(MOD(IEQ,256**2)/256)
0041 & //CHAR(MOD(IEQ,256))
0042 100 CONTINUE
0043
0044
0045 CALL PYTIME(IDATI)
0046 IF(IDATI(1).GT.0) THEN
0047 WRITE(MSTU(11),5100) ID, TITLE, (IDATI(J),J=1,5)
0048 ELSE
0049 WRITE(MSTU(11),5200) ID, TITLE
0050 ENDIF
0051
0052
0053 YMIN=BIN(IS+9)
0054 YMAX=BIN(IS+9)
0055 DO 110 IX=IS+10,IS+8+NX
0056 IF(BIN(IX).LT.YMIN) YMIN=BIN(IX)
0057 IF(BIN(IX).GT.YMAX) YMAX=BIN(IX)
0058 110 CONTINUE
0059
0060
0061 IF(YMAX-YMIN.GT.LIN*DYAC(1)*1D-9) THEN
0062 IF(YMIN.GT.0D0.AND.YMIN.LT.0.1D0*YMAX) YMIN=0D0
0063 IF(YMAX.LT.0D0.AND.YMAX.GT.0.1D0*YMIN) YMAX=0D0
0064 IPOT=INT(LOG10(YMAX-YMIN)+10D0)-10
0065 IF(YMAX-YMIN.LT.LIN*DYAC(1)*10D0**IPOT) IPOT=IPOT-1
0066 IF(YMAX-YMIN.GT.LIN*DYAC(10)*10D0**IPOT) IPOT=IPOT+1
0067 DELY=DYAC(1)
0068 DO 120 IDEL=1,9
0069 IF(YMAX-YMIN.GE.LIN*DYAC(IDEL)*10D0**IPOT) DELY=DYAC(IDEL+1)
0070 120 CONTINUE
0071 DY=DELY*10D0**IPOT
0072
0073
0074 DO 130 IX=1,NX
0075 CTA=ABS(BIN(IS+8+IX))/DY
0076 IROW(IX)=SIGN(CTA+0.95D0,BIN(IS+8+IX))
0077 IFRA(IX)=10D0*(CTA+1.05D0-DBLE(INT(CTA+0.95D0)))
0078 130 CONTINUE
0079 IRMI=SIGN(ABS(YMIN)/DY+0.95D0,YMIN)
0080 IRMA=SIGN(ABS(YMAX)/DY+0.95D0,YMAX)
0081
0082
0083 DO 150 IR=IRMA,IRMI,-1
0084 IF(IR.EQ.0) GOTO 150
0085 OUT=' '
0086 DO 140 IX=1,NX
0087 IF(IR.EQ.IROW(IX)) OUT(IX:IX)=CHA(IFRA(IX))
0088 IF(IR*(IROW(IX)-IR).GT.0) OUT(IX:IX)=CHA(10)
0089 140 CONTINUE
0090 WRITE(MSTU(11),5300) IR*DELY, IPOT, OUT
0091 150 CONTINUE
0092
0093
0094 IPOT=INT(LOG10(MAX(YMAX,-YMIN))+10.0001D0)-10
0095 OUT=' '
0096 DO 160 IX=1,NX
0097 IF(BIN(IS+8+IX).LT.-10D0**(IPOT-4)) OUT(IX:IX)=CHA(11)
0098 IROW(IX)=NINT(10D0**(3-IPOT)*ABS(BIN(IS+8+IX)))
0099 160 CONTINUE
0100 WRITE(MSTU(11),5400) OUT
0101 DO 180 IR=4,1,-1
0102 DO 170 IX=1,NX
0103 OUT(IX:IX)=CHA(MOD(IROW(IX),10**IR)/10**(IR-1))
0104 170 CONTINUE
0105 WRITE(MSTU(11),5500) IPOT+IR-4, OUT
0106 180 CONTINUE
0107
0108
0109 IPOT=INT(LOG10(MAX(-BIN(IS+2),BIN(IS+3)-BIN(IS+4)))+
0110 & 10.0001D0)-10
0111 OUT=' '
0112 DO 190 IX=1,NX
0113 IF(BIN(IS+2)+(IX-1)*BIN(IS+4).LT.-10D0**(IPOT-3))
0114 & OUT(IX:IX)=CHA(11)
0115 IROW(IX)=NINT(10D0**(2-IPOT)*ABS(BIN(IS+2)+(IX-1)*BIN(IS+4)))
0116 190 CONTINUE
0117 WRITE(MSTU(11),5600) OUT
0118 DO 210 IR=3,1,-1
0119 DO 200 IX=1,NX
0120 OUT(IX:IX)=CHA(MOD(IROW(IX),10**IR)/10**(IR-1))
0121 200 CONTINUE
0122 WRITE(MSTU(11),5500) IPOT+IR-3, OUT
0123 210 CONTINUE
0124 ENDIF
0125
0126
0127 CSUM=0D0
0128 CXSUM=0D0
0129 CXXSUM=0D0
0130 DO 220 IX=1,NX
0131 CTA=ABS(BIN(IS+8+IX))
0132 X=BIN(IS+2)+(IX-0.5D0)*BIN(IS+4)
0133 CSUM=CSUM+CTA
0134 CXSUM=CXSUM+CTA*X
0135 CXXSUM=CXXSUM+CTA*X**2
0136 220 CONTINUE
0137 XMEAN=CXSUM/MAX(CSUM,1D-20)
0138 XRMS=SQRT(MAX(0D0,CXXSUM/MAX(CSUM,1D-20)-XMEAN**2))
0139 WRITE(MSTU(11),5700) NINT(BIN(IS+5)),XMEAN,BIN(IS+6),
0140 &BIN(IS+2),BIN(IS+7),XRMS,BIN(IS+8),BIN(IS+3)
0141
0142
0143 5000 FORMAT(/5X,'Histogram no',I5,' : no entries')
0144 5100 FORMAT('1'/5X,'Histogram no',I5,6X,A60,5X,I4,'-',I2,'-',I2,1X,
0145 &I2,':',I2/)
0146 5200 FORMAT('1'/5X,'Histogram no',I5,6X,A60/)
0147 5300 FORMAT(2X,F7.2,'*10**',I2,3X,A100)
0148 5400 FORMAT(/8X,'Contents',3X,A100)
0149 5500 FORMAT(9X,'*10**',I2,3X,A100)
0150 5600 FORMAT(/8X,'Low edge',3X,A100)
0151 5700 FORMAT(/5X,'Entries =',I12,1P,6X,'Mean =',D12.4,6X,'Underflow ='
0152 &,D12.4,6X,'Low edge =',D12.4/5X,'All chan =',D12.4,6X,
0153 &'Rms =',D12.4,6X,'Overflow =',D12.4,6X,'High edge =',D12.4)
0154
0155 RETURN
0156 END