SUBROUTINE COMPSIG(LBUF,IREC,XSP,SIGMA)
C
IMPLICIT INTEGER*2 (I,J,K,L,M,N)
INTEGER*2 REM1, REM2, REM3, YMAX, SUM, Y12
INTEGER*2 LBUF(2), IREC(3)
C
ANFL = IREC(1) ! start value in DAC units
N = IREC(2) ! number of data points in LBUF
XINC = IREC(3) ! increment in DAC units
C
C FIND MAXIMUM WITH SOME FILTERING
C
YMAX = 0
REM1 = 0
REM2 = 0
DO 1 I = 1, N
REM3 = LBUF(I)
SUM = (REM1 + REM2 + REM3) / 3
IF (SUM .GT. YMAX) THEN
YMAX = SUM
I0 = I
ELSE
REM1 = REM2
REM2 = REM3
ENDIF
1 CONTINUE
C
C FIND LEFT HALF HEIGHT
C
Y12 = YMAX / 2
REM1 = 0
REM2 = 0
DO 2 I = 1, N
REM3 = LBUF(I)
SUM = (REM1 + REM2 + REM3) / 3
IF (SUM. GE. Y12) GO TO 20
REM1 = REM2
REM2 = REM3
2 CONTINUE
20 I1 = I - 1
C
C FIND RIGHT HALF HEIGHT
C
REM1 = 0
REM2 = 0
DO 3 I = N, 1, -1
REM3 = LBUF(I)
SUM = (REM1 + REM2 + REM3) / 3
IF (SUM .GE. Y12) GO TO 30
REM1 = REM2
REM2 = REM3
3 CONTINUE
30 I2 = I + 1
C
C GET REDUCED BOUNDARIES
C
IDEL = MAX(1, IFIX(1.5 * FLOAT(I2 - I1)))
I1 = I0 - IDEL
IF (I1 .LT .1) I1 = 1
I2 = I0 + IDEL
IF (I2 .GT. N) I2 = N
C
C COMPUTE THE SUMS WITH REDUCED BOUNDARIES
C
SUM1 = 0.
SUM2 = 0.
SUM3 = 0.
DO 40 I = I1, I2
X = I
Y = LBUF(I)
XY = X * Y
XXY = X * XY
SUM1 = SUM1 + Y
SUM2 = SUM2 + XY
SUM3 = SUM3 + XXY
40 CONTINUE
C
C COMPUTE CENTER AND 4*SIGMA IN MM
C
IF (SUM1 .GT. 0.0) THEN
XSP = SUM2 / SUM1
SIGMA = SQRT(SUM3 / SUM1 - XSP**2)
XSP = ANFL - 2048. + XINC * (XSP - 1.)
XSP = XSP / 40.95
SIGMA = 4. * XINC * SIGMA / 40.95
ELSE
XSP = 0.
SIGMA = 0.
ENDIF
C
RETURN
END
|