C++********************************************************************* C C LHIST.FOR 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 PURPOSE: LOCAL HISTOGRAM GENERATION C C LHIST(BO,NSAM,NLOCAL,KCTR,NPTR,H,MODE) C BO C NSAM NUMBER OF SAMPLES C NLOCAL LOCAL AREA DIMENSION (X IS = TO Y) C KCTR COLUMN POINTER C NPTR ROW POINTER C H HISTOGRAM BUFFER C MODE 1 NON-INCREMENTAL OPERATION, NO INTEGRATION C 2 INCREMENTAL OPERATION, NO INTEGRATION C 3 NON-INCREMENTAL OPERATION WITH INTEGRATION C 4 INCREMENTAL OPERATION WITH INTEGRATION C***************************************************** SUBROUTINE LHIST(B0,NSAM,NLOCAL,KCTR,NPTR,H,MODE) INCLUDE 'CMBLOCK.INC' REAL H(1024),B0(*) DIMENSION NPTR(1) SAVE FVAL IF (MODE .EQ. 0) THEN IF (FMAX .EQ. FMIN) THEN CALL ERRT(5,'LHIST ',NE) MODE = -1 RETURN ENDIF FVAL = 127./ (FMAX-FMIN) FN = 1. / FLOAT(NLOCAL)**2 RETURN ENDIF KCTR1 = KCTR-NLOCAL / 2 GOTO (10,200,8,200),MODE C INITIALIZE HISTOGRAM 8 DO K = 129,256 H(K) = 0. ENDDO 10 DO K = 1,128 H(K) = 0. ENDDO DO I = 1,NLOCAL II = (NSAM * (NPTR(I) - 1) + KCTR1) - 1 DO K = 1,NLOCAL J = INT((B0(II+K)-FMIN)*FVAL) + 1.5 IF (J .LE. 1) THEN H(1) = H(1) + 1.0 ELSEIF (J. GE. 128) THEN H(128) =H(128) + 1.0 ELSE H(J) = H(J) + 1.0 ENDIF ENDDO ENDDO IF (MODE .EQ. 3) THEN H(129) = H(1) DO K = 2,128 H(128+K) = H(127+K) + H(K) ENDDO ENDIF RETURN C INCREMENTAL UPDATING OF HISTOGRAM 200 DO I = 1,NLOCAL NRUN = 1.0 HADD = -1.0 C FIRST COLUMN SUBTRACTED IN FIRST PASS, LAST COL. ADDED IN SECOND PASS II = NSAM*(NPTR(I)-1)+KCTR1 201 J = INT((B0(II)-FMIN)*FVAL)+1.5 IF (J .LE. 1) THEN H(1) = H(1) + HADD ELSEIF (J .GE. 128) THEN H(128) = H(128) + HADD ELSE H(J) = H(J) + HADD ENDIF IF (NRUN .EQ. 1) THEN II = II + NLOCAL -1 NRUN = 2 HADD = +1. GOTO 201 ENDIF ENDDO IF (MODE .EQ. 4) THEN H(129) = H(1) DO K = 2,128 H(128+K) = H(127+K)+H(K) ENDDO ENDIF RETURN END