*-- Author : I.O. Skillicorn
SUBROUTINE FTLFTW(XS,YS,WS,L,KEY,KK,AS,BS,ES,DAS,DBS,COVS)
C MOD TO VECTORIZE
DIMENSION XS(100),YS(100),WS(100)
DOUBLE PRECISION X(100),Y(100),W(100)
DOUBLE PRECISION W2, W2X, W2Y, W2XY, W2X2, W2Y2
DOUBLE PRECISION A,B,D,E
DOUBLE PRECISION DA, DB, COV
C TO PERFORM A WEIGHTED STRAIGHT LINE FIT Y=AX+B
C CERN LIBRARY ROUTINE MOD TO INCLUDE FIT TO Y=AX
C CALCULATE SUMS WEIGHT =1./ERROR
IF(L.LE.1)GOTO1
W2=0.0D0
W2X=0.0D0
W2Y=0.0D0
W2XY=0.0D0
W2X2=0.0D0
W2Y2=0.0D0
ICNT=0
DO 2 J=1,L
W(J) = DBLE(WS(J))
X(J) = DBLE(XS(J))
Y(J) = DBLE(YS(J))
W2=W2+W(J)*W(J)
W2X=W2X+W(J)*W(J)*X(J)
W2X2=W2X2+W(J)*W(J)*X(J)*X(J)
W2XY=W2XY+W(J)*W(J)*X(J)*Y(J)
W2Y=W2Y+W(J)*W(J)*Y(J)
W2Y2=W2Y2+W(J)*W(J)*Y(J)*Y(J)
ICNT=ICNT+1
2 CONTINUE
C
C FIT PARAMETERS
IF(KK.EQ.2)THEN
A=(W2XY-W2X*W2Y/W2)/(W2X2-W2X**2/W2)
B=(W2Y-A*W2X)/W2
D=W2X2*W2-W2X*W2X
C ADDED 24/3/88
IF(ABS(D).LT.1.0D-6)GOTO1
C
COV=-W2X/D
IF(ICNT.LE.2)GOTO3
E=(W2Y2-W2Y**2/W2-(W2XY-W2X*W2Y/W2)**2/(W2X2-W2X**2/W2))
1 /DFLOAT(ICNT-2)
DA=DSQRT(W2/D)
DB=DSQRT(W2X2/D)
ELSE
A=W2XY/W2X2
DA=1./SQRT(W2X2)
B=0.
DB=0.
E=(W2Y2-W2XY**2/W2X2)/FLOAT(ICNT-1)
ENDIF
GOTO4
C
C INSUFFICIENT POINTS
1 A=0.0D0
B=0.0D0
DA=0.0D0
DB=0.0D0
3 E=0.0D0
4 CONTINUE
AS = A
BS = B
ES = E
DAS = DA
DBS = DB
COVS = COV
RETURN
END
*
*
C new version imported from IOS fortran 6/6/91
*