#include "geant321/pilot.h"
c
c----------------------------------------------------------------------
c
      subroutine gustep
c
c     T. Prokscha,      15-Sep-2000,    PSI
c
c     Unix Version,     part of the geant_lemsr program
c
c       TP,     05-Apr-2001,    PSI             Unix, NT, Linux
c
c----------------------------------------------------------------------
c
      implicit none
c
c     include again some GEANT variables
c
#define CERNLIB_TYPE
#include "geant321/gckine.inc"
#include "geant321/gctrak.inc"
#include "geant321/gctmed.inc"
#include "geant321/gcking.inc"
#include "geant321/gcsets.inc"
#include "geant321/gcvolu.inc"  
#include "geant321/gclist.inc"        
#include "geant321/gcflag.inc"        
c
c     NTuple variable and other common variables
c
#include "cwn.inc"
#include "common.inc"
c
      integer*4     j, part
      integer*4     ihit
c
      real*4        hits(7)
c
c------------------------------------------------------------------
c
c     store secondary particle data to GEANT structure JSTAK
c
      do j = 1,ngkine                     
            part = gkin(5,j)
            if ( part .eq. 4 ) then     ! neutrinos, discard them
                iflgk(j) = -1
            elseif ( part .eq. 2) then  ! save e+ in JKINE and transport
                if ( l_pos) then
                    iflgk(j) = 1
                else
                    iflgk(j) = -1
                endif           
            elseif ( part .eq. 1) then
                if ( l_gam ) then
                    iflgk(j) = 0                ! simply transport the rest
                else
                    iflgk(j) = -1
                endif
            elseif ( part .eq. 3) then
                if ( l_ele ) then
                    iflgk(j) = 0                ! simply transport the rest
                else
                    iflgk(j) = -1
                endif
            else                                ! discard other part. in any
                    iflgk(j) = -1               ! case
            endif
      enddo
      call gsking(0)      ! store secondary particle data to JSTAK
c
c
c      print*,' particle type          = ',ipart
c      print*,' tracking medium number = ',numed
c      print*,' isvol                  = ',isvol
c      print*,' current track position = ',vect(1),vect(2),vect(3)
c      print*,' current momentum       = ',vect(4),vect(5),vect(6)
c      print*,' total momentum         = ',vect(7)
c      print*,' current kinetic energy = ',gekin 
c      print*,' number of steps for    = ',nstep
c      print*,' total energy lost      = ',destep
c      print*,' current TOF            = ',tofg
c      print*,' istop                  = ',istop
c      print*,' igauto                 = ',idecad
c      print*,' inwvol                 = ',inwvol
c      print*,'---------------------'
c
c
      if ( lplot(1) .gt. 0) call gdcxyz
c
c       store spatial,momentum and energy loss data to GEANT data structure
c       JXYZ
c
c       call gsxyz
c       call gpcxyz
c
c       look where the e+ stops
c
        if (ipart.eq.2.and.(inwvol.eq.3.or.istop.ge.1)) then
c
            nt_xe   = vect(1)
            nt_ye   = vect(2)
            nt_ze   = vect(3)
            nt_eposend   = 1000. * gekin
c
        endif
c
c       look now for detector hits
c
        if ( idtype .eq. 1) then
c
            hits(1) = vect(1)
            hits(2) = vect(2)
            hits(3) = vect(3)
            hits(4) = tofg
            hits(5) = gekin
            hits(6) = destep
            hits(7) = float(ipart)
            call gsahit(iset,idet,itra,numbv,hits,ihit)        ! MCP
            if ( lplot(1) .gt. 0 ) then     ! draw and plot hit
                call gphits('MDET','DMCP')
                call gdhits('MDET','DMCP',0,854,.3)
            endif           
c
        endif
c
        if ( idtype .eq. 2) then
c
            hits(1) = vect(1)
            hits(2) = vect(2)
            hits(3) = vect(3)
            hits(4) = tofg
            hits(5) = gekin
            hits(6) = destep
            hits(7) = float(ipart)
            call gsahit(iset,idet,itra,numbv,hits,ihit)        ! inner Scint.
            if ( lplot(1) .gt. 0 ) then     ! plot hit
                call gphits('ISSC','SCIS')
                call gdhits('ISSC','SCIS',0,852,.3)
            endif           
c
        endif
c
        if ( idtype .eq. 3) then
c
            hits(1) = vect(1)
            hits(2) = vect(2)
            hits(3) = vect(3)
            hits(4) = tofg
            hits(5) = gekin
            hits(6) = destep
            hits(7) = float(ipart)
            call gsahit(iset,idet,itra,numbv,hits,ihit)        ! outer Scint.
c
            if ( lplot(1) .gt. 0 ) then     ! plot hit
                call gphits('OSSC','SCOS')
                call gdhits('OSSC','SCOS',0,842,.3)
            endif           
c
      endif
      return
      end
