*
* $Id: gukine.F,v 1.2 1996/02/22 13:32:38 ravndal Exp $
*
* $Log: gukine.F,v $
* Revision 1.2  1996/02/22 13:32:38  ravndal
* Cleaning up CARTOCVS conversion
*
* Revision 1.1.1.1  1995/10/24 10:22:24  cernlib
* Geant
*
*
#include "geant321/pilot.h"
*CMZ :  3.21/02 29/03/94  15.41.36  by  S.Giani
*-- Author :
      SUBROUTINE GUKINE
*
************************************************************************
*                                                                      *
*             GEANT3 user routine to generate Kinematics               *
*               for primary tracks                                     *
*                                                                      *
************************************************************************
*
#include "geant321/gcbank.inc"
#include "geant321/gcflag.inc"
#include "geant321/gckine.inc"
#include "urgeom.inc"
#include "tstcom.inc"
#include "hboot.inc"
*
      DIMENSION VERTEX(3), PLAB(3), BUF(10), MHE1(5)
      DATA NBUF /1/, BUF /10*0.0/
      DATA MHE1 /4HJHE1, 1, 1, 20, 3/, NZERO /0/
*
      IF (LHBOOT(1) .EQ. 1) THEN
 
*             Define "JHE1" bank to be saved
         JHE1 = LQ(JHEAD-1)
         IF (JHE1.NE.0) CALL MZDROP (IXSTOR, JHE1, '    ' )
         CALL MZLIFT (IXSTOR, JHE1, JHEAD, -1, MHE1, NZERO)
   10    CALL RANNOR(RANX, RANY)
         XYZ(1) = XY0(1) + RANX * SIGBX
         XYZ(2) = XY0(2) + RANY * SIGBY
         IF(ABS(XYZ(1)).GT.BSPOT.OR.ABS(XYZ(2)).GT.BSPOT) GO TO 10
         XYZ(3) = XY0(3)
         PXYZ(1) = PPART*SIN(ANGL(2))*COS(ANGL(1))
         PXYZ(2) = PPART*SIN(ANGL(2))*SIN(ANGL(1))
         PXYZ(3) = PPART*COS(ANGL(2))
*
      ELSE
*
         RANX=RNDM(DUMMY)
         RANY=RNDM(DUMMY)
         XYZ(1) = XY0(1) + RANX * SIGBX
         XYZ(2) = XY0(2) + RANY * SIGBY
*
   20    RANZ=RNDM(DUMMY)
         DZ = RANZ * SIGBZ
   30    XYZ(3) = XY0(3) + DZ
         CALL HFILL(25,DZ,0.,1.)
*
* *** Energy of the incident particle
*
         ISHOW = ISHOW+1
         IF(ISHOW.GT.NSHOW(IENERG)) THEN
            IF(ITHETA.EQ.9) THEN
               CALL SUMANG
               IENERG = IENERG+1
               ISHOW = 1
               ITHETA = 0
            ELSE
               ITHETA = ITHETA +1
               ISHOW = 1
            ENDIF
         ENDIF
*
         IF(ISHOW.EQ.1) THEN
            JPA = LQ(JPART-KPART)
            AMASS = Q(JPA+7)
            EKINE = ESHOW(IENERG)
            PPART=SQRT((EKINE+2.*AMASS)*EKINE)
            WRITE(6,10000) IENERG,ITHETA,EKINE,PPART,IEVENT
10000  FORMAT('   IENERG',I4,'   ITHETA',I4,'   EKINE,PPART',
     +        2F9.5,'   IEVENTS',I8)
         ENDIF
*
         THET = 3.1415926535/18.*ITHETA
         PXYZ(1) = PPART*SIN(THET)
         PXYZ(2) = 0.0
         PXYZ(3) = PPART*COS(THET)
*
         LHBEG=0
      END IF
 
      CALL GSVERT(XYZ,0,0,0,0,NVERT)
      CALL GSKINE(PXYZ,KPART,NVERT,BUF,NBUF,NT)
*
*              Kinematic debug (controled by ISWIT(1))
      IF(IDEBUG.EQ.1.AND.ISWIT(1).EQ.1) THEN
         CALL GPRINT('VERT',0)
         CALL GPRINT('KINE',0)
      ENDIF
*
      END