subroutine spinoru(N,p,za,zb) c---Calculate spinor products c---extended to deal with negative energies ie with all momenta outgoing c---Arbitrary conventions of Bern, Dixon, Kosower, Weinzierl, c---za(i,j)*zb(j,i)=s(i,j) implicit none include 'constants.f' include 'zprods_decl.f' include 'sprods_com.f' double precision p(mxpart,4),rt(mxpart) double complex c23(mxpart),f(mxpart) integer i,j,N c---if one of the vectors happens to be zero this routine fails. do j=1,N za(j,j)=czip zb(j,j)=za(j,j) C-----positive energy case if (p(j,4) .gt. 0d0) then rt(j)=dsqrt(p(j,4)+p(j,1)) c23(j)=dcmplx(p(j,3),-p(j,2)) f(j)=cone else C-----negative energy case rt(j)=dsqrt(-p(j,4)-p(j,1)) c23(j)=dcmplx(-p(j,3),p(j,2)) f(j)=im endif enddo do i=2,N do j=1,i-1 s(i,j)=two*(p(i,4)*p(j,4)-p(i,1)*p(j,1) & -p(i,2)*p(j,2)-p(i,3)*p(j,3)) za(i,j)=f(i)*f(j) & *(c23(i)*dcmplx(rt(j)/rt(i))-c23(j)*dcmplx(rt(i)/rt(j))) if (abs(s(i,j)).lt.1d-5) then zb(i,j)=-(f(i)*f(j))**2*dconjg(za(i,j)) else zb(i,j)=-dcmplx(s(i,j))/za(i,j) endif za(j,i)=-za(i,j) zb(j,i)=-zb(i,j) s(j,i)=s(i,j) enddo enddo return end