C ++******************************************************************** C * C EPUR4 REMOVED FROM HPLAN.FOR FILE APRIL 89 al * C ID(IDIM,NID) 12/7/93 ML * C UPDATED SOME AUG 1999 ARDEAN LEITH * C SIMPLIFIED LOGIC FOR OUTLIERS DEC 2005 ARDEAN LEITH * C ********************************************************************** C=* FROM: SPIDER - MODULAR IMAGE PROCESSING SYSTEM. AUTHOR: J.FRANK * C=* Copyright (C) 1985-2005 Health Research Inc. * C=* * C=* HEALTH RESEARCH INCORPORATED (HRI), * C=* ONE UNIVERSITY PLACE, RENSSELAER, NY 12144-3455. * C=* * C=* Email: spider@wadsworth.org * C=* * C=* This program is free software; you can redistribute it and/or * C=* modify it under the terms of the GNU General Public License as * C=* published by the Free Software Foundation; either version 2 of the * C=* License, or (at your option) any later version. * C=* * C=* This program is distributed in the hope that it will be useful, * C=* but WITHOUT ANY WARRANTY; without even the implied warranty of * C=* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * C=* General Public License for more details. * C=* * C=* You should have received a copy of the GNU General Public License * C=* along with this program; if not, write to the * C=* Free Software Foundation, Inc., * C=* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * C=* * C ********************************************************************** C C EPUR4(IDIM,NPTS, X,Y,ID, MOD, PEX, KP,KLIC,IRTFLG,NDAT) C C POINTS WHICH FALL BEYOND PEX STANDARD DEVIATIONS ARE COLLAPSED ONTO C THE FRAME OF THE GRAPH. C C OUTPUT: THE KP MODIFIED POINTS HAVE THEIR INDICES IN KLIC() C IF THERE ARE MORE THAN 264 POINTS ON THE FRAME THE GRAPH IS ABORTED C IF MOD=1 LABELS HAVE A1 FORMAT - IF MOD=4 LABELS HAVE A7 FORMAT C C WARNING: X(*) AND Y(*) ARE DESTROYED IF KP .NE. 0 C C CALLED BY: HPLAN, HISMAP, HISMAP4 C C ********************************************************************** SUBROUTINE EPUR4(IDIM,NPTS,X,Y,ID,MOD,PEX,KP,KLIC,IRTFLG,NDAT) CHARACTER(LEN=7) :: ID(IDIM) REAL :: X(IDIM), Y(IDIM) INTEGER :: KLIC(371) DATA SEUIL / 1.0 E-07 / IRTFLG = 1 IF (PEX .LE. 0.0) RETURN NPTSP1 = NPTS + 1 IF (NPTSP1 .GT. IDIM) RETURN X(NPTSP1) = 0.0 Y(NPTSP1) = 0.0 NPTSP1 = NPTS SX = 0.0 SY = 0.0 DO I = 1,NPTS SX = SX + X(I) * X(I) SY = SY + Y(I) * Y(I) END DO SX = SQRT(SX/FLOAT(NPTS)) SY = SQRT(SY/FLOAT(NPTS)) PX = PEX * SX PY = PEX * SY KP = 0 PIN = PEX + 20.0 DO I = 1, NPTS IF (ABS(X(I)) .GT. PX .OR. ABS(Y(I)) .GT. PY) THEN C POINT IS BEYOND SD BOUNDARY REQUESTED KP = KP + 1 IF (MOD.NE.1 .AND. KP .EQ. 1) THEN C WRITE HEADER FOR OUTLIER LISTING WRITE(NDAT,120) PEX 120 FORMAT (//15X,'WARNING',//, & ' THE FOLLOWING POINTS LOCATED BEYOND ',F5.1, & ' STANDARD DEVIATIONS FROM',/, & ' THE ORIGIN ARE PLACED ON THE EDGES OF THE MAP',/) WRITE(NDAT,130) 130 FORMAT(' ',29('*')) ENDIF IF (KP .GT. 264) RETURN KLIC(KP) = I IF (MOD .NE. 1) WRITE(NDAT,110) ID(I),X(I),Y(I) 110 FORMAT (' *',A7,1X,'*',2(F13.5,8X,'*') ) c X(I) = X(I) / PIN c Y(I) = Y(I) / PIN IF (ABS(X(I)) .GT. PX) X(I) = SIGN(PX, X(I)) IF (ABS(Y(I)) .GT. PY) Y(I) = SIGN(PY, Y(I)) ENDIF ENDDO IF (KP .NE. 0) WRITE(NDAT,130) IRTFLG = 0 END #ifdef NEVER C REMOVED DEC 05 AS HAD BUG WITH SOME DISTRIBUTIONS IF (KP .NE. 0) THEN C RESCALE PERIPHERY VALUES C (INEFFICIENT!!! al) IF (MOD .EQ. 4) WRITE(NDAT,(' ',29('*'))) CALL BORNS(NPTSP1,Y,YMIN,YMAX) CALL BORNS(NPTSP1,X,XMIN,XMAX) IF (XMIN .EQ. 0.) XMIN = SEUIL IF (XMAX .EQ. 0.) XMAX = SEUIL T1 = YMAX / XMAX T2 = YMAX / XMIN T3 = YMIN / XMIN T4 = YMIN / XMAX DO K = 1, KP KLK = KLIC(K) U = X(KLK) V = Y(KLK) IF (U .EQ. 0.) U = SEUIL T = V / U A = YMAX IF (U .GT. 0.0 .AND. (T4.LT.T .AND. T.LT.T1)) THEN A = XMAX U = A V = A * T ELSEIF (U .LT. 0.0 .AND.(T2.LT.T .AND. T.LT.T3)) THEN A = XMIN U = A V = A * T ELSE IF (V .LT. 0.) A = YMIN V = A IF (T .EQ. 0.) T = SEUIL U = A / T END IF IF (V .GT. YMAX) V = YMAX IF (U .GT. XMAX) U = XMAX X(KLK) = U Y(KLK) = V END DO WRITE(NDAT,140) KP, PEX 140 FORMAT (' ',I4,' POINTS LOCATED BEYOND ',F5.1, & ' STANDARD DEVIATIONS ARE PLACED ON ', & 'EDGES OF THE MAP') ENDIF #endif