1
subroutine jioxxx(fi,fo,gc,vmass,vwidth , jio)
3
c This subroutine computes an off-shell vector current from an external
4
c fermion pair. The vector boson propagator is given in Feynman gauge
5
c for a massless vector and in unitary gauge for a massive vector.
8
c complex fi(6) : flow-in fermion |fi>
9
c complex fo(6) : flow-out fermion <fo|
10
c complex gc(2) : coupling constants gvf
11
c real vmass : mass of OUTPUT vector v
12
c real vwidth : width of OUTPUT vector v
15
c complex jio(6) : vector current j^mu(<fo|v|fi>)
18
double complex fi(6),fo(6),gc(2),jio(6),c0,c1,c2,c3,cs,d
19
double precision q(0:3),vmass,vwidth,q2,vm2
20
double complex cm2 ! mass**2- I Gamma mass (Fabio)
23
double precision rZero, rOne
24
parameter( rZero = 0.0d0, rOne = 1.0d0 )
25
double complex cImag, cZero
26
parameter( cImag = ( 0.0d0, 1.0d0 ), cZero = ( 0.0d0, 0.0d0 ) )
34
if ( abs(fi(1))+abs(fi(2))+abs(fi(3))+abs(fi(4)).eq.rZero ) then
35
write(stdo,*) ' helas-warn : fi in jioxxx is zero spinor'
37
if ( abs(fi(5))+abs(fi(6)).eq.rZero ) then
39
& ' helas-error : fi in jioxxx has zero momentum'
41
if ( abs(fo(1))+abs(fo(2))+abs(fo(3))+abs(fo(4)).eq.rZero ) then
42
write(stdo,*) ' helas-warn : fo in jioxxx is zero spinor'
44
if ( abs(fo(5))+abs(fo(6)).eq.rZero ) then
46
& ' helas-error : fo in jioxxx has zero momentum'
48
if ( gc(1).eq.cZero .and. gc(2).eq.cZero ) then
49
write(stdo,*) ' helas-error : gc in jioxxx is zero coupling'
51
if ( vmass.lt.rZero ) then
52
write(stdo,*) ' helas-error : vmass in jioxxx is negative'
53
write(stdo,*) ' : vmass = ',vmass
55
if ( vwidth.lt.rZero ) then
56
write(stdo,*) ' helas-error : vwidth in jioxxx is negative'
57
write(stdo,*) ' : vwidth = ',vwidth
68
q2 = q(0)**2-(q(1)**2+q(2)**2+q(3)**2)
72
if ( abs(jio(5))+abs(jio(6)).eq.rZero ) then
74
& ' helas-error : jio in jioxxx has zero momentum'
76
if ( vwidth.eq.rZero .and. q2.eq.vm2 ) then
78
& ' helas-error : jio in jioxxx is on vmass pole'
80
& ' : q = ',q(0),q(1),q(2),q(3)
82
& ' : abs(q)= ',sqrt(abs(q2))
91
if ( vmass.ne.rZero ) then
93
d = rOne/dcmplx( q2-vm2, vmass*vwidth )
94
c For the running width, use below instead of the above d.
95
c d = rOne/dcmplx( q2-vm2, max(vwidth*q2/vmass,rZero) )
98
if ( gc(2).ne.cZero ) then
99
c0 = gc(1)*( fo(3)*fi(1)+fo(4)*fi(2))
100
& +gc(2)*( fo(1)*fi(3)+fo(2)*fi(4))
101
c1 = -gc(1)*( fo(3)*fi(2)+fo(4)*fi(1))
102
& +gc(2)*( fo(1)*fi(4)+fo(2)*fi(3))
103
c2 =( gc(1)*( fo(3)*fi(2)-fo(4)*fi(1))
104
& +gc(2)*(-fo(1)*fi(4)+fo(2)*fi(3)))*cImag
105
c3 = gc(1)*(-fo(3)*fi(1)+fo(4)*fi(2))
106
& +gc(2)*( fo(1)*fi(3)-fo(2)*fi(4))
109
c0 = fo(3)*fi(1)+fo(4)*fi(2)
110
c1 = -fo(3)*fi(2)-fo(4)*fi(1)
111
c2 = ( fo(3)*fi(2)-fo(4)*fi(1))*cImag
112
c3 = -fo(3)*fi(1)+fo(4)*fi(2)
115
c Fabio's implementation of the fixed width
116
cm2=dcmplx( vm2, -vmass*vwidth )
117
c cs = (q(0)*c0-q(1)*c1-q(2)*c2-q(3)*c3)/vm2
118
cs = (q(0)*c0-q(1)*c1-q(2)*c2-q(3)*c3)/cm2
119
jio(1) = (c0-cs*q(0))*d
120
jio(2) = (c1-cs*q(1))*d
121
jio(3) = (c2-cs*q(2))*d
122
jio(4) = (c3-cs*q(3))*d
126
d = dcmplx( rOne/q2, rZero )
127
if ( gc(2).ne.cZero ) then
128
jio(1) = ( gc(1)*( fo(3)*fi(1)+fo(4)*fi(2))
129
& +gc(2)*( fo(1)*fi(3)+fo(2)*fi(4)) )*d
130
jio(2) = (-gc(1)*( fo(3)*fi(2)+fo(4)*fi(1))
131
& +gc(2)*( fo(1)*fi(4)+fo(2)*fi(3)) )*d
132
jio(3) = ( gc(1)*( fo(3)*fi(2)-fo(4)*fi(1))
133
& +gc(2)*(-fo(1)*fi(4)+fo(2)*fi(3)))
135
jio(4) = ( gc(1)*(-fo(3)*fi(1)+fo(4)*fi(2))
136
& +gc(2)*( fo(1)*fi(3)-fo(2)*fi(4)) )*d
139
jio(1) = ( fo(3)*fi(1)+fo(4)*fi(2))*d
140
jio(2) = -( fo(3)*fi(2)+fo(4)*fi(1))*d
141
jio(3) = ( fo(3)*fi(2)-fo(4)*fi(1))*d*cImag
142
jio(4) = (-fo(3)*fi(1)+fo(4)*fi(2))*d