******************************************************************************* * subroutine rantarg(rver,iseg) * * Returns a target vertex smeared according to 2-dim gaussian (beampar(1:6)) * in x,y for JVER(2)=2, or (x,y) = (0,0) for JVER(2)=0 and random * selection of target + uniform smearing along z in chosen target. * * All targets are assumed to be aligned and of same lateral extension! * * Lateral target segment displacements rae taken from Oracle. * A beam displacement with repect to the target is given by beampar(5) + (6). * * * last modified on: 26/09/2007 by R. Holzmann ******************************************************************************* implicit none #include "user.inc" #include "geatarget.inc" real rver(3) integer iseg real xrand(2), rangauss, xdum1, xdum2 external rangauss call grndm(xrand,2) do iseg=1,nSegments ! loop over normalized target integrals if(xrand(1).lt.targIntZ(iseg)) goto 2 enddo ! and select segment 2 rver(3) = position(3,iseg) + 2.*(xrand(2)-0.5)*size(3,iseg) ! z in mm if(jver(2).eq.0) then ! beam spot is assumed sharp rver(1) = 0.0 rver(2) = 0.0 else if(jver(2).eq.1) then ! sharp and displaced rver(1) = beampar(5) rver(2) = beampar(6) else if(jver(2).eq.2) then ! sample beam spot from 2-dim Gauss 1 rver(1) = beampar(5) + beampar(1)*rangauss(xdum1) rver(2) = beampar(6) + beampar(2)*rangauss(xdum2) if(shape(1:3).eq.'BOX') then ! square target if(rver(1).gt.size(1,iseg) .or. rver(2).gt.size(2,iseg)) + goto 1 if(rver(1).lt.-size(1,iseg) .or. rver(2).lt.-size(2,iseg)) + goto 1 else if(shape(1:4).eq.'TUBE') then ! disc target if(((rver(1)**2+rver(2)**2).gt.size(2,iseg)**2) + .or. ((rver(1)**2+rver(2)**2).lt.size(1,iseg)**2)) goto 1 else if(shape(1:4).eq.'ELTU') then ! elliptic target if((rver(1)/size(1,iseg))**2+(rver(2)/size(2,iseg))**2.gt.1.) + goto 1 endif endif rver(1) = rver(1) + position(1,iseg) rver(2) = rver(2) + position(2,iseg) return end