SUBROUTINE HEC_BEAM_LINEFIT(SLOP,XZERO,RESMEAN,RMAX,NCMAX) ************************************************************************* *** Fit a set of clusters, stored in the common CLUSET by a direct line. *** SLOP and XZERO are the parameters of the line. *** RESMEAM is mean residual {RES=DEVIATION/0.5(CLUSTER SIZE)} *** RMAX is the maximal residual *** NCMAX is the number of plane with maximal residual *** *** Created 21-FEB-1995 by A.Minaenko *** Modified 23-JUN-1997 by A.Minaenko *** ************************************************************************* IMPLICIT NONE INCLUDE 'hec_beam_sys_cluset.inc' REAL SLOP, XZERO, RESMEAN, RMAX INTEGER NCMAX C=== Local variables C=== To switch on local debugging print of NPRNT events INTEGER IPRNT, NPRNT SAVE IPRNT, NPRNT INTEGER ICLU, NCLU, I C REAL R, COOR C DOUBLE PRECISION DZ SAVE DZ DOUBLE PRECISION DC(5), D, DNUM, DENOM C data iprnt/0/ data nprnt/0/ data dz/0.D+00/ c DO I=1,5 DC(I)=DZ ENDDO NCLU=0 DO ICLU=1,5 IF (IVCLU(ICLU).NE.0) THEN NCLU=NCLU+1 D=(1./WCLU(ICLU)**2) DC(1)=DC(1)+DBLE(ZCLU(ICLU))*D DC(2)=DC(2)+D DC(3)=DC(3)+DBLE(CCLU(ICLU))*D DC(4)=DC(4)+DBLE(ZCLU2(ICLU))*D DC(5)=DC(5)+DBLE(CCLU(ICLU)*ZCLU(ICLU))*D ENDIF ENDDO IF (NCLU.GE.2) THEN DENOM=DC(1)**2-DC(2)*DC(4) DNUM=DC(1)*DC(3)-DC(2)*DC(5) SLOP=SNGL(DNUM/DENOM) DNUM=DC(1)*DC(5)-DC(3)*DC(4) XZERO=SNGL(DNUM/DENOM) C=== Calculate residuals and find the maximal one RESMEAN=0. RMAX=0. DO ICLU=1,5 IF (IVCLU(ICLU).NE.0) THEN COOR=SLOP*ZCLU(ICLU)+XZERO R=ABS(CCLU(ICLU)-COOR)/WCLU(ICLU) C IF (IPRNT.LT.NPRNT) WRITE (*,1003) COOR,R 1003 FORMAT(5X,'COOR=',E10.4,' R=',E10.4) RESMEAN=RESMEAN+R**2 IF (R.GT.RMAX) THEN RMAX=R NCMAX=ICLU ENDIF ENDIF ENDDO RESMEAN=RESMEAN/NCLU RESMEAN=SQRT(RESMEAN) C=== Local debugging print of NPRNT events with a large maximal residual IF (IPRNT.LT.NPRNT.AND.RMAX.GT.1.4) THEN IPRNT=IPRNT+1 WRITE(*,1004) RESMEAN,RMAX,NCMAX 1004 FORMAT(5X,'RESMEAN=',E10.4,' RMAX=',E10.4,' NCMAX=',I1/) WRITE(*,1001) NCLU,SLOP,XZERO 1001 FORMAT(5X,'NCLU=',I1,' SLOP=',E10.4,' XZERO=',E10.4/) WRITE(*,1002) IVCLU,CCLU,WCLU,ZCLU,ZCLU2 1002 FORMAT(5X,5(I2,1X)/,4(5X,5(E10.4,2X)/)//) ENDIF ENDIF ! NCLU.GE.2 RETURN END