C++********************************************************************* C C CENT.F 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 CENT C C--********************************************************************* SUBROUTINE CENT INCLUDE 'CMBLOCK.INC' INCLUDE 'CMLIMIT.INC' CHARACTER(LEN=MAXNAM) :: FILNAM REAL, ALLOCATABLE, DIMENSION(:,:) :: AIMG CHARACTER *1 NULL DATA LUN1/21/ #ifdef USE_MPI include 'mpif.h' INTEGER MYPID, COMM, IERR COMM = MPI_COMM_WORLD CALL MPI_COMM_RANK(COMM, MYPID, IERR) #else MYPID = -1 #endif NULL=CHAR(0) MAXIM = 0 CALL OPFILEC(0,.TRUE.,FILNAM,LUN1,'O',ITYPE,NSAM,NROW,NSLICE, & MAXIM,'INPUT',.FALSE.,IRTFLG) IF (IRTFLG .NE. 0) RETURN IF (IFORM.EQ.1) THEN ALLOCATE (AIMG(NSAM,NROW), STAT=IRTFLG) IF (IRTFLG.NE.0) THEN CALL ERRT(46,'CENT, AIMG',IER) GOTO 505 ENDIF CALL READV(LUN1,AIMG,NSAM,NROW,NSAM,NROW,NSLICE) CALL CENT_D(AIMG,NSAM,NROW,SNS,SNR) M = NSAM/2+1 SNS = SNS-M M = NROW/2+1 SNR = SNR-M NS = INT(SNS) NR = INT(SNR) #ifdef USE_MPI IF (MYPID .EQ. 0) THEN WRITE(NOUT,2222) NS,NR,SNS,SNR ENDIF #else WRITE(NOUT,2222) NS,NR,SNS,SNR #endif 2222 FORMAT(/,' Approximated center of gravity',/, & ' x y',/, & ' ', i5,' ',i5,/, & ' ',f8.3,' ',f8.3,/) CALL REG_SET_NSEL(1,4,FLOAT(NS),FLOAT(NR),SNS,SNR,0.0, & IRTFLG) CLOSE(LUN1) DEALLOCATE (AIMG) 5 RETURN ELSEIF(ITYPE.EQ.3) THEN CALL CENT_3(LUN1,NSAM,NROW,NSLICE,SNS,SNR,SNC) M=NSAM/2+1 SNS=SNS-M M=NROW/2+1 SNR=SNR-M M=NSLICE/2+1 SNC=SNC-M NS=INT(SNS) NR=INT(SNR) NC=INT(SNC) #ifdef USE_MPI IF (MYPID .EQ. 0) THEN WRITE(NOUT,3333) NS,NR,NC,SNS,SNR,SNC ENDIF #else WRITE(NOUT,3333) NS,NR,NC,SNS,SNR,SNC #endif 3333 FORMAT(/,' Approximated center of gravity',/, & ' x y z',/, & ' ', i5,' ',i5,' ',i5,/, & ' ',f8.3,' ',f8.3,' ',f8.3,/) CALL REG_SET_NSEL(1,5,FLOAT(NS), FLOAT(NR), FLOAT(NC), & SNS, SNR, IRTFLG) CALL REG_SET_NSEL(6,1,SNC, 0.0, 0.0, 0.0, 0.0,IRTFLG) CLOSE(LUN1) RETURN ELSE 145 CALL ERRT(2,'CENT ',NE) ENDIF 505 CLOSE(LUN1) END