*-- Author : R. Henderson SUBROUTINE FPRCHI(PSEG,PERSEG,RSEG,RERSEG,Z,PROBCH) **: FPRCHI.......SM. Bug fix. Protect against small Chisq for PROB. **---------------------------------------------------------------------- C C--- Routine calculates the probability of PSEG and RSEG C--- being the same vector at Z given that PERSEG is the covariance C--- matrix of PSEG both calculated at at Z=0 C--- (these are the quantities supplied by FPFYUV) C--- and RERSEG is the covariance matrix of RSEG at Z C C--- The probability fron chisquare is returned as PROB C DOUBLE PRECISION COVAR C--- DIMENSION PSEG(4) , PERSEG(4,4) DIMENSION RSEG(4) , RERSEG(4,4) DIMENSION COVAR(4,4) , DERIV(4,4) , WORK(16) , WM(4,4) , WV(4) C C--- Construct the derivative matrix C CALL VZERO(DERIV,16) DO 10 I = 1,4 DERIV(I,I) = 1.0 10 CONTINUE DERIV(1,3) = Z DERIV(2,4) = Z C C--- Calculate X and Y at Z C PSEG(1) = PSEG(1) + Z * PSEG(3) PSEG(2) = PSEG(2) + Z * PSEG(4) C C--- Propagate PERSEG FROM Z=0 TO Z C CALL VZERO(WM,16) DO 24 I = 1,4 DO 25 J = 1,4 DO 26 K = 1,4 WM(I,J) = WM(I,J) + PERSEG(I,K) * DERIV(J,K) 26 CONTINUE 25 CONTINUE 24 CONTINUE C--- CALL VZERO(COVAR,32) DO 54 M = 1,4 DO 55 K = 1,4 DO 56 I = 1,4 COVAR(M,K) = COVAR(M,K) + DERIV(M,I) * WM(I,K) 56 CONTINUE 55 CONTINUE 54 CONTINUE C--- C DO 111 I = 1,4 C WRITE(6,1001)(COVAR(I,J),J=1,4) C 1001 FORMAT(1X,'COVAR',4e15.6) C 111 CONTINUE C WRITE(6,*)'------------------------------' C C--- Add on the radial covariance matrix AT Z = Z C DO 30 I = 1,4 DO 31 J = 1,4 COVAR(I,J) = COVAR(I,J) + RERSEG(I,J) 31 CONTINUE 30 CONTINUE C C--- Calculate weight matrix C CALL DINV(4,COVAR,4,WORK,IFAIL) IF(IFAIL .NE. 0)THEN WRITE(6,*)' Matrix failed to invert in FPRCHI' PROBCH = 0.0 RETURN ENDIF C--- C DO 131 I = 1,4 C WRITE(6,1003)(COVAR(I,J),J=1,4) C 1003 FORMAT(1X,'COVAR',4e15.6) C 131 CONTINUE C WRITE(6,*)'------------------------------' C C--- Now calculate chisquare C CHISQ = 0.0 DO 40 I = 1,4 WV(I) = 0.0 DO 41 J = 1,4 WV(I) = WV(I) + 1 COVAR(I,J) * (PSEG(J) - RSEG(J)) 41 CONTINUE CHISQ = CHISQ + (PSEG(I) - RSEG(I)) * WV(I) 40 CONTINUE C C--- Find probability C IF(CHISQ .LT. 0.001) THEN PROBCH = 0.99999 ELSE PROBCH = PROB(CHISQ,4) ENDIF C WRITE(6,*)PROBCH C WRITE(6,*)'------------------------------' END *