

C++*********************************************************************
C
C PUTPT2.F                         
C                        USED RDPRM3S AUG 99 ARDEAN LEITH
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 PUTPT2(LUN2,NDOC,NSAM,NROW)
C
C PURPOSE:  SUPERPOSE ONTO AN IMAGE, 
C	    PIXELS IN LOCATIONS READ FROM  DOCUMENT FILE    
C            
C PARAMETERS: LUN2	        LOGICAL UNIT NUMBER OF I/O FILE
C	      NDOC	        LOGICAL UNIT NUMBER OF DOCUMENT FILE
C	      NSAM,NROW,NSLICE  DIMENSIONS OF INPUT FILE
C
C--*********************************************************************
 
	SUBROUTINE PUTPT2(LUN2,NDOC,NSAM,NROW,NSLICE)

C       DOC FIL CAN ONLY CONTAIN 99999 KEYS NOW
	PARAMETER (MAXPEAK=99999)
	COMMON NPEAK(MAXPEAK),BUF(4096)

	INCLUDE 'CMBLOCK.INC' 

        CHARACTER *81 SEQNAM,DOCNAM,FILNAM
	COMMON /COMMUN/SEQNAM,DOCNAM,FILNAM

	DIMENSION     PLIST(10)
        CHARACTER     NULL
#ifdef USE_MPI
        include 'mpif.h'
        INTEGER MYPID, ICOMM, MPIERR
        ICOMM   = MPI_COMM_WORLD
        MPIERR = 0
        CALL MPI_COMM_RANK(ICOMM, MYPID, MPIERR)
#else
        MYPID = -1
#endif

        NULL  = CHAR(0)

	CALL FILERD(DOCNAM,NLETD,NULL,'DOCUMENT',IRTFLG)
	IF (IRTFLG .NE. 0) RETURN

        IF (IFORM .EQ. 3) THEN
           CALL RDPRI3S(NCOLX,NCOLY,NCOLZ,NOT_USED,
     &               'X-COL, Y-COL, Z-COL',IRTFLG)
	   IF (IRTFLG .NE. 0) RETURN
        ELSE
	   CALL RDPRMI(NCOLX,NCOLY,NOT_USED,'X-COL, Y-COL')
           NCOLZ = 0
        ENDIF

C       NCOLP IS COLUMN OF DOC FILE CONTAINING PEAK HEIGHT (INTENSITY)
        CALL RDPRM2(COLP,HEIGHT,NOT_USED,
     &     'INTENSITY COLUMN (& INTENSITY IF NOT IN COL. OF DOC FILE)')
        NCOLP = 0
        IF (COLP .GT. 0) THEN
           NCOLP = COLP
        ELSEIF (COLP .LT. 0) THEN
           HEIGHT = -COLP
        ENDIF

        IF (IFORM .EQ. 3) THEN
           CALL RDPRM3S(XFACT,YFACT,ZFACT,NOT_USED,
     &          'X-FACTOR, Y-FACTOR, Z-FACTOR',IRTFLG)
 	   IF (IRTFLG .NE. 0) RETURN

           CALL RDPRM3S(XOFF,YOFF,ZOFF,NOT_USED,
     &                 'X-OFFSET, Y-OFFSET, Z-OFFSET',IRTFLG)
 	   IF (IRTFLG .NE. 0) RETURN

        ELSE
	   CALL RDPRM2(XFACT,YFACT,NOT_USED,'X-FACTOR, Y-FACTOR')
	   CALL RDPRM2(XOFF,YOFF,NOT_USED,'X-OFFSET, Y-OFFSET')
           ZOFF = 0.0
        ENDIF

	IF (XFACT .EQ. 0.0) XFACT = 1.0
	IF (YFACT .EQ. 0.0) YFACT = 1.0
	IF (ZFACT .EQ. 0.0) ZFACT = 1.0

	NVALU = MAX0(NCOLX,NCOLY,NCOLZ)
        NVALU = MAX0(NVALU,NCOLP)
        NUM   = MAXPEAK

        CALL RDPRAI(NPEAK,MAXPEAK,NUM,0,99999,'ENTER KEY NUMBERS',
     &              NULL,IRTFLG)
        IF (IRTFLG .NE. 0) RETURN

        NOPEN  = 0
        NUMSET = 0
	DO  I=1,NUM
C          GET COORDS FROM DOCUMENT FILE

           CALL UNSAV(DOCNAM,NOPEN,NDOC,NPEAK(I),PLIST,NVALU,LERR,1)
           IF (LERR .NE. 0) GOTO 9300
           NOPEN = 1

           IF (NCOLX.EQ.0) THEN
              IXCOR = NPEAK(I) * XFACT - XOFF
           ELSE
              IXCOR = PLIST(NCOLX) * XFACT + 0.5 - XOFF
           ENDIF

           IYCOR = PLIST(NCOLY) * YFACT + 0.5 - SIGN(1.,YFACT) * YOFF
           IF (YFACT .LT. 0.0) IYCOR = NROW + IYCOR

           IF (IFORM .EQ. 3) THEN
              IZCOR = PLIST(NCOLZ) * ZFACT + 0.5 - SIGN(1.,ZFACT) * ZOFF
           ELSE
              IZCOR = 1
           ENDIF

           IF ((IXCOR .GT. NSAM   .OR. IXCOR .LE. 0) .OR.
     &         (IYCOR .GT. NROW   .OR. IYCOR .LE. 0) .OR.
     &         (IZCOR .GT. NSLICE .OR. IZCOR .LE. 0)) THEN
               IF (MYPID .LE. 0) 
     &         WRITE(NOUT,721) NPEAK(I),IXCOR,IYCOR,IZCOR
721            FORMAT(' *** LOCATION: ',I4,' : (',I5,',',I5,',',I5,
     &                ') OUTSIDE IMAGE, CONTINUING')
           ELSE
              IREC = (IZCOR -1) * NROW + IYCOR
              CALL REDLIN(LUN2,BUF,NSAM,IREC)
              IF (NCOLP .GE. 1)  HEIGHT = PLIST(NCOLP)

              BUF(IXCOR) = HEIGHT
              CALL WRTLIN(LUN2,BUF,NSAM,IREC)
              NUMSET = NUMSET + 1
           ENDIF
        ENDDO

9300    IF (MYPID .LE. 0) WRITE(NOUT,90) NUMSET
 90     FORMAT(' NUMBER OF LOCATIONS SET: ',I5)

        IF (NUMSET .GT. 0) THEN
C          SET FMIN, FMAX AS UNDETERMINED
           CALL SETPRM(LUN2,NSAM,NROW,0.0,0.0,0.0,'U')
        ENDIF
        
        CLOSE(LUN2)
	RETURN
	END

