C C ++******************************************************************** C C PKD C 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 PKD * C C SUPPORT_ROUTINE C C 1 2 3 4 5 6 7 C23456789012345678901234567890123456789012345678901234567890123456789012 * C*********************************************************************** SUBROUTINE PKD(LUN1,NSAM,NROW,NQ,XYZ,itmp,THRSH,L,NNS,NNR) DIMENSION Q(NSAM,-NQ:NQ),G(-NQ:NQ,-NQ:NQ) DIMENSION XYZ(3,itmp) LOGICAL T C KM(K)=MOD(K+3*NQ,2*NQ+1)-NQ KQ(K)=MOD(K+NROW,NROW)+1 EPSN=1.E-4 DD=NQ*NQ L=0 AG=0.0 BG=0.0 DO J=-NQ,NQ-1 CALL REDLIN(LUN1,Q(1,J),NSAM,KQ(J)) ENDDO C GAUSSIAN OF HALF-WIDTH=NQ XN=FLOAT((2*NQ+1)**2) XX=FLOAT(NQ*NQ) DO I=-NQ,NQ DO J=-NQ,NQ G(I,J)=EXP(-FLOAT(I*I+J*J)/XX) AG=AG+G(I,J) BG=BG+G(I,J)*G(I,J) ENDDO ENDDO AVGG=AG/XN STDG=SQRT(BG-AG*AG/XN) DO I=-NQ,NQ DO J=-NQ,NQ G(I,J)=(G(I,J)-AVGG)/STDG ENDDO ENDDO C KNSAM=NNS/2+1 KNROW=NNR/2+1 C DO J=1,NROW CALL REDLIN(LUN1,Q(1,KM(J+NQ)),NSAM,KQ(J+NQ-1)) DO I=NQ+1,NSAM-NQ T=.TRUE. AT=0.0 BT=0.0 CT=0.0 Z=Q(I,KM(J)) DO JT=-NQ,NQ JTM=KM(JT+J) DO IT=-NQ,NQ IF(IT.EQ.0.AND.JT.EQ.0)GO TO 8 IF(Z.LT.Q(I+IT,JTM))GOTO 7 8 CONTINUE ENDDO ENDDO DO JJ=-NQ,NQ JJM=KM(JJ+J) DO II=-NQ,NQ AT=AT+Q(I+II,JJM) BT=BT+Q(I+II,JJM)*Q(I+II,JJM) CT=CT+G(II,JJ)*Q(I+II,JJM) ENDDO ENDDO RT=(BT-AT*AT/XN) IF(RT.LE.EPSN) THEN COEF=0.0 GOTO 7 ELSE COEF=CT/SQRT(RT) IF(COEF.GE.THRSH)THEN T=.TRUE. ELSE GOTO 7 ENDIF ENDIF IF (T)THEN IF((I-KNSAM).LE.0.OR.(I+KNSAM).GT.NSAM) GOTO 7 IF((J-KNROW).LE.0.OR.(J+KNROW).GT.NROW) GOTO 7 XX=FLOAT(I) YY=FLOAT(J) IF(L.GT.0) THEN C Check whether there were any other peaks in the vicinity DO LT=1,L IF(((XYZ(1,LT)-XX)**2+ & (XYZ(2,LT)-YY)**2).LE.DD) THEN IF(XYZ(3,LT).LT.Z) THEN XYZ(1,LT)=XX XYZ(2,LT)=YY XYZ(3,LT)=Z ENDIF GOTO 7 ENDIF ENDDO ENDIF L=L+1 XYZ(1,L)=XX XYZ(2,L)=YY XYZ(3,L)=Z ENDIF 7 CONTINUE ENDDO ENDDO END