You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

85 lines
1.6 KiB

!
! SPDX-License-Identifier: GPL-3.0-or-later
! Copyright (C) 2019-2022, respective authors of MCFM.
!
subroutine ubarspinor0(q,i,f)
implicit none
include 'types.f'
include 'cplx.h'
c-----subroutine for massless ubar spinor
c Weyl representation
include 'swapxz.f'
integer:: i
complex(dp):: p(4),q(4),f(4),fc,czip
real(dp):: px,py,phase
parameter(czip=(0._dp,0._dp))
logical,save::first
data first/.true./
if (first) then
write(6,*) 'ubarspinor0:swapxz=',swapxz
first=.false.
endif
c Translate from MCFM notation
p(1)=q(4)
p(2)=q(3)
p(3)=-q(2)
p(4)=q(1)
if (swapxz) then
c performing the swap (x<->z),(y->-y)
p(1)=q(4)
p(2)=q(3)
p(3)=-q(2)
p(4)=q(1)
else
p(1)=q(4)
p(2)=q(1)
p(3)=q(2)
p(4)=q(3)
endif
px=+real(p(2))
py=+real(p(3))
c pz=+real(p(4))
fc=sqrt(p(1)+p(4))
if (real(p(1)+p(4)) > 0) then
phase=1._dp
else
phase=-1._dp
endif
if (abs(fc)>1.e-8_dp) then
if (i == 1) then
f(1)=czip
f(2)=czip
f(3)=+fc
f(4)=cplx2(px,-py)/fc
elseif (i == -1) then
f(1)=cplx2(px,py)/fc
f(2)=-fc
f(3)=czip
f(4)=czip
endif
else
if (i == 1) then
f(1)=czip
f(2)=czip
f(3)=czip
f(4)=-phase*sqrt(2._dp*p(1))
elseif (i == -1) then
f(1)=phase*sqrt(2._dp*p(1))
f(2)=czip
f(3)=czip
f(4)=czip
endif
endif
return
end