1
subroutine jeexxx(eb,ef,shlf,chlf,phi,nhb,nhf,nsf , jee)
3
c This subroutine computes an off-shell photon wavefunction emitted from
4
c the electron or positron beam, with a special care for the small angle
5
c region. The momenta are measured in the laboratory frame, where the
6
c e- (e+) beam is along the positive (negative) z axis.
9
c real eb : energy (gev) of beam e-/e+
10
c real ef : energy (gev) of final e-/e+
11
c real shlf : sin(theta/2) of final e-/e+
12
c real chlf : cos(theta/2) of final e-/e+
13
c real phi : azimuthal angle of final e-/e+
14
c integer nhb = -1 or 1 : helicity of beam e-/e+
15
c integer nhf = -1 or 1 : helicity of final e-/e+
16
c integer nsf = -1 or 1 : +1 for electron, -1 for positron
19
c complex jee(6) : off-shell photon j^mu(<e|a|e>)
22
double complex jee(6),coeff
23
double precision cs(2),eb,ef,shlf,chlf,phi,alpha,gal,hi,sf,sfh
24
double precision x,me2,q2,rfp,rfm,snp,csp,rxc,c,s
27
double precision rZero, rHalf, rOne, rTwo, rFour, rOte
28
double precision rPi, rIalph
29
parameter( rZero = 0.0d0, rHalf = 0.5d0, rOne = 1.0d0 )
30
parameter( rTwo = 2.0d0, rFour = 4.0d0, rOte = 128.9d0 )
31
parameter( rPi = 3.14159265358979323846d0 )
32
parameter( rIalph = 137.0359895d0 )
35
parameter( me = 0.51099906d-3 )
40
parameter( epsi = 1.0d-5 )
47
& write(stdo,*) ' helas-error : eb in jeexxx is not positive'
49
& write(stdo,*) ' helas-error : ef in jeexxx is not positive'
51
write(stdo,*) ' helas-error : ef in jeexxx is greater than eb'
52
write(stdo,*) ' : eb = ',eb,' : ef = ',ef
54
if ( shlf.lt.rZero .or. shlf.gt.rOne ) then
55
write(stdo,*) ' helas-error : shlf in jeexxx is improper'
56
write(stdo,*) ' shlf = ',shlf
58
if ( chlf.lt.rZero .or. chlf.gt.rOne ) then
59
write(stdo,*) ' helas-error : chlf in jeexxx is improper'
60
write(stdo,*) ' chlf = ',chlf
62
zero = abs(shlf**2+chlf**2-rOne)
63
if ( zero.gt.epsi ) then
65
& ' helas-error : shlf and chlf in jeexxx are inconsistent'
66
write(stdo,*) ' shlf,chlf = ',shlf,chlf
68
if ( phi.lt.rZero .or. phi.gt.rTwo*rPi ) then
70
& ' helas-warn : phi in jeexxx does not lie on 0.0 thru 2.0*pi'
74
if ( abs(nhb).ne.1 ) then
75
write(stdo,*) ' helas-error : nhb in jeexxx is not -1,1'
76
write(stdo,*) ' : nhb = ',nhb
78
if ( abs(nhf).ne.1 ) then
79
write(stdo,*) ' helas-error : nhf in jeexxx is not -1,1'
80
write(stdo,*) ' : nhf = ',nhf
82
if ( abs(nsf).ne.1 ) then
83
write(stdo,*) ' helas-error : nsf in jeexxx is not -1,1'
84
write(stdo,*) ' : nsf = ',nsf
86
if ( eb.lt.rOne ) then
88
& ' helas-warn : use of jeexxx is not appropriate: eb too low'
95
gal = sqrt(alpha*rFour*rPi)
102
c cs(1)=chlf and cs(2)=shlf for electron
103
c cs(1)=shlf and cs(2)=chlf for positron
106
q2 = - rFour*cs(2)**2*(ef*eb-me2)
107
& + sf*(rOne-x)**2/x*(shlf+chlf)*(shlf-chlf)*me2
113
if ( nhb.eq.nhf ) then
114
rxc = rTwo*x/(rOne-x)*cs(1)**2
115
coeff = gal*rTwo*eb*sqrt(x)*cs(2)/q2
116
& *(dcmplx( rfp )-rfm*dcmplx( csp, -snp*hi ))*rHalf
117
jee(1) = dcmplx( rZero )
118
jee(2) = coeff*dcmplx( (rOne+rxc)*csp, -sfh*snp )
119
jee(3) = coeff*dcmplx( (rOne+rxc)*snp, sfh*csp )
120
jee(4) = coeff*(-sf*rxc/cs(1)*cs(2))
122
coeff = gal*me/q2/sqrt(x)
123
& *(dcmplx( rfp )+rfm*dcmplx( csp, snp*hi ))*rHalf*hi
124
jee(1) = -coeff*(rOne+x)*cs(2)*dcmplx( csp , sfh*snp )
125
jee(2) = coeff*(rOne-x)*cs(1)
126
jee(3) = jee(2)*dcmplx( rZero, sfh )
127
jee(4) = jee(1)*sf*(rOne-x)/(rOne+x)
130
c = (chlf+shlf)*(chlf-shlf)
133
jee(5) = -eb*dcmplx( rOne-x, sf-x*c )
134
jee(6) = eb*x*s*dcmplx( csp, snp )