Procedure FIT(X, Y:array of real; NDATA:integer; SIG:array of real; var MWT:integer; var A, B, SIGA, SIGB, CHI2, Q:real); var I,J:integer; SX,SY,ST2,SS,WT,SXOSS,T,SIGDAT:real; begin SX:=0; SY:=0; ST2:=0; B:=0; If MWT <> 0 Then begin SS:=0; For I:=1 To NDATA do begin WT:=1 / (Sqr(SIG[I])); SS:=SS + WT; SX:=SX + X[I] * WT; SY:=SY + Y[I] * WT; end; end Else begin For I:=1 To NDATA do begin SX:=SX + X[I]; SY:=SY + Y[I]; end; SS:=NDATA; end; SXOSS:=SX / SS; If MWT <> 0 Then begin For I:=1 To NDATA do begin T:=(X[I] - SXOSS) / SIG[I]; ST2:=ST2 + T * T; B:=B + T * Y[I] / SIG[I]; end; end Else begin For I:=1 To NDATA do begin T:=X[I] - SXOSS; ST2:=ST2 + T * T; B:=B + T * Y[I]; end; end; B:=B / ST2; A:=(SY - SX * B) / SS; SIGA:=Sqrt((1 + SX * SX / (SS * ST2)) / SS); SIGB:=Sqrt(1 / ST2); CHI2:=0; If MWT = 0 Then begin For I:=1 To NDATA do CHI2:=CHI2 + Sqr(Y[I] - A - B * X[I]); Q:=1; SIGDAT:=Sqrt(CHI2 / (NDATA - 2)); SIGA:=SIGA * SIGDAT; SIGB:=SIGB * SIGDAT end Else begin For I:=1 To NDATA do CHI2:=CHI2 + Sqr((Y[I] - A - B * X[I]) / SIG[I]); Q:=GAMMQ(0.5 * (NDATA - 2), 0.5 * CHI2); end; end;