]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ISAJET/code/dhelas.F
Extracting PHOS and EMCAL trackers from the correspondig reconstructors (Yu.Belikov)
[u/mrichter/AliRoot.git] / ISAJET / code / dhelas.F
CommitLineData
0795afa3 1#include "isajet/pilot.h"
2C *********************************************************************
3C *** ***
4C *** coded by H. Murayama & I. Watanabe ***
5C *** For the formalism and notations, see the following reference: ***
6C *** H. Murayama, I. Watanabe and K. Hagiwara ***
7C *** "HELAS: HELicity Amplitude Subroutines ***
8C *** for Feynman diagram evaluation" ***
9C *** KEK Report 91-11, December 1991 ***
10C *** ***
11C *********************************************************************
12C
13C Converted to double precision by W. Long and T. Seltzer for MadGraph.
14C
15C Minor changes for portability by FEP, July 1999. The code is not ANSI
16C standard, but that cannot be helped if MadGraph compatibility is to
17C be maintained.
18C
19C ======================================================================
20C
21 SUBROUTINE BOOSTX(P,Q , PBOOST)
22C
23C this subroutine performs the lorentz boost of a four-momentum. the
24C momentum p is assumed to be given in the rest frame of q. pboost is
25C the momentum p boosted to the frame in which q is given. q must be a
26C timelike momentum.
27C
28C input:
29C real p(0:3) : four-momentum p in the q rest frame
30C real q(0:3) : four-momentum q in the boosted frame
31C
32C output:
33C real pboost(0:3) : four-momentum p in the boosted frame
34C
35#if defined(CERNLIB_IMPNONE)
36 IMPLICIT NONE
37#endif
38 REAL*8 P(0:3),Q(0:3),PBOOST(0:3),PQ,QQ,M,LF
39 REAL*8 RXZERO
40 PARAMETER( RXZERO=0.0D0 )
41C
42 QQ=Q(1)**2+Q(2)**2+Q(3)**2
43C
44 IF ( QQ .NE. RXZERO ) THEN
45 PQ=P(1)*Q(1)+P(2)*Q(2)+P(3)*Q(3)
46 M=SQRT(Q(0)**2-QQ)
47 LF=((Q(0)-M)*PQ/QQ+P(0))/M
48 PBOOST(0) = (P(0)*Q(0)+PQ)/M
49 PBOOST(1) = P(1)+Q(1)*LF
50 PBOOST(2) = P(2)+Q(2)*LF
51 PBOOST(3) = P(3)+Q(3)*LF
52 ELSE
53 PBOOST(0)=P(0)
54 PBOOST(1)=P(1)
55 PBOOST(2)=P(2)
56 PBOOST(3)=P(3)
57 ENDIF
58C
59 RETURN
60 END
61C
62C **********************************************************************
63C
64 SUBROUTINE COUP1X(SW2 , GW,GWWA,GWWZ)
65C
66C this subroutine sets up the coupling constants of the gauge bosons in
67C the standard model.
68C
69C input:
70C real sw2 : square of sine of the weak angle
71C
72C output:
73C real gw : weak coupling constant
74C real gwwa : dimensionless coupling of w-,w+,a
75C real gwwz : dimensionless coupling of w-,w+,z
76C
77#if defined(CERNLIB_IMPNONE)
78 IMPLICIT NONE
79#endif
80 REAL*8 SW2,GW,GWWA,GWWZ,ALPHA,FOURPI,EE,SW,CW
81 REAL*8 RXONE, RXFOUR, RXOTE, RXPI, RIALPH
82 PARAMETER( RXONE=1.0D0, RXFOUR=4.0D0, RXOTE=128.0D0 )
83 PARAMETER( RXPI=3.14159265358979323846D0, RIALPH=137.0359895D0 )
84C
85 ALPHA = RXONE / RXOTE
86C alpha = r_one / r_ialph
87 FOURPI = RXFOUR * RXPI
88 EE=SQRT( ALPHA * FOURPI )
89 SW=SQRT( SW2 )
90 CW=SQRT( RXONE - SW2 )
91C
92 GW = EE/SW
93 GWWA = EE
94 GWWZ = EE*CW/SW
95C
96 RETURN
97 END
98C
99C ----------------------------------------------------------------------
100C
101 SUBROUTINE COUP2X(SW2 , GAL,GAU,GAD,GWF,GZN,GZL,GZU,GZD,G1)
102C
103C this subroutine sets up the coupling constants for the fermion-
104C fermion-vector vertices in the standard model. the array of the
105C couplings specifies the chirality of the flowing-in fermion. g??(1)
106C denotes a left-handed coupling, and g??(2) a right-handed coupling.
107C
108C input:
109C real sw2 : square of sine of the weak angle
110C
111C output:
112C real gal(2) : coupling with a of charged leptons
113C real gau(2) : coupling with a of up-type quarks
114C real gad(2) : coupling with a of down-type quarks
115C real gwf(2) : coupling with w-,w+ of fermions
116C real gzn(2) : coupling with z of neutrinos
117C real gzl(2) : coupling with z of charged leptons
118C real gzu(2) : coupling with z of up-type quarks
119C real gzd(2) : coupling with z of down-type quarks
120C real g1(2) : unit coupling of fermions
121C
122#if defined(CERNLIB_IMPNONE)
123 IMPLICIT NONE
124#endif
125 REAL*8 GAL(2),GAU(2),GAD(2),GWF(2),GZN(2),GZL(2),GZU(2),GZD(2),
126 & G1(2),SW2,ALPHA,FOURPI,EE,SW,CW,EZ,EY
127C
128 REAL*8 RXZERO, RXHALF, RXONE, RXTWO, RTHREE, RXFOUR, RXOTE
129 REAL*8 RXPI, RIALPH
130 PARAMETER( RXZERO=0.0D0, RXHALF=0.5D0, RXONE=1.0D0, RXTWO=2.0D0,
131 $ RTHREE=3.0D0 )
132 PARAMETER( RXFOUR=4.0D0, RXOTE=128.0D0 )
133 PARAMETER( RXPI=3.14159265358979323846D0, RIALPH=137.0359895D0 )
134C
135 ALPHA = RXONE / RXOTE
136C alpha = r_one / r_ialph
137 FOURPI = RXFOUR * RXPI
138 EE=SQRT( ALPHA * FOURPI )
139 SW=SQRT( SW2 )
140 CW=SQRT( RXONE - SW2 )
141 EZ=EE/(SW*CW)
142 EY=EE*(SW/CW)
143C
144 GAL(1) = EE
145 GAL(2) = EE
146 GAU(1) = -EE*RXTWO/RTHREE
147 GAU(2) = -EE*RXTWO/RTHREE
148 GAD(1) = EE /RTHREE
149 GAD(2) = EE /RTHREE
150 GWF(1) = -EE/SQRT(RXTWO*SW2)
151 GWF(2) = RXZERO
152 GZN(1) = -EZ* RXHALF
153 GZN(2) = RXZERO
154 GZL(1) = -EZ*(-RXHALF+SW2)
155 GZL(2) = -EY
156 GZU(1) = -EZ*( RXHALF-SW2*RXTWO/RTHREE)
157 GZU(2) = EY* RXTWO/RTHREE
158 GZD(1) = -EZ*(-RXHALF+SW2 /RTHREE)
159 GZD(2) = -EY /RTHREE
160 G1(1) = RXONE
161 G1(2) = RXONE
162C
163 RETURN
164 END
165C
166C ----------------------------------------------------------------------
167C
168 SUBROUTINE COUP3X(SW2,ZMASS,HMASS ,
169 & GWWH,GZZH,GHHH,GWWHH,GZZHH,GHHHH)
170C
171C this subroutine sets up the coupling constants of the gauge bosons and
172C higgs boson in the standard model.
173C
174C input:
175C real sw2 : square of sine of the weak angle
176C real zmass : mass of z
177C real hmass : mass of higgs
178C
179C output:
180C real gwwh : dimensionful coupling of w-,w+,h
181C real gzzh : dimensionful coupling of z, z, h
182C real ghhh : dimensionful coupling of h, h, h
183C real gwwhh : dimensionful coupling of w-,w+,h, h
184C real gzzhh : dimensionful coupling of z, z, h, h
185C real ghhhh : dimensionless coupling of h, h, h, h
186C
187#if defined(CERNLIB_IMPNONE)
188 IMPLICIT NONE
189#endif
190 REAL*8 SW2,ZMASS,HMASS,GWWH,GZZH,GHHH,GWWHH,GZZHH,GHHHH,
191 & ALPHA,FOURPI,EE2,SC2,V
192C
193 REAL*8 RXHALF, RXONE, RXTWO, RTHREE, RXFOUR, RXOTE
194 REAL*8 RXPI, RIALPH
195 PARAMETER( RXHALF=0.5D0, RXONE=1.0D0, RXTWO=2.0D0, RTHREE=3.0D0 )
196 PARAMETER( RXFOUR=4.0D0, RXOTE=128.0D0 )
197 PARAMETER( RXPI=3.14159265358979323846D0, RIALPH=137.0359895D0 )
198C
199 ALPHA = RXONE / RXOTE
200C alpha = r_one / r_ialph
201 FOURPI = RXFOUR * RXPI
202 EE2=ALPHA*FOURPI
203 SC2=SW2*( RXONE - SW2 )
204 V = RXTWO * ZMASS*SQRT(SC2)/SQRT(EE2)
205C
206 GWWH = EE2/SW2*RXHALF*V
207 GZZH = EE2/SC2*RXHALF*V
208 GHHH = -HMASS**2/V*RTHREE
209 GWWHH = EE2/SW2*RXHALF
210 GZZHH = EE2/SC2*RXHALF
211 GHHHH = -(HMASS/V)**2*RTHREE
212C
213 RETURN
214 END
215C
216C ----------------------------------------------------------------------
217C
218 SUBROUTINE COUP4X(SW2,ZMASS,FMASS , GCHF)
219C
220C This subroutine sets up the coupling constant for the fermion-fermion-
221C Higgs vertex in the STANDARD MODEL. The coupling is COMPLEX and the
222C array of the coupling specifies the chirality of the flowing-IN
223C fermion. GCHF(1) denotes a left-handed coupling, and GCHF(2) a right-
224C handed coupling.
225C
226C INPUT:
227C real SW2 : square of sine of the weak angle
228C real ZMASS : Z mass
229C real FMASS : fermion mass
230C
231C OUTPUT:
232C complex GCHF(2) : coupling of fermion and Higgs
233C
234#if defined(CERNLIB_IMPNONE)
235 IMPLICIT NONE
236#endif
237 COMPLEX*16 GCHF(2)
238 REAL*8 SW2,ZMASS,FMASS,ALPHA,FOURPI,EZ,G
239C
240 ALPHA=1.D0/128.D0
241C ALPHA=1./REAL(137.0359895)
242 FOURPI=4.D0*3.14159265358979323846D0
243 EZ=SQRT(ALPHA*FOURPI)/SQRT(SW2*(1.D0-SW2))
244 G=EZ*FMASS*0.5D0/ZMASS
245C
246 GCHF(1) = DCMPLX( -G )
247 GCHF(2) = DCMPLX( -G )
248C
249 RETURN
250 END
251C
252C ======================================================================
253C
254 SUBROUTINE EAIXXX(EB,EA,SHLF,CHLF,PHI,NHE,NHA , EAI)
255C
256C This subroutine computes an off-shell electron wavefunction after
257C emitting a photon from the electron beam, with a special care for the
258C small angle region. The momenta are measured in the laboratory frame,
259C where the e- beam is along the positive z axis.
260C
261C INPUT:
262C real EB : energy (GeV) of beam e-
263C real EA : energy (GeV) of final photon
264C real SHLF : sin(theta/2) of final photon
265C real CHLF : cos(theta/2) of final photon
266C real PHI : azimuthal angle of final photon
267C integer NHE = -1 or 1 : helicity of beam e-
268C integer NHA = -1 or 1 : helicity of final photon
269C
270C OUTPUT:
271C complex EAI(6) : off-shell electron |e',A,e>
272C
273#if defined(CERNLIB_IMPNONE)
274 IMPLICIT NONE
275#endif
276 COMPLEX*16 EAI(6),PHS
277 REAL*8 EB,EA,SHLF,CHLF,PHI,ME,ALPHA,GAL,RNHE,X,C,S,D,COEFF,
278 & XNNP,XNNM,SNP,CSP
279 INTEGER NHE,NHA,NN
280C
281 ME = 0.51099906D-3
282 ALPHA=1./128.
283 GAL =SQRT(ALPHA*4.*3.14159265D0)
284C
285 NN=NHA*NHE
286 RNHE=NHE
287 X=EA/EB
288 C=(CHLF+SHLF)*(CHLF-SHLF)
289 S=2.*CHLF*SHLF
290 D=-1./(EA*EB*(4.*SHLF**2+(ME/EB)**2*C))
291 COEFF=-NN*GAL*SQRT(EB)*D
292 XNNP=X*(1+NN)
293 XNNM=X*(1-NN)
294 SNP=SIN(PHI)
295 CSP=COS(PHI)
296 PHS=DCMPLX( CSP , RNHE*SNP )
297C
298 EAI((5-3*NHE)/2) = -RNHE*COEFF*ME*S*(1.+XNNP*.5)
299 EAI((5-NHE)/2) = XNNP*COEFF*ME*CHLF**2*PHS
300 EAI((5+NHE)/2) = RNHE*COEFF*EB*S*(-2.+XNNM)
301 EAI((5+3*NHE)/2) = XNNM*COEFF*EB*SHLF**2*PHS*2.
302C
303 EAI(5) = EB*DCMPLX( 1.-X , 1.-X*C )
304 EAI(6) = -EB*X*S*DCMPLX( CSP , SNP )
305C
306 RETURN
307 END
308C
309C ----------------------------------------------------------------------
310C
311 SUBROUTINE EAOXXX(EB,EA,SHLF,CHLF,PHI,NHE,NHA , EAO)
312C
313C This subroutine computes an off-shell positron wavefunction after
314C emitting a photon from the positron beam, with a special care for the
315C small angle region. The momenta are measured in the laboratory frame,
316C where the e+ beam is along the negative z axis.
317C
318C INPUT:
319C real EB : energy (GeV) of beam e+
320C real EA : energy (GeV) of final photon
321C real SHLF : sin(theta/2) of final photon
322C real CHLF : cos(theta/2) of final photon
323C real PHI : azimuthal angle of final photon
324C integer NHE = -1 or 1 : helicity of beam e+
325C integer NHA = -1 or 1 : helicity of final photon
326C
327C OUTPUT:
328C complex EAO(6) : off-shell positron <e,A,e'|
329C
330#if defined(CERNLIB_IMPNONE)
331 IMPLICIT NONE
332#endif
333 COMPLEX*16 EAO(6),PHS
334 REAL*8 EB,EA,SHLF,CHLF,PHI,ME,ALPHA,GAL,RNHE,X,C,S,D,COEFF,
335 & XNNP,XNNM,SNP,CSP
336 INTEGER NHE,NHA,NN
337C
338 ME = 0.51099906D-3
339 ALPHA=1./128.
340 GAL =SQRT(ALPHA*4.*3.14159265D0)
341C
342 NN=NHA*NHE
343 RNHE=NHE
344 X=EA/EB
345 C=(CHLF+SHLF)*(CHLF-SHLF)
346 S=2.*CHLF*SHLF
347 D=-1./(EA*EB*(4.*CHLF**2-(ME/EB)**2*C))
348 COEFF=NN*GAL*SQRT(EB)*D
349 XNNP=X*(1+NN)
350 XNNM=X*(1-NN)
351 SNP=SIN(PHI)
352 CSP=COS(PHI)
353 PHS=DCMPLX( CSP ,-RNHE*SNP )
354C
355 EAO((5-3*NHE)/2) = COEFF*ME*S*(1.+XNNP*.5)
356 EAO((5-NHE)/2) = RNHE*XNNP *COEFF*ME*SHLF**2*PHS
357 EAO((5+NHE)/2) = COEFF*EB*S*(-2.+XNNM)
358 EAO((5+3*NHE)/2) = REAL(NHA-NHE)*COEFF*EB*X*CHLF**2*PHS*2.
359C
360 EAO(5) = EB*DCMPLX( X-1. , X*C+1. )
361 EAO(6) = EB*X*S*DCMPLX( CSP , SNP )
362C
363 RETURN
364 END
365C
366C ----------------------------------------------------------------------
367C
368 SUBROUTINE FSIXXX(FI,SC,GC,FMASS,FWIDTH , FSI)
369C
370C this subroutine computes an off-shell fermion wavefunction from a
371C flowing-in external fermion and a vector boson.
372C
373C input:
374C complex*16 fi(6) : flow-in fermion |fi>
375C complex*16 sc(3) : input scalar s
376C complex*16 gc(2) : coupling constants gchf
377C real*8 fmass : mass of output fermion f'
378C real*8 fwidth : width of output fermion f'
379C
380C output:
381C complex fsi(6) : off-shell fermion |f',s,fi>
382C
383#if defined(CERNLIB_IMPNONE)
384 IMPLICIT NONE
385#endif
386 COMPLEX*16 FI(6),SC(3),FSI(6),GC(2),SL1,SL2,SR1,SR2,DS
387 REAL*8 PF(0:3),FMASS,FWIDTH,PF2,P0P3,P0M3
388C
389 FSI(5) = FI(5)-SC(2)
390 FSI(6) = FI(6)-SC(3)
391C
392 PF(0)=DBLE( FSI(5))
393 PF(1)=DBLE( FSI(6))
394 PF(2)=DIMAG(FSI(6))
395 PF(3)=DIMAG(FSI(5))
396 PF2=PF(0)**2-(PF(1)**2+PF(2)**2+PF(3)**2)
397C
398 DS=-SC(1)/DCMPLX(PF2-FMASS**2,MAX(DSIGN(FMASS*FWIDTH ,PF2),0D0))
399 P0P3=PF(0)+PF(3)
400 P0M3=PF(0)-PF(3)
401 SL1=GC(1)*(P0P3*FI(1)+DCONJG(FSI(6))*FI(2))
402 SL2=GC(1)*(P0M3*FI(2) +FSI(6) *FI(1))
403 SR1=GC(2)*(P0M3*FI(3)-DCONJG(FSI(6))*FI(4))
404 SR2=GC(2)*(P0P3*FI(4) -FSI(6) *FI(3))
405C
406 FSI(1) = ( GC(1)*FMASS*FI(1) + SR1 )*DS
407 FSI(2) = ( GC(1)*FMASS*FI(2) + SR2 )*DS
408 FSI(3) = ( GC(2)*FMASS*FI(3) + SL1 )*DS
409 FSI(4) = ( GC(2)*FMASS*FI(4) + SL2 )*DS
410C
411 RETURN
412 END
413C
414C ----------------------------------------------------------------------
415C
416 SUBROUTINE FSOXXX(FO,SC,GC,FMASS,FWIDTH , FSO)
417C
418C this subroutine computes an off-shell fermion wavefunction from a
419C flowing-out external fermion and a vector boson.
420C
421C input:
422C complex*16 fo(6) : flow-out fermion <fo|
423C complex*16 sc(6) : input scalar s
424C complex*16 gc(2) : coupling constants gchf
425C real*8 fmass : mass of output fermion f'
426C real*8 fwidth : width of output fermion f'
427C
428C output:
429C complex fso(6) : off-shell fermion <fo,s,f'|
430C
431#if defined(CERNLIB_IMPNONE)
432 IMPLICIT NONE
433#endif
434 COMPLEX*16 FO(6),SC(6),FSO(6),GC(2),SL1,SL2,SR1,SR2,DS
435 REAL*8 PF(0:3),FMASS,FWIDTH,PF2,P0P3,P0M3
436C
437 FSO(5) = FO(5)+SC(2)
438 FSO(6) = FO(6)+SC(3)
439C
440 PF(0)=DBLE( FSO(5))
441 PF(1)=DBLE( FSO(6))
442 PF(2)=DIMAG(FSO(6))
443 PF(3)=DIMAG(FSO(5))
444 PF2=PF(0)**2-(PF(1)**2+PF(2)**2+PF(3)**2)
445C
446 DS=-SC(1)/DCMPLX(PF2-FMASS**2,MAX(DSIGN(FMASS*FWIDTH ,PF2),0D0))
447 P0P3=PF(0)+PF(3)
448 P0M3=PF(0)-PF(3)
449 SL1=GC(2)*(P0P3*FO(3) +FSO(6) *FO(4))
450 SL2=GC(2)*(P0M3*FO(4)+DCONJG(FSO(6))*FO(3))
451 SR1=GC(1)*(P0M3*FO(1) -FSO(6) *FO(2))
452 SR2=GC(1)*(P0P3*FO(2)-DCONJG(FSO(6))*FO(1))
453C
454 FSO(1) = ( GC(1)*FMASS*FO(1) + SL1 )*DS
455 FSO(2) = ( GC(1)*FMASS*FO(2) + SL2 )*DS
456 FSO(3) = ( GC(2)*FMASS*FO(3) + SR1 )*DS
457 FSO(4) = ( GC(2)*FMASS*FO(4) + SR2 )*DS
458C
459 RETURN
460 END
461C
462C ----------------------------------------------------------------------
463C
464 SUBROUTINE FVIXXX(FI,VC,G,FMASS,FWIDTH , FVI)
465C
466C this subroutine computes an off-shell fermion wavefunction from a
467C flowing-in external fermion and a vector boson.
468C
469C input:
470C complex fi(6) : flow-in fermion |fi>
471C complex vc(6) : input vector v
472C real g(2) : coupling constants gvf
473C real fmass : mass of output fermion f'
474C real fwidth : width of output fermion f'
475C
476C output:
477C complex fvi(6) : off-shell fermion |f',v,fi>
478C
479#if defined(CERNLIB_IMPNONE)
480 IMPLICIT NONE
481#endif
482 COMPLEX*16 FI(6),VC(6),FVI(6),SL1,SL2,SR1,SR2,D
483 REAL*8 G(2),PF(0:3),FMASS,FWIDTH,PF2
484 REAL*8 RXZERO, RXONE
485 PARAMETER( RXZERO=0.0D0, RXONE=1.0D0 )
486 COMPLEX*16 CXIMAG
487C
488 LOGICAL FIRST
489 SAVE CXIMAG,FIRST
490 DATA FIRST/.TRUE./
491C
492C Fix compilation with g77
493 IF(FIRST) THEN
494 FIRST=.FALSE.
495 CXIMAG=DCMPLX( RXZERO, RXONE )
496 ENDIF
497C
498 FVI(5) = FI(5)-VC(5)
499 FVI(6) = FI(6)-VC(6)
500C
501 PF(0)=DBLE( FVI(5))
502 PF(1)=DBLE( FVI(6))
503 PF(2)=DIMAG(FVI(6))
504 PF(3)=DIMAG(FVI(5))
505 PF2=PF(0)**2-(PF(1)**2+PF(2)**2+PF(3)**2)
506C
507 D=-RXONE/DCMPLX( PF2-FMASS**2,MAX(SIGN(FMASS*FWIDTH,PF2),RXZERO))
508 SL1= (VC(1)+ VC(4))*FI(1)
509 & +(VC(2)-CXIMAG*VC(3))*FI(2)
510 SL2= (VC(2)+CXIMAG*VC(3))*FI(1)
511 & +(VC(1)- VC(4))*FI(2)
512C
513 IF ( G(2) .NE. RXZERO ) THEN
514 SR1= (VC(1)- VC(4))*FI(3)
515 & -(VC(2)-CXIMAG*VC(3))*FI(4)
516 SR2=-(VC(2)+CXIMAG*VC(3))*FI(3)
517 & +(VC(1)+ VC(4))*FI(4)
518C
519 FVI(1) = ( G(1)*((PF(0)-PF(3))*SL1 -DCONJG(FVI(6))*SL2)
520 & +G(2)*FMASS*SR1)*D
521 FVI(2) = ( G(1)*( -FVI(6)*SL1 +(PF(0)+PF(3))*SL2)
522 & +G(2)*FMASS*SR2)*D
523 FVI(3) = ( G(2)*((PF(0)+PF(3))*SR1 +DCONJG(FVI(6))*SR2)
524 & +G(1)*FMASS*SL1)*D
525 FVI(4) = ( G(2)*( FVI(6)*SR1 +(PF(0)-PF(3))*SR2)
526 & +G(1)*FMASS*SL2)*D
527C
528 ELSE
529 FVI(1) = G(1)*((PF(0)-PF(3))*SL1 -DCONJG(FVI(6))*SL2)*D
530 FVI(2) = G(1)*( -FVI(6)*SL1 +(PF(0)+PF(3))*SL2)*D
531 FVI(3) = G(1)*FMASS*SL1*D
532 FVI(4) = G(1)*FMASS*SL2*D
533 END IF
534C
535 RETURN
536 END
537C
538C ----------------------------------------------------------------------
539C
540 SUBROUTINE FVOXXX(FO,VC,G,FMASS,FWIDTH , FVO)
541C
542C this subroutine computes an off-shell fermion wavefunction from a
543C flowing-out external fermion and a vector boson.
544C
545C input:
546C complex fo(6) : flow-out fermion <fo|
547C complex vc(6) : input vector v
548C real g(2) : coupling constants gvf
549C real fmass : mass of output fermion f'
550C real fwidth : width of output fermion f'
551C
552C output:
553C complex fvo(6) : off-shell fermion <fo,v,f'|
554C
555#if defined(CERNLIB_IMPNONE)
556 IMPLICIT NONE
557#endif
558 COMPLEX*16 FO(6),VC(6),FVO(6),SL1,SL2,SR1,SR2,D
559 REAL*8 G(2),PF(0:3),FMASS,FWIDTH,PF2
560 REAL*8 RXZERO, RXONE
561 PARAMETER( RXZERO=0.0D0, RXONE=1.0D0 )
562 COMPLEX*16 CXIMAG
563 LOGICAL FIRST
564 SAVE CXIMAG,FIRST
565 DATA FIRST/.TRUE./
566C
567C Fix compilation with g77
568 IF(FIRST) THEN
569 FIRST=.FALSE.
570 CXIMAG=DCMPLX( RXZERO, RXONE )
571 ENDIF
572C
573 FVO(5) = FO(5)+VC(5)
574 FVO(6) = FO(6)+VC(6)
575C
576 PF(0)=DBLE( FVO(5))
577 PF(1)=DBLE( FVO(6))
578 PF(2)=DIMAG(FVO(6))
579 PF(3)=DIMAG(FVO(5))
580 PF2=PF(0)**2-(PF(1)**2+PF(2)**2+PF(3)**2)
581C
582 D=-RXONE/DCMPLX( PF2-FMASS**2,MAX(SIGN(FMASS*FWIDTH,PF2),RXZERO))
583 SL1= (VC(1)+ VC(4))*FO(3)
584 & +(VC(2)+CXIMAG*VC(3))*FO(4)
585 SL2= (VC(2)-CXIMAG*VC(3))*FO(3)
586 & +(VC(1)- VC(4))*FO(4)
587C
588 IF ( G(2) .NE. RXZERO ) THEN
589 SR1= (VC(1)- VC(4))*FO(1)
590 & -(VC(2)+CXIMAG*VC(3))*FO(2)
591 SR2=-(VC(2)-CXIMAG*VC(3))*FO(1)
592 & +(VC(1)+ VC(4))*FO(2)
593C
594 FVO(1) = ( G(2)*( (PF(0)+PF(3))*SR1 +FVO(6)*SR2)
595 & +G(1)*FMASS*SL1)*D
596 FVO(2) = ( G(2)*( DCONJG(FVO(6))*SR1 +(PF(0)-PF(3))*SR2)
597 & +G(1)*FMASS*SL2)*D
598 FVO(3) = ( G(1)*( (PF(0)-PF(3))*SL1 -FVO(6)*SL2)
599 & +G(2)*FMASS*SR1)*D
600 FVO(4) = ( G(1)*(-DCONJG(FVO(6))*SL1 +(PF(0)+PF(3))*SL2)
601 & +G(2)*FMASS*SR2)*D
602C
603 ELSE
604 FVO(1) = G(1)*FMASS*SL1*D
605 FVO(2) = G(1)*FMASS*SL2*D
606 FVO(3) = G(1)*( (PF(0)-PF(3))*SL1 -FVO(6)*SL2)*D
607 FVO(4) = G(1)*(-DCONJG(FVO(6))*SL1 +(PF(0)+PF(3))*SL2)*D
608 END IF
609C
610 RETURN
611 END
612C
613C ----------------------------------------------------------------------
614C
615 SUBROUTINE GGGGXX(WM,W31,WP,W32,G, VERTEX)
616C
617C this subroutine computes an amplitude of the four-point coupling of
618C the w-, w+ and two w3/z/a. the amplitude includes the contributions
619C of w exchange diagrams. the internal w propagator is given in unitary
620C gauge. if one sets wmass=0.0, then the gggg vertex is given (see sect
621C 2.9.1 of the manual).
622C
623C input:
624C complex wm(0:3) : flow-out w- wm
625C complex w31(0:3) : first w3/z/a w31
626C complex wp(0:3) : flow-out w+ wp
627C complex w32(0:3) : second w3/z/a w32
628C real g : coupling of w31 with w-/w+
629C (see the table below)
630C
631C the possible sets of the inputs are as follows:
632C -------------------------------------------
633C | wm | w31 | wp | w32 | g31 | g32 |
634C -------------------------------------------
635C | w- | w3 | w+ | w3 | gw | gw |
636C | w- | w3 | w+ | z | gw | gwwz |
637C | w- | w3 | w+ | a | gw | gwwa |
638C | w- | z | w+ | z | gwwz | gwwz |
639C | w- | z | w+ | a | gwwz | gwwa |
640C | w- | a | w+ | a | gwwa | gwwa |
641C -------------------------------------------
642C where all the bosons are defined by the flowing-out quantum number.
643C
644C output:
645C complex vertex : amplitude gamma(wm,w31,wp,w32)
646C
647#if defined(CERNLIB_IMPNONE)
648 IMPLICIT NONE
649#endif
650 COMPLEX*16 WM(6),W31(6),WP(6),W32(6),VERTEX
651 COMPLEX*16 DV1(0:3),DV2(0:3),DV3(0:3),DV4(0:3),
652 & DVERTX,V12,V13,V14,V23,V24,V34
653 REAL*8 PWM(0:3),PW31(0:3),PWP(0:3),PW32(0:3),G
654 REAL*8 DP1(0:3),DP2(0:3),DP3(0:3),DP4(0:3)
655 REAL*8 RXZERO, RXONE
656 PARAMETER( RXZERO=0.0D0, RXONE=1.0D0 )
657C
658 PWM(0)=DBLE( WM(5))
659 PWM(1)=DBLE( WM(6))
660 PWM(2)=DIMAG(WM(6))
661 PWM(3)=DIMAG(WM(5))
662 PWP(0)=DBLE( WP(5))
663 PWP(1)=DBLE( WP(6))
664 PWP(2)=DIMAG(WP(6))
665 PWP(3)=DIMAG(WP(5))
666 PW31(0)=DBLE( W31(5))
667 PW31(1)=DBLE( W31(6))
668 PW31(2)=DIMAG(W31(6))
669 PW31(3)=DIMAG(W31(5))
670 PW32(0)=DBLE( W32(5))
671 PW32(1)=DBLE( W32(6))
672 PW32(2)=DIMAG(W32(6))
673 PW32(3)=DIMAG(W32(5))
674C
675 DV1(0)=DCMPLX(WM(1))
676 DV1(1)=DCMPLX(WM(2))
677 DV1(2)=DCMPLX(WM(3))
678 DV1(3)=DCMPLX(WM(4))
679 DP1(0)=DBLE(PWM(0))
680 DP1(1)=DBLE(PWM(1))
681 DP1(2)=DBLE(PWM(2))
682 DP1(3)=DBLE(PWM(3))
683 DV2(0)=DCMPLX(W31(1))
684 DV2(1)=DCMPLX(W31(2))
685 DV2(2)=DCMPLX(W31(3))
686 DV2(3)=DCMPLX(W31(4))
687 DP2(0)=DBLE(PW31(0))
688 DP2(1)=DBLE(PW31(1))
689 DP2(2)=DBLE(PW31(2))
690 DP2(3)=DBLE(PW31(3))
691 DV3(0)=DCMPLX(WP(1))
692 DV3(1)=DCMPLX(WP(2))
693 DV3(2)=DCMPLX(WP(3))
694 DV3(3)=DCMPLX(WP(4))
695 DP3(0)=DBLE(PWP(0))
696 DP3(1)=DBLE(PWP(1))
697 DP3(2)=DBLE(PWP(2))
698 DP3(3)=DBLE(PWP(3))
699 DV4(0)=DCMPLX(W32(1))
700 DV4(1)=DCMPLX(W32(2))
701 DV4(2)=DCMPLX(W32(3))
702 DV4(3)=DCMPLX(W32(4))
703 DP4(0)=DBLE(PW32(0))
704 DP4(1)=DBLE(PW32(1))
705 DP4(2)=DBLE(PW32(2))
706 DP4(3)=DBLE(PW32(3))
707C
708 V12= DV1(0)*DV2(0)-DV1(1)*DV2(1)-DV1(2)*DV2(2)-DV1(3)*DV2(3)
709 V13= DV1(0)*DV3(0)-DV1(1)*DV3(1)-DV1(2)*DV3(2)-DV1(3)*DV3(3)
710 V14= DV1(0)*DV4(0)-DV1(1)*DV4(1)-DV1(2)*DV4(2)-DV1(3)*DV4(3)
711 V23= DV2(0)*DV3(0)-DV2(1)*DV3(1)-DV2(2)*DV3(2)-DV2(3)*DV3(3)
712 V24= DV2(0)*DV4(0)-DV2(1)*DV4(1)-DV2(2)*DV4(2)-DV2(3)*DV4(3)
713 V34= DV3(0)*DV4(0)-DV3(1)*DV4(1)-DV3(2)*DV4(2)-DV3(3)*DV4(3)
714
715 DVERTX = V14*V23 -V13*V24
716C
717 VERTEX = DCMPLX( DVERTX ) * (G*G)
718C
719 RETURN
720 END
721C
722C ======================================================================
723C
724 SUBROUTINE GGGXXX(WM,WP,W3,G , VERTEX)
725C
726C this subroutine computes an amplitude of the three-point coupling of
727C the gauge bosons.
728C
729C input:
730C complex wm(6) : vector flow-out w-
731C complex wp(6) : vector flow-out w+
732C complex w3(6) : vector j3 or a or z
733C real g : coupling constant gw or gwwa or gwwz
734C
735C output:
736C complex vertex : amplitude gamma(wm,wp,w3)
737C
738#if defined(CERNLIB_IMPNONE)
739 IMPLICIT NONE
740#endif
741 COMPLEX*16 WM(6),WP(6),W3(6),VERTEX,
742 & XV1,XV2,XV3,V12,V23,V31,P12,P13,P21,P23,P31,P32
743 REAL*8 PWM(0:3),PWP(0:3),PW3(0:3),G
744 REAL*8 RXZERO, RTENTH
745 PARAMETER( RXZERO=0.0D0, RTENTH=0.1D0 )
746C
747 PWM(0)=DBLE( WM(5))
748 PWM(1)=DBLE( WM(6))
749 PWM(2)=DIMAG(WM(6))
750 PWM(3)=DIMAG(WM(5))
751 PWP(0)=DBLE( WP(5))
752 PWP(1)=DBLE( WP(6))
753 PWP(2)=DIMAG(WP(6))
754 PWP(3)=DIMAG(WP(5))
755 PW3(0)=DBLE( W3(5))
756 PW3(1)=DBLE( W3(6))
757 PW3(2)=DIMAG(W3(6))
758 PW3(3)=DIMAG(W3(5))
759C
760 V12=WM(1)*WP(1)-WM(2)*WP(2)-WM(3)*WP(3)-WM(4)*WP(4)
761 V23=WP(1)*W3(1)-WP(2)*W3(2)-WP(3)*W3(3)-WP(4)*W3(4)
762 V31=W3(1)*WM(1)-W3(2)*WM(2)-W3(3)*WM(3)-W3(4)*WM(4)
763 XV1=RXZERO
764 XV2=RXZERO
765 XV3=RXZERO
766 IF ( ABS(WM(1)) .NE. RXZERO ) THEN
767 IF (ABS(WM(1)).GE.MAX(ABS(WM(2)),ABS(WM(3)),ABS(WM(4)))
768 $ *RTENTH)
769 & XV1=PWM(0)/WM(1)
770 ENDIF
771 IF ( ABS(WP(1)) .NE. RXZERO) THEN
772 IF (ABS(WP(1)).GE.MAX(ABS(WP(2)),ABS(WP(3)),ABS(WP(4)))
773 $ *RTENTH)
774 & XV2=PWP(0)/WP(1)
775 ENDIF
776 IF ( ABS(W3(1)) .NE. RXZERO) THEN
777 IF ( ABS(W3(1)).GE.MAX(ABS(W3(2)),ABS(W3(3)),ABS(W3(4)))
778 $ *RTENTH)
779 & XV3=PW3(0)/W3(1)
780 ENDIF
781 P12= (PWM(0)-XV1*WM(1))*WP(1)-(PWM(1)-XV1*WM(2))*WP(2)
782 & -(PWM(2)-XV1*WM(3))*WP(3)-(PWM(3)-XV1*WM(4))*WP(4)
783 P13= (PWM(0)-XV1*WM(1))*W3(1)-(PWM(1)-XV1*WM(2))*W3(2)
784 & -(PWM(2)-XV1*WM(3))*W3(3)-(PWM(3)-XV1*WM(4))*W3(4)
785 P21= (PWP(0)-XV2*WP(1))*WM(1)-(PWP(1)-XV2*WP(2))*WM(2)
786 & -(PWP(2)-XV2*WP(3))*WM(3)-(PWP(3)-XV2*WP(4))*WM(4)
787 P23= (PWP(0)-XV2*WP(1))*W3(1)-(PWP(1)-XV2*WP(2))*W3(2)
788 & -(PWP(2)-XV2*WP(3))*W3(3)-(PWP(3)-XV2*WP(4))*W3(4)
789 P31= (PW3(0)-XV3*W3(1))*WM(1)-(PW3(1)-XV3*W3(2))*WM(2)
790 & -(PW3(2)-XV3*W3(3))*WM(3)-(PW3(3)-XV3*W3(4))*WM(4)
791 P32= (PW3(0)-XV3*W3(1))*WP(1)-(PW3(1)-XV3*W3(2))*WP(2)
792 & -(PW3(2)-XV3*W3(3))*WP(3)-(PW3(3)-XV3*W3(4))*WP(4)
793C
794 VERTEX = -(V12*(P13-P23)+V23*(P21-P31)+V31*(P32-P12))*G
795C
796 RETURN
797 END
798 SUBROUTINE HIOXXX(FI,FO,GC,SMASS,SWIDTH , HIO)
799C
800C this subroutine computes an off-shell scalar current from an external
801C fermion pair.
802C
803C input:
804C complex fi(6) : flow-in fermion |fi>
805C complex fo(6) : flow-out fermion <fo|
806C complex gc(2) : coupling constants gchf
807C real smass : mass of output scalar s
808C real swidth : width of output scalar s
809C
810C output:
811C complex hio(3) : scalar current j(<fi|s|fo>)
812C
813#if defined(CERNLIB_IMPNONE)
814 IMPLICIT NONE
815#endif
816 COMPLEX*16 FI(6),FO(6),HIO(3),GC(2),DN
817 REAL*8 Q(0:3),SMASS,SWIDTH,Q2
818C
819 HIO(2) = FO(5)-FI(5)
820 HIO(3) = FO(6)-FI(6)
821C
822 Q(0)=DBLE( HIO(2))
823 Q(1)=DBLE( HIO(3))
824 Q(2)=DIMAG(HIO(3))
825 Q(3)=DIMAG(HIO(2))
826 Q2=Q(0)**2-(Q(1)**2+Q(2)**2+Q(3)**2)
827C
828 DN=-DCMPLX(Q2-SMASS**2,DMAX1(DSIGN(SMASS*SWIDTH,Q2),0.D0))
829C
830 HIO(1) = ( GC(1)*(FO(1)*FI(1)+FO(2)*FI(2))
831 & +GC(2)*(FO(3)*FI(3)+FO(4)*FI(4)) )/DN
832C
833 RETURN
834 END
835C ----------------------------------------------------------------------
836C
837 SUBROUTINE HSSSXX(S1,S2,S3,G,SMASS,SWIDTH , HSSS)
838C
839C This subroutine computes an off-shell scalar current from the four-
840C scalar coupling.
841C
842C INPUT:
843C complex S1(3) : first scalar S1
844C complex S2(3) : second scalar S2
845C complex S3(3) : third scalar S3
846C real G : coupling constant GHHHH
847C real SMASS : mass of OUTPUT scalar S'
848C real SWIDTH : width of OUTPUT scalar S'
849C
850C OUTPUT:
851C complex HSSS(3) : scalar current J(S':S1,S2,S3)
852C
853#if defined(CERNLIB_IMPNONE)
854 IMPLICIT NONE
855#endif
856 COMPLEX*16 S1(3),S2(3),S3(3),HSSS(3),DG
857 REAL*8 Q(0:3),G,SMASS,SWIDTH,Q2
858C
859 HSSS(2) = S1(2)+S2(2)+S3(2)
860 HSSS(3) = S1(3)+S2(3)+S3(3)
861C
862 Q(0)=DBLE( HSSS(2))
863 Q(1)=DBLE( HSSS(3))
864 Q(2)=DIMAG(HSSS(3))
865 Q(3)=DIMAG(HSSS(2))
866 Q2=Q(0)**2-(Q(1)**2+Q(2)**2+Q(3)**2)
867C
868 DG=-G/DCMPLX( Q2-SMASS**2,MAX(SIGN(SMASS*SWIDTH ,Q2),0.D0))
869C
870 HSSS(1) = DG * S1(1)*S2(1)*S3(1)
871C
872 RETURN
873 END
874C ----------------------------------------------------------------------
875C
876 SUBROUTINE HSSXXX(S1,S2,G,SMASS,SWIDTH , HSS)
877C
878C This subroutine computes an off-shell scalar current from the three-
879C scalar coupling.
880C
881C INPUT:
882C complex S1(3) : first scalar S1
883C complex S2(3) : second scalar S2
884C real G : coupling constant GHHH
885C real SMASS : mass of OUTPUT scalar S'
886C real SWIDTH : width of OUTPUT scalar S'
887C
888C OUTPUT:
889C complex HSS(3) : scalar current J(S':S1,S2)
890C
891#if defined(CERNLIB_IMPNONE)
892 IMPLICIT NONE
893#endif
894 COMPLEX*16 S1(3),S2(3),HSS(3),DG
895 REAL*8 Q(0:3),G,SMASS,SWIDTH,Q2
896C
897 HSS(2) = S1(2)+S2(2)
898 HSS(3) = S1(3)+S2(3)
899C
900 Q(0)=DBLE( HSS(2))
901 Q(1)=DBLE( HSS(3))
902 Q(2)=DIMAG(HSS(3))
903 Q(3)=DIMAG(HSS(2))
904 Q2=Q(0)**2-(Q(1)**2+Q(2)**2+Q(3)**2)
905C
906 DG=-G/DCMPLX( Q2-SMASS**2, MAX(SIGN(SMASS*SWIDTH ,Q2),0.D0))
907C
908 HSS(1) = DG*S1(1)*S2(1)
909C
910 RETURN
911 END
912C
913C ======================================================================
914C ----------------------------------------------------------------------
915C
916 SUBROUTINE HVSXXX(VC,SC,G,SMASS,SWIDTH , HVS)
917C
918C this subroutine computes an off-shell scalar current from the vector-
919C scalar-scalar coupling. the coupling is absent in the minimal sm in
920C unitary gauge.
921C
922C input:
923C complex vc(6) : input vector v
924C complex sc(3) : input scalar s
925C complex g : coupling constant (s charge)
926C real smass : mass of output scalar s'
927C real swidth : width of output scalar s'
928C
929C examples of the coupling constant g for susy particles are as follows:
930C -----------------------------------------------------------
931C | s1 | (q,i3) of s1 || v=a | v=z | v=w |
932C -----------------------------------------------------------
933C | nu~_l | ( 0 , +1/2) || --- | gzn(1) | gwf(1) |
934C | e~_l | ( -1 , -1/2) || gal(1) | gzl(1) | gwf(1) |
935C | u~_l | (+2/3 , +1/2) || gau(1) | gzu(1) | gwf(1) |
936C | d~_l | (-1/3 , -1/2) || gad(1) | gzd(1) | gwf(1) |
937C -----------------------------------------------------------
938C | e~_r-bar | ( +1 , 0 ) || -gal(2) | -gzl(2) | -gwf(2) |
939C | u~_r-bar | (-2/3 , 0 ) || -gau(2) | -gzu(2) | -gwf(2) |
940C | d~_r-bar | (+1/3 , 0 ) || -gad(2) | -gzd(2) | -gwf(2) |
941C -----------------------------------------------------------
942C where the sc charge is defined by the flowing-out quantum number.
943C
944C output:
945C complex hvs(3) : scalar current j(s':v,s)
946C
947#if defined(CERNLIB_IMPNONE)
948 IMPLICIT NONE
949#endif
950 COMPLEX*16 VC(6),SC(3),HVS(3),DG,QVV,QPV,G
951 REAL*8 QV(0:3),QP(0:3),QA(0:3),SMASS,SWIDTH,Q2
952C
953 HVS(2) = VC(5)+SC(2)
954 HVS(3) = VC(6)+SC(3)
955C
956 QV(0)=DBLE( VC(5))
957 QV(1)=DBLE( VC(6))
958 QV(2)=DIMAG( VC(6))
959 QV(3)=DIMAG( VC(5))
960 QP(0)=DBLE( SC(2))
961 QP(1)=DBLE( SC(3))
962 QP(2)=DIMAG( SC(3))
963 QP(3)=DIMAG( SC(2))
964 QA(0)=DBLE( HVS(2))
965 QA(1)=DBLE( HVS(3))
966 QA(2)=DIMAG(HVS(3))
967 QA(3)=DIMAG(HVS(2))
968 Q2=QA(0)**2-(QA(1)**2+QA(2)**2+QA(3)**2)
969C
970 DG=-G/DCMPLX( Q2-SMASS**2 , MAX(DSIGN( SMASS*SWIDTH ,Q2),0D0) )
971 QVV=QV(0)*VC(1)-QV(1)*VC(2)-QV(2)*VC(3)-QV(3)*VC(4)
972 QPV=QP(0)*VC(1)-QP(1)*VC(2)-QP(2)*VC(3)-QP(3)*VC(4)
973C
974 HVS(1) = DG*(2D0*QPV+QVV)*SC(1)
975C
976 RETURN
977 END
978C
979C ----------------------------------------------------------------------
980C
981 SUBROUTINE HVVXXX(V1,V2,G,SMASS,SWIDTH , HVV)
982C
983C this subroutine computes an off-shell scalar current from the vector-
984C vector-scalar coupling.
985C
986C input:
987C complex v1(6) : first vector v1
988C complex v2(6) : second vector v2
989C real g : coupling constant gvvh
990C real smass : mass of output scalar s
991C real swidth : width of output scalar s
992C
993C output:
994C complex hvv(3) : off-shell scalar current j(s:v1,v2)
995C
996#if defined(CERNLIB_IMPNONE)
997 IMPLICIT NONE
998#endif
999 COMPLEX*16 V1(6),V2(6),HVV(3),DG
1000 REAL*8 Q(0:3),G,SMASS,SWIDTH,Q2
1001 REAL*8 RXZERO
1002 PARAMETER( RXZERO=0.0D0 )
1003C
1004 HVV(2) = V1(5)+V2(5)
1005 HVV(3) = V1(6)+V2(6)
1006C
1007 Q(0)=DBLE( HVV(2))
1008 Q(1)=DBLE( HVV(3))
1009 Q(2)=DIMAG(HVV(3))
1010 Q(3)=DIMAG(HVV(2))
1011 Q2=Q(0)**2-(Q(1)**2+Q(2)**2+Q(3)**2)
1012C
1013 DG=-G/DCMPLX( Q2-SMASS**2 , MAX(SIGN( SMASS*SWIDTH ,Q2),RXZERO) )
1014C
1015 HVV(1) = DG*(V1(1)*V2(1)-V1(2)*V2(2)-V1(3)*V2(3)-V1(4)*V2(4))
1016C
1017 RETURN
1018 END
1019C
1020C ======================================================================
1021C
1022 SUBROUTINE IOSXXX(FI,FO,SC,GC , VERTEX)
1023C
1024C This subroutine computes an amplitude of the fermion-fermion-scalar
1025C coupling.
1026C
1027C INPUT:
1028C complex FI(6) : flow-in fermion |FI>
1029C complex FO(6) : flow-out fermion <FO|
1030C complex SC(3) : input scalar S
1031C complex GC(2) : coupling constants GCHF
1032C
1033C OUTPUT:
1034C complex VERTEX : amplitude <FO|S|FI>
1035C
1036#if defined(CERNLIB_IMPNONE)
1037 IMPLICIT NONE
1038#endif
1039 COMPLEX*16 FI(6),FO(6),SC(3),GC(2),VERTEX
1040C
1041 VERTEX = SC(1)*( GC(1)*(FI(1)*FO(1)+FI(2)*FO(2))
1042 & +GC(2)*(FI(3)*FO(3)+FI(4)*FO(4)) )
1043C
1044 RETURN
1045 END
1046C
1047C ======================================================================
1048C
1049 SUBROUTINE IOVXXX(FI,FO,VC,G , VERTEX)
1050C
1051C this subroutine computes an amplitude of the fermion-fermion-vector
1052C coupling.
1053C
1054C input:
1055C complex fi(6) : flow-in fermion |fi>
1056C complex fo(6) : flow-out fermion <fo|
1057C complex vc(6) : input vector v
1058C real g(2) : coupling constants gvf
1059C
1060C output:
1061C complex vertex : amplitude <fo|v|fi>
1062C
1063#if defined(CERNLIB_IMPNONE)
1064 IMPLICIT NONE
1065#endif
1066 COMPLEX*16 FI(6),FO(6),VC(6),VERTEX
1067 REAL*8 G(2)
1068 REAL*8 RXZERO, RXONE
1069 PARAMETER( RXZERO=0.0D0, RXONE=1.0D0 )
1070 COMPLEX*16 CXIMAG
1071 LOGICAL FIRST
1072 SAVE CXIMAG,FIRST
1073 DATA FIRST/.TRUE./
1074C
1075C Fix compilation with g77
1076 IF(FIRST) THEN
1077 FIRST=.FALSE.
1078 CXIMAG=DCMPLX( RXZERO, RXONE )
1079 ENDIF
1080C
1081
1082 VERTEX = G(1)*( (FO(3)*FI(1)+FO(4)*FI(2))*VC(1)
1083 & +(FO(3)*FI(2)+FO(4)*FI(1))*VC(2)
1084 & -(FO(3)*FI(2)-FO(4)*FI(1))*VC(3)*CXIMAG
1085 & +(FO(3)*FI(1)-FO(4)*FI(2))*VC(4) )
1086C
1087 IF ( G(2) .NE. RXZERO ) THEN
1088 VERTEX = VERTEX
1089 & + G(2)*( (FO(1)*FI(3)+FO(2)*FI(4))*VC(1)
1090 & -(FO(1)*FI(4)+FO(2)*FI(3))*VC(2)
1091 & +(FO(1)*FI(4)-FO(2)*FI(3))*VC(3)*CXIMAG
1092 & -(FO(1)*FI(3)-FO(2)*FI(4))*VC(4) )
1093 END IF
1094C
1095 RETURN
1096 END
1097C
1098C Subroutine returns the desired fermion or
1099C anti-fermion spinor. ie., |f>
1100C A replacement for the HELAS routine IXXXXX
1101C
1102C Adam Duff, 1992 August 31
1103C <duff@phenom.physics.wisc.edu>
1104C
1105 SUBROUTINE IXXXXX(P,FMASS,NHEL,NSF,FI)
1106C P IN: FOUR VECTOR MOMENTUM
1107C FMASS IN: FERMION MASS
1108C NHEL IN: SPINOR HELICITY, -1 OR 1
1109C NSF IN: -1=ANTIFERMION, 1=FERMION
1110C FI OUT: FERMION WAVEFUNCTION
1111C
1112C declare input/output variables
1113C
1114#if defined(CERNLIB_IMPNONE)
1115 IMPLICIT NONE
1116#endif
1117 COMPLEX*16 FI(6)
1118 INTEGER*4 NHEL, NSF
1119 REAL*8 P(0:3), FMASS
1120 REAL*8 RXZERO, RXONE, RXTWO
1121 PARAMETER( RXZERO=0.0D0, RXONE=1.0D0, RXTWO=2.0D0 )
1122 REAL*8 PLAT, PABS, OMEGAP, OMEGAM, RS2PA, SPAZ
1123 COMPLEX*16 CXZERO
1124C
1125C declare local variables
1126C
1127 LOGICAL FIRST
1128 SAVE CXZERO,FIRST
1129 DATA FIRST/.TRUE./
1130C
1131C Fix compilation with g77
1132 IF(FIRST) THEN
1133 FIRST=.FALSE.
1134 CXZERO=DCMPLX( RXZERO, RXZERO )
1135 ENDIF
1136C
1137C define kinematic parameters
1138C
1139 FI(5) = DCMPLX( P(0), P(3) ) * NSF
1140 FI(6) = DCMPLX( P(1), P(2) ) * NSF
1141 PLAT = SQRT( P(1)**2 + P(2)**2 )
1142 PABS = SQRT( P(1)**2 + P(2)**2 + P(3)**2 )
1143 OMEGAP = SQRT( P(0) + PABS )
1144C
1145C do massive fermion case
1146C
1147 IF ( FMASS .NE. RXZERO ) THEN
1148 OMEGAM = FMASS / OMEGAP
1149 IF ( NSF .EQ. 1 ) THEN
1150 IF ( NHEL .EQ. 1 ) THEN
1151 IF ( P(3) .GE. RXZERO ) THEN
1152 IF ( PLAT .EQ. RXZERO ) THEN
1153 FI(1) = DCMPLX( OMEGAM, RXZERO )
1154 FI(2) = CXZERO
1155 FI(3) = DCMPLX( OMEGAP, RXZERO )
1156 FI(4) = CXZERO
1157 ELSE
1158 RS2PA = RXONE / SQRT( RXTWO * PABS )
1159 SPAZ = SQRT( PABS + P(3) )
1160 FI(1) = OMEGAM * RS2PA
1161 & * DCMPLX( SPAZ, RXZERO )
1162 FI(2) = OMEGAM * RS2PA / SPAZ
1163 & * DCMPLX( P(1), P(2) )
1164 FI(3) = OMEGAP * RS2PA
1165 & * DCMPLX( SPAZ, RXZERO )
1166 FI(4) = OMEGAP * RS2PA / SPAZ
1167 & * DCMPLX( P(1), P(2) )
1168 END IF
1169 ELSE
1170 IF ( PLAT .EQ. RXZERO ) THEN
1171 FI(1) = CXZERO
1172 FI(2) = DCMPLX( OMEGAM, RXZERO )
1173 FI(3) = CXZERO
1174 FI(4) = DCMPLX( OMEGAP, RXZERO )
1175 ELSE
1176 RS2PA = RXONE / SQRT( RXTWO * PABS )
1177 SPAZ = SQRT( PABS - P(3) )
1178 FI(1) = OMEGAM * RS2PA / SPAZ
1179 & * DCMPLX( PLAT, RXZERO )
1180 FI(2) = OMEGAM * RS2PA * SPAZ / PLAT
1181 & * DCMPLX( P(1), P(2) )
1182 FI(3) = OMEGAP * RS2PA / SPAZ
1183 & * DCMPLX( PLAT, RXZERO )
1184 FI(4) = OMEGAP * RS2PA * SPAZ / PLAT
1185 & * DCMPLX( P(1), P(2) )
1186 END IF
1187 END IF
1188 ELSE IF ( NHEL .EQ. -1 ) THEN
1189 IF ( P(3) .GE. RXZERO ) THEN
1190 IF ( PLAT .EQ. RXZERO ) THEN
1191 FI(1) = CXZERO
1192 FI(2) = DCMPLX( OMEGAP, RXZERO )
1193 FI(3) = CXZERO
1194 FI(4) = DCMPLX( OMEGAM, RXZERO )
1195 ELSE
1196 RS2PA = RXONE / SQRT( RXTWO * PABS )
1197 SPAZ = SQRT( PABS + P(3) )
1198 FI(1) = OMEGAP * RS2PA / SPAZ
1199 & * DCMPLX( -P(1), P(2) )
1200 FI(2) = OMEGAP * RS2PA
1201 & * DCMPLX( SPAZ, RXZERO )
1202 FI(3) = OMEGAM * RS2PA / SPAZ
1203 & * DCMPLX( -P(1), P(2) )
1204 FI(4) = OMEGAM * RS2PA
1205 & * DCMPLX( SPAZ, RXZERO )
1206 END IF
1207 ELSE
1208 IF ( PLAT .EQ. RXZERO ) THEN
1209 FI(1) = DCMPLX( -OMEGAP, RXZERO )
1210 FI(2) = CXZERO
1211 FI(3) = DCMPLX( -OMEGAM, RXZERO )
1212 FI(4) = CXZERO
1213 ELSE
1214 RS2PA = RXONE / SQRT( RXTWO * PABS )
1215 SPAZ = SQRT( PABS - P(3) )
1216 FI(1) = OMEGAP * RS2PA * SPAZ / PLAT
1217 & * DCMPLX( -P(1), P(2) )
1218 FI(2) = OMEGAP * RS2PA / SPAZ
1219 & * DCMPLX( PLAT, RXZERO )
1220 FI(3) = OMEGAM * RS2PA * SPAZ / PLAT
1221 & * DCMPLX( -P(1), P(2) )
1222 FI(4) = OMEGAM * RS2PA / SPAZ
1223 & * DCMPLX( PLAT, RXZERO )
1224 END IF
1225 END IF
1226 ELSE
1227 STOP 'IXXXXX: FERMION HELICITY MUST BE +1,-1'
1228 END IF
1229 ELSE IF ( NSF .EQ. -1 ) THEN
1230 IF ( NHEL .EQ. 1 ) THEN
1231 IF ( P(3) .GE. RXZERO ) THEN
1232 IF ( PLAT .EQ. RXZERO ) THEN
1233 FI(1) = CXZERO
1234 FI(2) = DCMPLX( -OMEGAP, RXZERO )
1235 FI(3) = CXZERO
1236 FI(4) = DCMPLX( OMEGAM, RXZERO )
1237 ELSE
1238 RS2PA = RXONE / SQRT( RXTWO * PABS )
1239 SPAZ = SQRT( PABS + P(3) )
1240 FI(1) = -OMEGAP * RS2PA / SPAZ
1241 & * DCMPLX( -P(1), P(2) )
1242 FI(2) = -OMEGAP * RS2PA
1243 & * DCMPLX( SPAZ, RXZERO )
1244 FI(3) = OMEGAM * RS2PA / SPAZ
1245 & * DCMPLX( -P(1), P(2) )
1246 FI(4) = OMEGAM * RS2PA
1247 & * DCMPLX( SPAZ, RXZERO )
1248 END IF
1249 ELSE
1250 IF ( PLAT .EQ. RXZERO ) THEN
1251 FI(1) = DCMPLX( OMEGAP, RXZERO )
1252 FI(2) = CXZERO
1253 FI(3) = DCMPLX( -OMEGAM, RXZERO )
1254 FI(4) = CXZERO
1255 ELSE
1256 RS2PA = RXONE / SQRT( RXTWO * PABS )
1257 SPAZ = SQRT( PABS - P(3) )
1258 FI(1) = -OMEGAP * RS2PA * SPAZ / PLAT
1259 & * DCMPLX( -P(1), P(2) )
1260 FI(2) = -OMEGAP * RS2PA / SPAZ
1261 & * DCMPLX( PLAT, RXZERO )
1262 FI(3) = OMEGAM * RS2PA * SPAZ / PLAT
1263 & * DCMPLX( -P(1), P(2) )
1264 FI(4) = OMEGAM * RS2PA / SPAZ
1265 & * DCMPLX( PLAT, RXZERO )
1266 END IF
1267 END IF
1268 ELSE IF ( NHEL .EQ. -1 ) THEN
1269 IF ( P(3) .GE. RXZERO ) THEN
1270 IF ( PLAT .EQ. RXZERO ) THEN
1271 FI(1) = DCMPLX( OMEGAM, RXZERO )
1272 FI(2) = CXZERO
1273 FI(3) = DCMPLX( -OMEGAP, RXZERO )
1274 FI(4) = CXZERO
1275 ELSE
1276 RS2PA = RXONE / SQRT( RXTWO * PABS )
1277 SPAZ = SQRT( PABS + P(3) )
1278 FI(1) = OMEGAM * RS2PA
1279 & * DCMPLX( SPAZ, RXZERO )
1280 FI(2) = OMEGAM * RS2PA / SPAZ
1281 & * DCMPLX( P(1), P(2) )
1282 FI(3) = -OMEGAP * RS2PA
1283 & * DCMPLX( SPAZ, RXZERO )
1284 FI(4) = -OMEGAP * RS2PA / SPAZ
1285 & * DCMPLX( P(1), P(2) )
1286 END IF
1287 ELSE
1288 IF ( PLAT .EQ. RXZERO ) THEN
1289 FI(1) = CXZERO
1290 FI(2) = DCMPLX( OMEGAM, RXZERO )
1291 FI(3) = CXZERO
1292 FI(4) = DCMPLX( -OMEGAP, RXZERO )
1293 ELSE
1294 RS2PA = RXONE / SQRT( RXTWO * PABS )
1295 SPAZ = SQRT( PABS - P(3) )
1296 FI(1) = OMEGAM * RS2PA / SPAZ
1297 & * DCMPLX( PLAT, RXZERO )
1298 FI(2) = OMEGAM * RS2PA * SPAZ / PLAT
1299 & * DCMPLX( P(1), P(2) )
1300 FI(3) = -OMEGAP * RS2PA / SPAZ
1301 & * DCMPLX( PLAT, RXZERO )
1302 FI(4) = -OMEGAP * RS2PA * SPAZ / PLAT
1303 & * DCMPLX( P(1), P(2) )
1304 END IF
1305 END IF
1306 ELSE
1307 STOP 'IXXXXX: FERMION HELICITY MUST BE +1,-1'
1308 END IF
1309 ELSE
1310 STOP 'IXXXXX: FERMION TYPE MUST BE +1,-1'
1311 END IF
1312C
1313C do massless fermion case
1314C
1315 ELSE
1316 IF ( NSF .EQ. 1 ) THEN
1317 IF ( NHEL .EQ. 1 ) THEN
1318 IF ( P(3) .GE. RXZERO ) THEN
1319 IF ( PLAT .EQ. RXZERO ) THEN
1320 FI(1) = CXZERO
1321 FI(2) = CXZERO
1322 FI(3) = DCMPLX( OMEGAP, RXZERO )
1323 FI(4) = CXZERO
1324 ELSE
1325 SPAZ = SQRT( PABS + P(3) )
1326 FI(1) = CXZERO
1327 FI(2) = CXZERO
1328 FI(3) = DCMPLX( SPAZ, RXZERO )
1329 FI(4) = RXONE / SPAZ
1330 & * DCMPLX( P(1), P(2) )
1331 END IF
1332 ELSE
1333 IF ( PLAT .EQ. RXZERO ) THEN
1334 FI(1) = CXZERO
1335 FI(2) = CXZERO
1336 FI(3) = CXZERO
1337 FI(4) = DCMPLX( OMEGAP, RXZERO )
1338 ELSE
1339 SPAZ = SQRT( PABS - P(3) )
1340 FI(1) = CXZERO
1341 FI(2) = CXZERO
1342 FI(3) = RXONE / SPAZ
1343 & * DCMPLX( PLAT, RXZERO )
1344 FI(4) = SPAZ / PLAT
1345 & * DCMPLX( P(1), P(2) )
1346 END IF
1347 END IF
1348 ELSE IF ( NHEL .EQ. -1 ) THEN
1349 IF ( P(3) .GE. RXZERO ) THEN
1350 IF ( PLAT .EQ. RXZERO ) THEN
1351 FI(1) = CXZERO
1352 FI(2) = DCMPLX( OMEGAP, RXZERO )
1353 FI(3) = CXZERO
1354 FI(4) = CXZERO
1355 ELSE
1356 SPAZ = SQRT( PABS + P(3) )
1357 FI(1) = RXONE / SPAZ
1358 & * DCMPLX( -P(1), P(2) )
1359 FI(2) = DCMPLX( SPAZ, RXZERO )
1360 FI(3) = CXZERO
1361 FI(4) = CXZERO
1362 END IF
1363 ELSE
1364 IF ( PLAT .EQ. RXZERO ) THEN
1365 FI(1) = DCMPLX( -OMEGAP, RXZERO )
1366 FI(2) = CXZERO
1367 FI(3) = CXZERO
1368 FI(4) = CXZERO
1369 ELSE
1370 SPAZ = SQRT( PABS - P(3) )
1371 FI(1) = SPAZ / PLAT
1372 & * DCMPLX( -P(1), P(2) )
1373 FI(2) = RXONE / SPAZ
1374 & * DCMPLX( PLAT, RXZERO )
1375 FI(3) = CXZERO
1376 FI(4) = CXZERO
1377 END IF
1378 END IF
1379 ELSE
1380 STOP 'IXXXXX: FERMION HELICITY MUST BE +1,-1'
1381 END IF
1382 ELSE IF ( NSF .EQ. -1 ) THEN
1383 IF ( NHEL .EQ. 1 ) THEN
1384 IF ( P(3) .GE. RXZERO ) THEN
1385 IF ( PLAT .EQ. RXZERO ) THEN
1386 FI(1) = CXZERO
1387 FI(2) = DCMPLX( -OMEGAP, RXZERO )
1388 FI(3) = CXZERO
1389 FI(4) = CXZERO
1390 ELSE
1391 SPAZ = SQRT( PABS + P(3) )
1392 FI(1) = -RXONE / SPAZ
1393 & * DCMPLX( -P(1), P(2) )
1394 FI(2) = DCMPLX( -SPAZ, RXZERO )
1395 FI(3) = CXZERO
1396 FI(4) = CXZERO
1397 END IF
1398 ELSE
1399 IF ( PLAT .EQ. RXZERO ) THEN
1400 FI(1) = DCMPLX( OMEGAP, RXZERO )
1401 FI(2) = CXZERO
1402 FI(3) = CXZERO
1403 FI(4) = CXZERO
1404 ELSE
1405 SPAZ = SQRT( PABS - P(3) )
1406 FI(1) = -SPAZ / PLAT
1407 & * DCMPLX( -P(1), P(2) )
1408 FI(2) = -RXONE / SPAZ
1409 & * DCMPLX( PLAT, RXZERO )
1410 FI(3) = CXZERO
1411 FI(4) = CXZERO
1412 END IF
1413 END IF
1414 ELSE IF ( NHEL .EQ. -1 ) THEN
1415 IF ( P(3) .GE. RXZERO ) THEN
1416 IF ( PLAT .EQ. RXZERO ) THEN
1417 FI(1) = CXZERO
1418 FI(2) = CXZERO
1419 FI(3) = DCMPLX( -OMEGAP, RXZERO )
1420 FI(4) = CXZERO
1421 ELSE
1422 SPAZ = SQRT( PABS + P(3) )
1423 FI(1) = CXZERO
1424 FI(2) = CXZERO
1425 FI(3) = DCMPLX( -SPAZ, RXZERO )
1426 FI(4) = -RXONE / SPAZ
1427 & * DCMPLX( P(1), P(2) )
1428 END IF
1429 ELSE
1430 IF ( PLAT .EQ. RXZERO ) THEN
1431 FI(1) = CXZERO
1432 FI(2) = CXZERO
1433 FI(3) = CXZERO
1434 FI(4) = DCMPLX( -OMEGAP, RXZERO )
1435 ELSE
1436 SPAZ = SQRT( PABS - P(3) )
1437 FI(1) = CXZERO
1438 FI(2) = CXZERO
1439 FI(3) = -RXONE / SPAZ
1440 & * DCMPLX( PLAT, RXZERO )
1441 FI(4) = -SPAZ / PLAT
1442 & * DCMPLX( P(1), P(2) )
1443 END IF
1444 END IF
1445 ELSE
1446 STOP 'IXXXXX: FERMION HELICITY MUST BE +1,-1'
1447 END IF
1448 ELSE
1449 STOP 'IXXXXX: FERMION TYPE MUST BE +1,-1'
1450 END IF
1451 END IF
1452C
1453C done
1454C
1455 RETURN
1456 END
1457C
1458C ----------------------------------------------------------------------
1459C
1460 SUBROUTINE J3XXXX(FI,FO,GAF,GZF,ZMASS,ZWIDTH , J3)
1461C
1462C this subroutine computes the sum of photon and z currents with the
1463C suitable weights ( j(w3) = cos(theta_w) j(z) + sin(theta_w) j(a) ).
1464C the output j3 is useful as an input of vvvxxx, jvvxxx or w3w3xx.
1465C the photon propagator is given in feynman gauge, and the z propagator
1466C is given in unitary gauge.
1467C
1468C input:
1469C complex fi(6) : flow-in fermion |fi>
1470C complex fo(6) : flow-out fermion <fo|
1471C real gaf(2) : fi couplings with a gaf
1472C real gzf(2) : fi couplings with z gzf
1473C real zmass : mass of z
1474C real zwidth : width of z
1475C
1476C output:
1477C complex j3(6) : w3 current j^mu(<fo|w3|fi>)
1478C
1479#if defined(CERNLIB_IMPNONE)
1480 IMPLICIT NONE
1481#endif
1482 COMPLEX*16 FI(6),FO(6),J3(6),
1483 & C0L,C1L,C2L,C3L,CSL,C0R,C1R,C2R,C3R,CSR,DZ,DDIF
1484 REAL*8 GAF(2),GZF(2),Q(0:3),ZMASS,ZWIDTH,ZM2,ZMW,Q2,DA,WW,
1485 & CW,SW,GN,GZ3L,GA3L
1486C
1487 REAL*8 RXZERO, RXONE
1488 PARAMETER( RXZERO=0.0D0, RXONE=1.0D0 )
1489 COMPLEX*16 CXIMAG
1490 LOGICAL FIRST
1491 SAVE CXIMAG,FIRST
1492 DATA FIRST/.TRUE./
1493C
1494C Fix compilation with g77
1495 IF(FIRST) THEN
1496 FIRST=.FALSE.
1497 CXIMAG=DCMPLX( RXZERO, RXONE )
1498 ENDIF
1499C
1500 J3(5) = FO(5)-FI(5)
1501 J3(6) = FO(6)-FI(6)
1502C
1503 Q(0)=-DBLE( J3(5))
1504 Q(1)=-DBLE( J3(6))
1505 Q(2)=-DIMAG(J3(6))
1506 Q(3)=-DIMAG(J3(5))
1507 Q2=Q(0)**2-(Q(1)**2+Q(2)**2+Q(3)**2)
1508 ZM2=ZMASS**2
1509 ZMW=ZMASS*ZWIDTH
1510C
1511 DA=RXONE/Q2
1512 WW=MAX(DSIGN( ZMW ,Q2),RXZERO)
1513 DZ=RXONE/DCMPLX( Q2-ZM2 , WW )
1514 DDIF=DCMPLX( -ZM2 , WW )*DA*DZ
1515C
1516C ddif is the difference : ddif=da-dz
1517C for the running width, use below instead of the above ww,dz and ddif.
1518C ww=max( zwidth*q2/zmass ,r_zero)
1519C dz=r_one/dcmplx( q2-zm2 , ww )
1520C ddif=dcmplx( -zm2 , ww )*da*dz
1521C
1522 CW=RXONE/SQRT(RXONE+(GZF(2)/GAF(2))**2)
1523 SW=SQRT((RXONE-CW)*(RXONE+CW))
1524 GN=GAF(2)*SW
1525 GZ3L=GZF(1)*CW
1526 GA3L=GAF(1)*SW
1527 C0L= FO(3)*FI(1)+FO(4)*FI(2)
1528 C0R= FO(1)*FI(3)+FO(2)*FI(4)
1529 C1L=-(FO(3)*FI(2)+FO(4)*FI(1))
1530 C1R= FO(1)*FI(4)+FO(2)*FI(3)
1531 C2L= (FO(3)*FI(2)-FO(4)*FI(1))*CXIMAG
1532 C2R=(-FO(1)*FI(4)+FO(2)*FI(3))*CXIMAG
1533 C3L= -FO(3)*FI(1)+FO(4)*FI(2)
1534 C3R= FO(1)*FI(3)-FO(2)*FI(4)
1535 CSL=(Q(0)*C0L-Q(1)*C1L-Q(2)*C2L-Q(3)*C3L)/ZM2
1536 CSR=(Q(0)*C0R-Q(1)*C1R-Q(2)*C2R-Q(3)*C3R)/ZM2
1537C
1538 J3(1) = GZ3L*DZ*(C0L-CSL*Q(0))+GA3L*C0L*DA
1539 & + GN*(C0R*DDIF-CSR*Q(0)*DZ)
1540 J3(2) = GZ3L*DZ*(C1L-CSL*Q(1))+GA3L*C1L*DA
1541 & + GN*(C1R*DDIF-CSR*Q(1)*DZ)
1542 J3(3) = GZ3L*DZ*(C2L-CSL*Q(2))+GA3L*C2L*DA
1543 & + GN*(C2R*DDIF-CSR*Q(2)*DZ)
1544 J3(4) = GZ3L*DZ*(C3L-CSL*Q(3))+GA3L*C3L*DA
1545 & + GN*(C3R*DDIF-CSR*Q(3)*DZ)
1546C
1547 RETURN
1548 END
1549C
1550C ----------------------------------------------------------------------
1551C
1552 SUBROUTINE JEEXXX(EB,EF,SHLF,CHLF,PHI,NHB,NHF,NSF , JEE)
1553C
1554C This subroutine computes an off-shell photon wavefunction emitted from
1555C the electron or positron beam, with a special care for the small angle
1556C region. The momenta are measured in the laboratory frame, where the
1557C e- (e+) beam is along the positive (negative) z axis.
1558C
1559C INPUT:
1560C real EB : energy (GeV) of beam e-/e+
1561C real EF : energy (GeV) of final e-/e+
1562C real SHLF : sin(theta/2) of final e-/e+
1563C real CHLF : cos(theta/2) of final e-/e+
1564C real PHI : azimuthal angle of final e-/e+
1565C integer NHB = -1 or 1 : helicity of beam e-/e+
1566C integer NHF = -1 or 1 : helicity of final e-/e+
1567C integer NSF = -1 or 1 : +1 for electron, -1 for positron
1568C
1569C OUTPUT:
1570C complex JEE(6) : off-shell photon J^mu(<e|A|e>)
1571C
1572#if defined(CERNLIB_IMPNONE)
1573 IMPLICIT NONE
1574#endif
1575 COMPLEX*16 JEE(6),COEFF
1576 REAL*8 CS(2),EB,EF,SHLF,CHLF,PHI,ME,ALPHA,GAL,HI,SF,SFH,X,ME2,Q2,
1577 & RFP,RFM,SNP,CSP,RXC,C,S
1578 INTEGER NHB,NHF,NSF
1579C
1580 ME =0.51099906D-3
1581 ALPHA=1./128.
1582 GAL =SQRT(ALPHA*4.*3.14159265D0)
1583C
1584 HI =NHB
1585 SF =NSF
1586 SFH=NHB*NSF
1587 CS((3+NSF)/2)=SHLF
1588 CS((3-NSF)/2)=CHLF
1589C CS(1)=CHLF and CS(2)=SHLF for electron
1590C CS(1)=SHLF and CS(2)=CHLF for positron
1591 X=EF/EB
1592 ME2=ME**2
1593 Q2=-4.*CS(2)**2*(EF*EB-ME2)
1594 & +SF*(1.-X)**2/X*(SHLF+CHLF)*(SHLF-CHLF)*ME2
1595 RFP=(1+NSF)
1596 RFM=(1-NSF)
1597 SNP=SIN(PHI)
1598 CSP=COS(PHI)
1599C
1600 IF (NHB.EQ.NHF) THEN
1601 RXC=2.*X/(1.-X)*CS(1)**2
1602 COEFF= GAL*2.*EB*SQRT(X)*CS(2)/Q2
1603 & *(DCMPLX( RFP )-RFM*DCMPLX( CSP ,-SNP*HI ))*.5
1604 JEE(1) = DCMPLX( 0.D0 )
1605 JEE(2) = COEFF*DCMPLX( (1.+RXC)*CSP ,-SFH*SNP )
1606 JEE(3) = COEFF*DCMPLX( (1.+RXC)*SNP , SFH*CSP )
1607 JEE(4) = COEFF*(-SF*RXC/CS(1)*CS(2))
1608 ELSE
1609 COEFF= GAL*ME/Q2/SQRT(X)
1610 & *(DCMPLX( RFP )+RFM*DCMPLX( CSP , SNP*HI ))*.5*HI
1611 JEE(1) = -COEFF*(1.+X)*CS(2)*DCMPLX( CSP , SFH*SNP )
1612 JEE(2) = COEFF*(1.-X)*CS(1)
1613 JEE(3) = JEE(2)*DCMPLX( 0.D0 , SFH )
1614 JEE(4) = JEE(1)*SF*(1.-X)/(1.+X)
1615 ENDIF
1616C
1617 C=(CHLF+SHLF)*(CHLF-SHLF)
1618 S=2.*CHLF*SHLF
1619C
1620 JEE(5) = -EB*DCMPLX( 1.-X , SF-X*C )
1621 JEE(6) = EB*X*S*DCMPLX( CSP , SNP )
1622C
1623 RETURN
1624 END
1625C
1626C
1627C ----------------------------------------------------------------------
1628C
1629 SUBROUTINE JGGGXX(W1,W2,W3,G, JW3W)
1630C
1631C this subroutine computes an off-shell w+, w-, w3, z or photon current
1632C from the four-point gauge boson coupling, including the contributions
1633C of w exchange diagrams. the vector propagator is given in feynman
1634C gauge for a photon and in unitary gauge for w and z bosons. if one
1635C sets wmass=0.0, then the ggg-->g current is given (see sect 2.9.1 of
1636C the manual).
1637C
1638C input:
1639C complex w1(6) : first vector w1
1640C complex w2(6) : second vector w2
1641C complex w3(6) : third vector w3
1642C real g : first coupling constant
1643C (see the table below)
1644C
1645C output:
1646C complex jw3w(6) : w current j^mu(w':w1,w2,w3)
1647C
1648#if defined(CERNLIB_IMPNONE)
1649 IMPLICIT NONE
1650#endif
1651 COMPLEX*16 W1(6),W2(6),W3(6),JW3W(6)
1652 COMPLEX*16 DW1(0:3),DW2(0:3),DW3(0:3),
1653 & JJ(0:3),DV,W32,W13
1654 REAL*8 P1(0:3),P2(0:3),P3(0:3),Q(0:3),G,DG2,Q2
1655C
1656 REAL*8 RXZERO
1657 PARAMETER( RXZERO=0.0D0 )
1658C
1659 JW3W(5) = W1(5)+W2(5)+W3(5)
1660 JW3W(6) = W1(6)+W2(6)+W3(6)
1661C
1662 DW1(0)=DCMPLX(W1(1))
1663 DW1(1)=DCMPLX(W1(2))
1664 DW1(2)=DCMPLX(W1(3))
1665 DW1(3)=DCMPLX(W1(4))
1666 DW2(0)=DCMPLX(W2(1))
1667 DW2(1)=DCMPLX(W2(2))
1668 DW2(2)=DCMPLX(W2(3))
1669 DW2(3)=DCMPLX(W2(4))
1670 DW3(0)=DCMPLX(W3(1))
1671 DW3(1)=DCMPLX(W3(2))
1672 DW3(2)=DCMPLX(W3(3))
1673 DW3(3)=DCMPLX(W3(4))
1674 P1(0)=DBLE( W1(5))
1675 P1(1)=DBLE( W1(6))
1676 P1(2)=DBLE(DIMAG(W1(6)))
1677 P1(3)=DBLE(DIMAG(W1(5)))
1678 P2(0)=DBLE( W2(5))
1679 P2(1)=DBLE( W2(6))
1680 P2(2)=DBLE(DIMAG(W2(6)))
1681 P2(3)=DBLE(DIMAG(W2(5)))
1682 P3(0)=DBLE( W3(5))
1683 P3(1)=DBLE( W3(6))
1684 P3(2)=DBLE(DIMAG(W3(6)))
1685 P3(3)=DBLE(DIMAG(W3(5)))
1686 Q(0)=-(P1(0)+P2(0)+P3(0))
1687 Q(1)=-(P1(1)+P2(1)+P3(1))
1688 Q(2)=-(P1(2)+P2(2)+P3(2))
1689 Q(3)=-(P1(3)+P2(3)+P3(3))
1690
1691 Q2 =Q(0)**2 -(Q(1)**2 +Q(2)**2 +Q(3)**2)
1692
1693 DG2=DBLE(G)*DBLE(G)
1694C
1695 DV = 1.0D0/DCMPLX( Q2 )
1696
1697C for the running width, use below instead of the above dv.
1698C dv = 1.0d0/dcmplx( q2 -mv2 , dmax1(dwv*q2/dmv,0.d0) )
1699C
1700 W32=DW3(0)*DW2(0)-DW3(1)*DW2(1)-DW3(2)*DW2(2)-DW3(3)*DW2(3)
1701C
1702C
1703 W13=DW1(0)*DW3(0)-DW1(1)*DW3(1)-DW1(2)*DW3(2)-DW1(3)*DW3(3)
1704C
1705 JJ(0)=DG2*( DW1(0)*W32 - DW2(0)*W13 )
1706 JJ(1)=DG2*( DW1(1)*W32 - DW2(1)*W13 )
1707 JJ(2)=DG2*( DW1(2)*W32 - DW2(2)*W13 )
1708 JJ(3)=DG2*( DW1(3)*W32 - DW2(3)*W13 )
1709C
1710 JW3W(1) = DCMPLX( JJ(0)*DV )
1711 JW3W(2) = DCMPLX( JJ(1)*DV )
1712 JW3W(3) = DCMPLX( JJ(2)*DV )
1713 JW3W(4) = DCMPLX( JJ(3)*DV )
1714C
1715 RETURN
1716 END
1717C
1718C ----------------------------------------------------------------------
1719C
1720 SUBROUTINE JGGXXX(V1,V2,G, JVV)
1721C
1722C this subroutine computes an off-shell vector current from the three-
1723C point gauge boson coupling. the vector propagator is given in feynman
1724C gauge for a massless vector and in unitary gauge for a massive vector.
1725C
1726C input:
1727C complex v1(6) : first vector v1
1728C complex v2(6) : second vector v2
1729C real g : coupling constant (see the table below)
1730C
1731C output:
1732C complex jvv(6) : vector current j^mu(v:v1,v2)
1733C
1734#if defined(CERNLIB_IMPNONE)
1735 IMPLICIT NONE
1736#endif
1737 COMPLEX*16 V1(6),V2(6),JVV(6),J12(0:3),
1738 & SV1,SV2,V12
1739 REAL*8 P1(0:3),P2(0:3),Q(0:3),G,GS,S
1740C
1741 REAL*8 RXZERO
1742 PARAMETER( RXZERO=0.0D0 )
1743C
1744 JVV(5) = V1(5)+V2(5)
1745 JVV(6) = V1(6)+V2(6)
1746C
1747 P1(0)=DBLE( V1(5))
1748 P1(1)=DBLE( V1(6))
1749 P1(2)=DIMAG(V1(6))
1750 P1(3)=DIMAG(V1(5))
1751 P2(0)=DBLE( V2(5))
1752 P2(1)=DBLE( V2(6))
1753 P2(2)=DIMAG(V2(6))
1754 P2(3)=DIMAG(V2(5))
1755 Q(0)=-DBLE( JVV(5))
1756 Q(1)=-DBLE( JVV(6))
1757 Q(2)=-DIMAG(JVV(6))
1758 Q(3)=-DIMAG(JVV(5))
1759 S=Q(0)**2-(Q(1)**2+Q(2)**2+Q(3)**2)
1760C
1761 V12=V1(1)*V2(1)-V1(2)*V2(2)-V1(3)*V2(3)-V1(4)*V2(4)
1762 SV1= (P2(0)-Q(0))*V1(1) -(P2(1)-Q(1))*V1(2)
1763 & -(P2(2)-Q(2))*V1(3) -(P2(3)-Q(3))*V1(4)
1764 SV2=-(P1(0)-Q(0))*V2(1) +(P1(1)-Q(1))*V2(2)
1765 & +(P1(2)-Q(2))*V2(3) +(P1(3)-Q(3))*V2(4)
1766 J12(0)=(P1(0)-P2(0))*V12 +SV1*V2(1) +SV2*V1(1)
1767 J12(1)=(P1(1)-P2(1))*V12 +SV1*V2(2) +SV2*V1(2)
1768 J12(2)=(P1(2)-P2(2))*V12 +SV1*V2(3) +SV2*V1(3)
1769 J12(3)=(P1(3)-P2(3))*V12 +SV1*V2(4) +SV2*V1(4)
1770C
1771 GS=-G/S
1772C
1773 JVV(1) = GS*J12(0)
1774 JVV(2) = GS*J12(1)
1775 JVV(3) = GS*J12(2)
1776 JVV(4) = GS*J12(3)
1777C
1778 RETURN
1779 END
1780C
1781C ----------------------------------------------------------------------
1782C
1783 SUBROUTINE JIOXXX(FI,FO,G,VMASS,VWIDTH , JIO)
1784C
1785C this subroutine computes an off-shell vector current from an external
1786C fermion pair. the vector boson propagator is given in feynman gauge
1787C for a massless vector and in unitary gauge for a massive vector.
1788C
1789C input:
1790C complex fi(6) : flow-in fermion |fi>
1791C complex fo(6) : flow-out fermion <fo|
1792C real g(2) : coupling constants gvf
1793C real vmass : mass of output vector v
1794C real vwidth : width of output vector v
1795C
1796C output:
1797C complex jio(6) : vector current j^mu(<fo|v|fi>)
1798C
1799#if defined(CERNLIB_IMPNONE)
1800 IMPLICIT NONE
1801#endif
1802 COMPLEX*16 FI(6),FO(6),JIO(6),C0,C1,C2,C3,CS,D
1803 REAL*8 G(2),Q(0:3),VMASS,VWIDTH,Q2,VM2,DD
1804C
1805 REAL*8 RXZERO, RXONE
1806 PARAMETER( RXZERO=0.0D0, RXONE=1.0D0 )
1807 COMPLEX*16 CXIMAG
1808 LOGICAL FIRST
1809 SAVE CXIMAG,FIRST
1810 DATA FIRST/.TRUE./
1811C
1812C Fix compilation with g77
1813 IF(FIRST) THEN
1814 FIRST=.FALSE.
1815 CXIMAG=DCMPLX( RXZERO, RXONE )
1816 ENDIF
1817C
1818 JIO(5) = FO(5)-FI(5)
1819 JIO(6) = FO(6)-FI(6)
1820C
1821 Q(0)=DBLE( JIO(5))
1822 Q(1)=DBLE( JIO(6))
1823 Q(2)=DIMAG(JIO(6))
1824 Q(3)=DIMAG(JIO(5))
1825 Q2=Q(0)**2-(Q(1)**2+Q(2)**2+Q(3)**2)
1826 VM2=VMASS**2
1827C
1828 IF (VMASS.NE.RXZERO) THEN
1829C
1830 D=RXONE/DCMPLX( Q2-VM2 , MAX(SIGN( VMASS*VWIDTH ,Q2),RXZERO) )
1831C for the running width, use below instead of the above d.
1832C d=r_one/dcmplx( q2-vm2 , max( vwidth*q2/vmass ,r_zero) )
1833C
1834 IF (G(2).NE.RXZERO) THEN
1835C
1836 C0= G(1)*( FO(3)*FI(1)+FO(4)*FI(2))
1837 & +G(2)*( FO(1)*FI(3)+FO(2)*FI(4))
1838 C1= -G(1)*( FO(3)*FI(2)+FO(4)*FI(1))
1839 & +G(2)*( FO(1)*FI(4)+FO(2)*FI(3))
1840 C2=( G(1)*( FO(3)*FI(2)-FO(4)*FI(1))
1841 & +G(2)*(-FO(1)*FI(4)+FO(2)*FI(3)))*CXIMAG
1842 C3= G(1)*(-FO(3)*FI(1)+FO(4)*FI(2))
1843 & +G(2)*( FO(1)*FI(3)-FO(2)*FI(4))
1844 ELSE
1845C
1846 D=D*G(1)
1847 C0= FO(3)*FI(1)+FO(4)*FI(2)
1848 C1= -FO(3)*FI(2)-FO(4)*FI(1)
1849 C2=( FO(3)*FI(2)-FO(4)*FI(1))*CXIMAG
1850 C3= -FO(3)*FI(1)+FO(4)*FI(2)
1851 END IF
1852C
1853 CS=(Q(0)*C0-Q(1)*C1-Q(2)*C2-Q(3)*C3)/VM2
1854C
1855 JIO(1) = (C0-CS*Q(0))*D
1856 JIO(2) = (C1-CS*Q(1))*D
1857 JIO(3) = (C2-CS*Q(2))*D
1858 JIO(4) = (C3-CS*Q(3))*D
1859C
1860 ELSE
1861 DD=RXONE/Q2
1862C
1863 IF (G(2).NE.RXZERO) THEN
1864 JIO(1) = ( G(1)*( FO(3)*FI(1)+FO(4)*FI(2))
1865 & +G(2)*( FO(1)*FI(3)+FO(2)*FI(4)) )*DD
1866 JIO(2) = (-G(1)*( FO(3)*FI(2)+FO(4)*FI(1))
1867 & +G(2)*( FO(1)*FI(4)+FO(2)*FI(3)) )*DD
1868 JIO(3) = ( G(1)*( FO(3)*FI(2)-FO(4)*FI(1))
1869 & +G(2)*(-FO(1)*FI(4)+FO(2)*FI(3)))
1870 $ *DCMPLX(RXZERO,DD)
1871 JIO(4) = ( G(1)*(-FO(3)*FI(1)+FO(4)*FI(2))
1872 & +G(2)*( FO(1)*FI(3)-FO(2)*FI(4)) )*DD
1873C
1874 ELSE
1875 DD=DD*G(1)
1876C
1877 JIO(1) = ( FO(3)*FI(1)+FO(4)*FI(2))*DD
1878 JIO(2) = -( FO(3)*FI(2)+FO(4)*FI(1))*DD
1879 JIO(3) = ( FO(3)*FI(2)-FO(4)*FI(1))*DCMPLX(RXZERO,DD)
1880 JIO(4) = (-FO(3)*FI(1)+FO(4)*FI(2))*DD
1881 END IF
1882 END IF
1883C
1884 RETURN
1885 END
1886C ----------------------------------------------------------------------
1887C
1888 SUBROUTINE JSSXXX(S1,S2,G,VMASS,VWIDTH , JSS)
1889C
1890C This subroutine computes an off-shell vector current from the vector-
1891C scalar-scalar coupling. The coupling is absent in the minimal SM in
1892C unitary gauge. The propagator is given in Feynman gauge for a
1893C massless vector and in unitary gauge for a massive vector.
1894C
1895C INPUT:
1896C complex S1(3) : first scalar S1
1897C complex S2(3) : second scalar S2
1898C real G : coupling constant (S1 charge)
1899C real VMASS : mass of OUTPUT vector V
1900C real VWIDTH : width of OUTPUT vector V
1901C
1902C Examples of the coupling constant G for SUSY particles are as follows:
1903C -----------------------------------------------------------
1904C | S1 | (Q,I3) of S1 || V=A | V=Z | V=W |
1905C -----------------------------------------------------------
1906C | nu~_L | ( 0 , +1/2) || --- | GZN(1) | GWF(1) |
1907C | e~_L | ( -1 , -1/2) || GAL(1) | GZL(1) | GWF(1) |
1908C | u~_L | (+2/3 , +1/2) || GAU(1) | GZU(1) | GWF(1) |
1909C | d~_L | (-1/3 , -1/2) || GAD(1) | GZD(1) | GWF(1) |
1910C -----------------------------------------------------------
1911C | e~_R-bar | ( +1 , 0 ) || -GAL(2) | -GZL(2) | -GWF(2) |
1912C | u~_R-bar | (-2/3 , 0 ) || -GAU(2) | -GZU(2) | -GWF(2) |
1913C | d~_R-bar | (+1/3 , 0 ) || -GAD(2) | -GZD(2) | -GWF(2) |
1914C -----------------------------------------------------------
1915C where the S1 charge is defined by the flowing-OUT quantum number.
1916C
1917C OUTPUT:
1918C complex JSS(6) : vector current J^mu(V:S1,S2)
1919C
1920#if defined(CERNLIB_IMPNONE)
1921 IMPLICIT NONE
1922#endif
1923 COMPLEX*16 S1(3),S2(3),JSS(6),DG,ADG
1924 REAL*8 PP(0:3),PA(0:3),Q(0:3),G,VMASS,VWIDTH,Q2,VM2,MP2,MA2,M2D
1925C
1926 JSS(5) = S1(2)+S2(2)
1927 JSS(6) = S1(3)+S2(3)
1928C
1929 Q(0)=DBLE( JSS(5))
1930 Q(1)=DBLE( JSS(6))
1931 Q(2)=DIMAG(JSS(6))
1932 Q(3)=DIMAG(JSS(5))
1933 Q2=Q(0)**2-(Q(1)**2+Q(2)**2+Q(3)**2)
1934 VM2=VMASS**2
1935C
1936 IF (VMASS.EQ.0.) GOTO 10
1937C
1938 DG=G/DCMPLX( Q2-VM2, MAX(SIGN( VMASS*VWIDTH ,Q2),0.D0))
1939C For the running width, use below instead of the above DG.
1940C DG=G/dCMPLX( Q2-VM2 , MAX( VWIDTH*Q2/VMASS ,0.) )
1941C
1942 ADG=DG*S1(1)*S2(1)
1943C
1944 PP(0)=DBLE( S1(2))
1945 PP(1)=DBLE( S1(3))
1946 PP(2)=DIMAG(S1(3))
1947 PP(3)=DIMAG(S1(2))
1948 PA(0)=DBLE( S2(2))
1949 PA(1)=DBLE( S2(3))
1950 PA(2)=DIMAG(S2(3))
1951 PA(3)=DIMAG(S2(2))
1952 MP2=PP(0)**2-(PP(1)**2+PP(2)**2+PP(3)**2)
1953 MA2=PA(0)**2-(PA(1)**2+PA(2)**2+PA(3)**2)
1954 M2D=MP2-MA2
1955C
1956 JSS(1) = ADG*( (PP(0)-PA(0)) - Q(0)*M2D/VM2)
1957 JSS(2) = ADG*( (PP(1)-PA(1)) - Q(1)*M2D/VM2)
1958 JSS(3) = ADG*( (PP(2)-PA(2)) - Q(2)*M2D/VM2)
1959 JSS(4) = ADG*( (PP(3)-PA(3)) - Q(3)*M2D/VM2)
1960C
1961 RETURN
1962C
1963 10 ADG=G*S1(1)*S2(1)/Q2
1964C
1965 JSS(1) = ADG*DBLE( S1(2)-S2(2))
1966 JSS(2) = ADG*DBLE( S1(3)-S2(3))
1967 JSS(3) = ADG*DIMAG(S1(3)-S2(3))
1968 JSS(4) = ADG*DIMAG(S1(2)-S2(2))
1969C
1970 RETURN
1971 END
1972C
1973C
1974C ----------------------------------------------------------------------
1975C
1976 SUBROUTINE JTIOXX(FI,FO,G , JIO)
1977C
1978C this subroutine computes an off-shell vector current from an external
1979C fermion pair. the vector boson propagator is not included in this
1980C routine.
1981C
1982C input:
1983C complex fi(6) : flow-in fermion |fi>
1984C complex fo(6) : flow-out fermion <fo|
1985C real g(2) : coupling constants gvf
1986C
1987C output:
1988C complex jio(6) : vector current j^mu(<fo|v|fi>)
1989C
1990#if defined(CERNLIB_IMPNONE)
1991 IMPLICIT NONE
1992#endif
1993 COMPLEX*16 FI(6),FO(6),JIO(6)
1994 REAL*8 G(2)
1995C
1996 REAL*8 RXZERO, RXONE
1997 PARAMETER( RXZERO=0.0D0, RXONE=1.0D0 )
1998 COMPLEX*16 CXIMAG
1999 LOGICAL FIRST
2000 SAVE CXIMAG,FIRST
2001 DATA FIRST/.TRUE./
2002C
2003C Fix compilation with g77
2004 IF(FIRST) THEN
2005 FIRST=.FALSE.
2006 CXIMAG=DCMPLX( RXZERO, RXONE )
2007 ENDIF
2008C
2009 JIO(5) = FO(5)-FI(5)
2010 JIO(6) = FO(6)-FI(6)
2011C
2012 IF ( G(2) .NE. RXZERO ) THEN
2013 JIO(1) = ( G(1)*( FO(3)*FI(1)+FO(4)*FI(2))
2014 & +G(2)*( FO(1)*FI(3)+FO(2)*FI(4)) )
2015 JIO(2) = (-G(1)*( FO(3)*FI(2)+FO(4)*FI(1))
2016 & +G(2)*( FO(1)*FI(4)+FO(2)*FI(3)) )
2017 JIO(3) = ( G(1)*( FO(3)*FI(2)-FO(4)*FI(1))
2018 & +G(2)*(-FO(1)*FI(4)+FO(2)*FI(3)) )*CXIMAG
2019 JIO(4) = ( G(1)*(-FO(3)*FI(1)+FO(4)*FI(2))
2020 & +G(2)*( FO(1)*FI(3)-FO(2)*FI(4)) )
2021C
2022 ELSE
2023 JIO(1) = ( FO(3)*FI(1)+FO(4)*FI(2))*G(1)
2024 JIO(2) = -( FO(3)*FI(2)+FO(4)*FI(1))*G(1)
2025 JIO(3) = ( FO(3)*FI(2)-FO(4)*FI(1))*DCMPLX(RXZERO,G(1))
2026 JIO(4) = (-FO(3)*FI(1)+FO(4)*FI(2))*G(1)
2027 END IF
2028C
2029 RETURN
2030 END
2031C ----------------------------------------------------------------------
2032C
2033 SUBROUTINE JVSSXX(VC,S1,S2,G,VMASS,VWIDTH , JVSS)
2034C
2035C This subroutine computes an off-shell vector current from the vector-
2036C vector-scalar-scalar coupling. The vector propagator is given in
2037C Feynman gauge for a massless vector and in unitary gauge for a massive
2038C vector.
2039C
2040C INPUT:
2041C complex VC(6) : input vector V
2042C complex S1(3) : first scalar S1
2043C complex S2(3) : second scalar S2
2044C real G : coupling constant GVVHH
2045C real VMASS : mass of OUTPUT vector V'
2046C real VWIDTH : width of OUTPUT vector V'
2047C
2048C OUTPUT:
2049C complex JVSS(6) : vector current J^mu(V':V,S1,S2)
2050C
2051#if defined(CERNLIB_IMPNONE)
2052 IMPLICIT NONE
2053#endif
2054 COMPLEX*16 VC(6),S1(3),S2(3),JVSS(6),DG
2055 REAL*8 Q(0:3),G,VMASS,VWIDTH,Q2,VK,VM2
2056C
2057 JVSS(5) = VC(5)+S1(2)+S2(2)
2058 JVSS(6) = VC(6)+S1(3)+S2(3)
2059C
2060 Q(0)=DBLE( JVSS(5))
2061 Q(1)=DBLE( JVSS(6))
2062 Q(2)=DIMAG(JVSS(6))
2063 Q(3)=DIMAG(JVSS(5))
2064 Q2=Q(0)**2-(Q(1)**2+Q(2)**2+Q(3)**2)
2065 VM2=VMASS**2
2066C
2067 IF (VMASS.EQ.0.) GOTO 10
2068C
2069 DG=G*S1(1)*S2(1)/DCMPLX( Q2-VM2,MAX(SIGN( VMASS*VWIDTH,Q2),0.D0))
2070C For the running width, use below instead of the above DG.
2071C DG=G*S1(1)*S2(1)/CMPLX( Q2-VM2 , MAX( VWIDTH*Q2/VMASS ,0.))
2072C
2073 VK=(Q(0)*VC(1)-Q(1)*VC(2)-Q(2)*VC(3)-Q(3)*VC(4))/VM2
2074C
2075 JVSS(1) = DG*(VC(1)-VK*Q(0))
2076 JVSS(2) = DG*(VC(2)-VK*Q(1))
2077 JVSS(3) = DG*(VC(3)-VK*Q(2))
2078 JVSS(4) = DG*(VC(4)-VK*Q(3))
2079C
2080 RETURN
2081C
2082 10 DG= G*S1(1)*S2(1)/Q2
2083C
2084 JVSS(1) = DG*VC(1)
2085 JVSS(2) = DG*VC(2)
2086 JVSS(3) = DG*VC(3)
2087 JVSS(4) = DG*VC(4)
2088C
2089 RETURN
2090 END
2091C
2092C
2093C ----------------------------------------------------------------------
2094C
2095 SUBROUTINE JVSXXX(VC,SC,G,VMASS,VWIDTH , JVS)
2096C
2097C this subroutine computes an off-shell vector current from the vector-
2098C vector-scalar coupling. the vector propagator is given in feynman
2099C gauge for a massless vector and in unitary gauge for a massive vector.
2100C
2101C input:
2102C complex vc(6) : input vector v
2103C complex sc(3) : input scalar s
2104C real g : coupling constant gvvh
2105C real vmass : mass of output vector v'
2106C real vwidth : width of output vector v'
2107C
2108C output:
2109C complex jvs(6) : vector current j^mu(v':v,s)
2110C
2111#if defined(CERNLIB_IMPNONE)
2112 IMPLICIT NONE
2113#endif
2114 COMPLEX*16 VC(6),SC(3),JVS(6),DG,VK
2115 REAL*8 Q(0:3),VMASS,VWIDTH,Q2,VM2,G
2116C
2117 JVS(5) = VC(5)+SC(2)
2118 JVS(6) = VC(6)+SC(3)
2119C
2120 Q(0)=DBLE( JVS(5))
2121 Q(1)=DBLE( JVS(6))
2122 Q(2)=DIMAG(JVS(6))
2123 Q(3)=DIMAG(JVS(5))
2124 Q2=Q(0)**2-(Q(1)**2+Q(2)**2+Q(3)**2)
2125 VM2=VMASS**2
2126C
2127 IF (VMASS.EQ.0.) GOTO 10
2128C
2129 DG=G*SC(1)/DCMPLX( Q2-VM2 , MAX(DSIGN( VMASS*VWIDTH ,Q2),0.D0) )
2130C for the running width, use below instead of the above dg.
2131C dg=g*sc(1)/dcmplx( q2-vm2 , max( vwidth*q2/vmass ,0.) )
2132C
2133 VK=(-Q(0)*VC(1)+Q(1)*VC(2)+Q(2)*VC(3)+Q(3)*VC(4))/VM2
2134C
2135 JVS(1) = DG*(Q(0)*VK+VC(1))
2136 JVS(2) = DG*(Q(1)*VK+VC(2))
2137 JVS(3) = DG*(Q(2)*VK+VC(3))
2138 JVS(4) = DG*(Q(3)*VK+VC(4))
2139C
2140 RETURN
2141C
2142 10 DG=G*SC(1)/Q2
2143C
2144 JVS(1) = DG*VC(1)
2145 JVS(2) = DG*VC(2)
2146 JVS(3) = DG*VC(3)
2147 JVS(4) = DG*VC(4)
2148C
2149 RETURN
2150 END
2151
2152
2153C
2154C ----------------------------------------------------------------------
2155C
2156 SUBROUTINE JVVXXX(V1,V2,G,VMASS,VWIDTH , JVV)
2157C
2158C this subroutine computes an off-shell vector current from the three-
2159C point gauge boson coupling. the vector propagator is given in feynman
2160C gauge for a massless vector and in unitary gauge for a massive vector.
2161C
2162C input:
2163C complex v1(6) : first vector v1
2164C complex v2(6) : second vector v2
2165C real g : coupling constant (see the table below)
2166C real vmass : mass of output vector v
2167C real vwidth : width of output vector v
2168C
2169C the possible sets of the inputs are as follows:
2170C ------------------------------------------------------------------
2171C | v1 | v2 | jvv | g | vmass | vwidth |
2172C ------------------------------------------------------------------
2173C | w- | w+ | a/z | gwwa/gwwz | 0./zmass | 0./zwidth |
2174C | w3/a/z | w- | w+ | gw/gwwa/gwwz | wmass | wwidth |
2175C | w+ | w3/a/z | w- | gw/gwwa/gwwz | wmass | wwidth |
2176C ------------------------------------------------------------------
2177C where all the bosons are defined by the flowing-out quantum number.
2178C
2179C output:
2180C complex jvv(6) : vector current j^mu(v:v1,v2)
2181C
2182#if defined(CERNLIB_IMPNONE)
2183 IMPLICIT NONE
2184#endif
2185 COMPLEX*16 V1(6),V2(6),JVV(6),J12(0:3),JS,DG,
2186 & SV1,SV2,S11,S12,S21,S22,V12
2187 REAL*8 P1(0:3),P2(0:3),Q(0:3),G,VMASS,VWIDTH,GS,S,VM2,M1,M2
2188C
2189 REAL*8 RXZERO
2190 PARAMETER( RXZERO=0.0D0 )
2191C
2192 JVV(5) = V1(5)+V2(5)
2193 JVV(6) = V1(6)+V2(6)
2194C
2195 P1(0)=DBLE( V1(5))
2196 P1(1)=DBLE( V1(6))
2197 P1(2)=DIMAG(V1(6))
2198 P1(3)=DIMAG(V1(5))
2199 P2(0)=DBLE( V2(5))
2200 P2(1)=DBLE( V2(6))
2201 P2(2)=DIMAG(V2(6))
2202 P2(3)=DIMAG(V2(5))
2203 Q(0)=-DBLE( JVV(5))
2204 Q(1)=-DBLE( JVV(6))
2205 Q(2)=-DIMAG(JVV(6))
2206 Q(3)=-DIMAG(JVV(5))
2207 S=Q(0)**2-(Q(1)**2+Q(2)**2+Q(3)**2)
2208C
2209 V12=V1(1)*V2(1)-V1(2)*V2(2)-V1(3)*V2(3)-V1(4)*V2(4)
2210 SV1= (P2(0)-Q(0))*V1(1) -(P2(1)-Q(1))*V1(2)
2211 & -(P2(2)-Q(2))*V1(3) -(P2(3)-Q(3))*V1(4)
2212 SV2=-(P1(0)-Q(0))*V2(1) +(P1(1)-Q(1))*V2(2)
2213 & +(P1(2)-Q(2))*V2(3) +(P1(3)-Q(3))*V2(4)
2214 J12(0)=(P1(0)-P2(0))*V12 +SV1*V2(1) +SV2*V1(1)
2215 J12(1)=(P1(1)-P2(1))*V12 +SV1*V2(2) +SV2*V1(2)
2216 J12(2)=(P1(2)-P2(2))*V12 +SV1*V2(3) +SV2*V1(3)
2217 J12(3)=(P1(3)-P2(3))*V12 +SV1*V2(4) +SV2*V1(4)
2218C
2219 IF ( VMASS .NE. RXZERO ) THEN
2220 VM2=VMASS**2
2221 M1=P1(0)**2-(P1(1)**2+P1(2)**2+P1(3)**2)
2222 M2=P2(0)**2-(P2(1)**2+P2(2)**2+P2(3)**2)
2223 S11=P1(0)*V1(1)-P1(1)*V1(2)-P1(2)*V1(3)-P1(3)*V1(4)
2224 S12=P1(0)*V2(1)-P1(1)*V2(2)-P1(2)*V2(3)-P1(3)*V2(4)
2225 S21=P2(0)*V1(1)-P2(1)*V1(2)-P2(2)*V1(3)-P2(3)*V1(4)
2226 S22=P2(0)*V2(1)-P2(1)*V2(2)-P2(2)*V2(3)-P2(3)*V2(4)
2227 JS=(V12*(-M1+M2) +S11*S12 -S21*S22)/VM2
2228C
2229 DG=-G/DCMPLX( S-VM2 , MAX(SIGN( VMASS*VWIDTH ,S),RXZERO) )
2230C
2231C for the running width, use below instead of the above dg.
2232C dg=-g/dcmplx( s-vm2 , max( vwidth*s/vmass ,r_zero) )
2233C
2234 JVV(1) = DG*(J12(0)-Q(0)*JS)
2235 JVV(2) = DG*(J12(1)-Q(1)*JS)
2236 JVV(3) = DG*(J12(2)-Q(2)*JS)
2237 JVV(4) = DG*(J12(3)-Q(3)*JS)
2238C
2239 ELSE
2240 GS=-G/S
2241C
2242 JVV(1) = GS*J12(0)
2243 JVV(2) = GS*J12(1)
2244 JVV(3) = GS*J12(2)
2245 JVV(4) = GS*J12(3)
2246 END IF
2247C
2248 RETURN
2249 END
2250C
2251C ----------------------------------------------------------------------
2252C
2253 SUBROUTINE JW3WXX(W1,W2,W3,G1,G2,WMASS,WWIDTH,VMASS,VWIDTH , JW3W)
2254C
2255C this subroutine computes an off-shell w+, w-, w3, z or photon current
2256C from the four-point gauge boson coupling, including the contributions
2257C of w exchange diagrams. the vector propagator is given in feynman
2258C gauge for a photon and in unitary gauge for w and z bosons. if one
2259C sets wmass=0.0, then the ggg-->g current is given (see sect 2.9.1 of
2260C the manual).
2261C
2262C input:
2263C complex w1(6) : first vector w1
2264C complex w2(6) : second vector w2
2265C complex w3(6) : third vector w3
2266C real g1 : first coupling constant
2267C real g2 : second coupling constant
2268C (see the table below)
2269C real wmass : mass of internal w
2270C real wwidth : width of internal w
2271C real vmass : mass of output w'
2272C real vwidth : width of output w'
2273C
2274C the possible sets of the inputs are as follows:
2275C -------------------------------------------------------------------
2276C | w1 | w2 | w3 | g1 | g2 |wmass|wwidth|vmass|vwidth || jw3w |
2277C -------------------------------------------------------------------
2278C | w- | w3 | w+ | gw |gwwz|wmass|wwidth|zmass|zwidth || z |
2279C | w- | w3 | w+ | gw |gwwa|wmass|wwidth| 0. | 0. || a |
2280C | w- | z | w+ |gwwz|gwwz|wmass|wwidth|zmass|zwidth || z |
2281C | w- | z | w+ |gwwz|gwwa|wmass|wwidth| 0. | 0. || a |
2282C | w- | a | w+ |gwwa|gwwz|wmass|wwidth|zmass|zwidth || z |
2283C | w- | a | w+ |gwwa|gwwa|wmass|wwidth| 0. | 0. || a |
2284C -------------------------------------------------------------------
2285C | w3 | w- | w3 | gw | gw |wmass|wwidth|wmass|wwidth || w+ |
2286C | w3 | w+ | w3 | gw | gw |wmass|wwidth|wmass|wwidth || w- |
2287C | w3 | w- | z | gw |gwwz|wmass|wwidth|wmass|wwidth || w+ |
2288C | w3 | w+ | z | gw |gwwz|wmass|wwidth|wmass|wwidth || w- |
2289C | w3 | w- | a | gw |gwwa|wmass|wwidth|wmass|wwidth || w+ |
2290C | w3 | w+ | a | gw |gwwa|wmass|wwidth|wmass|wwidth || w- |
2291C | z | w- | z |gwwz|gwwz|wmass|wwidth|wmass|wwidth || w+ |
2292C | z | w+ | z |gwwz|gwwz|wmass|wwidth|wmass|wwidth || w- |
2293C | z | w- | a |gwwz|gwwa|wmass|wwidth|wmass|wwidth || w+ |
2294C | z | w+ | a |gwwz|gwwa|wmass|wwidth|wmass|wwidth || w- |
2295C | a | w- | a |gwwa|gwwa|wmass|wwidth|wmass|wwidth || w+ |
2296C | a | w+ | a |gwwa|gwwa|wmass|wwidth|wmass|wwidth || w- |
2297C -------------------------------------------------------------------
2298C where all the bosons are defined by the flowing-out quantum number.
2299C
2300C output:
2301C complex jw3w(6) : w current j^mu(w':w1,w2,w3)
2302C
2303#if defined(CERNLIB_IMPNONE)
2304 IMPLICIT NONE
2305#endif
2306 COMPLEX*16 W1(6),W2(6),W3(6),JW3W(6)
2307 COMPLEX*16 DW1(0:3),DW2(0:3),DW3(0:3),
2308 & JJ(0:3),J4(0:3),
2309 & DV,W12,W32,W13,
2310 & JQ
2311 REAL*8 G1,G2,WMASS,WWIDTH,VMASS,VWIDTH
2312 REAL*8 P1(0:3),P2(0:3),P3(0:3),Q(0:3),
2313 & DG2,DMV,DWV,MV2,Q2
2314C
2315 REAL*8 RXZERO
2316 PARAMETER( RXZERO=0.0D0 )
2317C
2318 JW3W(5) = W1(5)+W2(5)+W3(5)
2319 JW3W(6) = W1(6)+W2(6)+W3(6)
2320C
2321 DW1(0)=DCMPLX(W1(1))
2322 DW1(1)=DCMPLX(W1(2))
2323 DW1(2)=DCMPLX(W1(3))
2324 DW1(3)=DCMPLX(W1(4))
2325 DW2(0)=DCMPLX(W2(1))
2326 DW2(1)=DCMPLX(W2(2))
2327 DW2(2)=DCMPLX(W2(3))
2328 DW2(3)=DCMPLX(W2(4))
2329 DW3(0)=DCMPLX(W3(1))
2330 DW3(1)=DCMPLX(W3(2))
2331 DW3(2)=DCMPLX(W3(3))
2332 DW3(3)=DCMPLX(W3(4))
2333 P1(0)=DBLE( W1(5))
2334 P1(1)=DBLE( W1(6))
2335 P1(2)=DBLE(DIMAG(W1(6)))
2336 P1(3)=DBLE(DIMAG(W1(5)))
2337 P2(0)=DBLE( W2(5))
2338 P2(1)=DBLE( W2(6))
2339 P2(2)=DBLE(DIMAG(W2(6)))
2340 P2(3)=DBLE(DIMAG(W2(5)))
2341 P3(0)=DBLE( W3(5))
2342 P3(1)=DBLE( W3(6))
2343 P3(2)=DBLE(DIMAG(W3(6)))
2344 P3(3)=DBLE(DIMAG(W3(5)))
2345 Q(0)=-(P1(0)+P2(0)+P3(0))
2346 Q(1)=-(P1(1)+P2(1)+P3(1))
2347 Q(2)=-(P1(2)+P2(2)+P3(2))
2348 Q(3)=-(P1(3)+P2(3)+P3(3))
2349
2350
2351 Q2 =Q(0)**2 -(Q(1)**2 +Q(2)**2 +Q(3)**2)
2352 DG2=DBLE(G1)*DBLE(G2)
2353 DMV=DBLE(VMASS)
2354 DWV=DBLE(VWIDTH)
2355 MV2=DMV**2
2356 IF (VMASS.EQ. RXZERO) THEN
2357 DV = 1.0D0/DCMPLX( Q2 )
2358 ELSE
2359 DV = 1.0D0/DCMPLX( Q2 -MV2 , DMAX1(DSIGN(DMV*DWV,Q2 ),0.D0) )
2360 ENDIF
2361C for the running width, use below instead of the above dv.
2362C dv = 1.0d0/dcmplx( q2 -mv2 , dmax1(dwv*q2/dmv,0.d0) )
2363C
2364 W12=DW1(0)*DW2(0)-DW1(1)*DW2(1)-DW1(2)*DW2(2)-DW1(3)*DW2(3)
2365 W32=DW3(0)*DW2(0)-DW3(1)*DW2(1)-DW3(2)*DW2(2)-DW3(3)*DW2(3)
2366C
2367 IF ( WMASS .NE. RXZERO ) THEN
2368 W13=DW1(0)*DW3(0)-DW1(1)*DW3(1)-DW1(2)*DW3(2)-DW1(3)*DW3(3)
2369C
2370 J4(0)=DG2*( DW1(0)*W32 + DW3(0)*W12 - 2.D0*DW2(0)*W13 )
2371 J4(1)=DG2*( DW1(1)*W32 + DW3(1)*W12 - 2.D0*DW2(1)*W13 )
2372 J4(2)=DG2*( DW1(2)*W32 + DW3(2)*W12 - 2.D0*DW2(2)*W13 )
2373 J4(3)=DG2*( DW1(3)*W32 + DW3(3)*W12 - 2.D0*DW2(3)*W13 )
2374C
2375 JJ(0)=J4(0)
2376 JJ(1)=J4(1)
2377 JJ(2)=J4(2)
2378 JJ(3)=J4(3)
2379
2380 ELSE
2381C
2382 W12=DW1(0)*DW2(0)-DW1(1)*DW2(1)-DW1(2)*DW2(2)-DW1(3)*DW2(3)
2383 W32=DW3(0)*DW2(0)-DW3(1)*DW2(1)-DW3(2)*DW2(2)-DW3(3)*DW2(3)
2384 W13=DW1(0)*DW3(0)-DW1(1)*DW3(1)-DW1(2)*DW3(2)-DW1(3)*DW3(3)
2385C
2386 J4(0)=DG2*( DW1(0)*W32 - DW2(0)*W13 )
2387 J4(1)=DG2*( DW1(1)*W32 - DW2(1)*W13 )
2388 J4(2)=DG2*( DW1(2)*W32 - DW2(2)*W13 )
2389 J4(3)=DG2*( DW1(3)*W32 - DW2(3)*W13 )
2390C
2391 JJ(0)=J4(0)
2392 JJ(1)=J4(1)
2393 JJ(2)=J4(2)
2394 JJ(3)=J4(3)
2395
2396 END IF
2397C
2398 IF ( VMASS .NE. RXZERO ) THEN
2399C
2400 JQ=(JJ(0)*Q(0)-JJ(1)*Q(1)-JJ(2)*Q(2)-JJ(3)*Q(3))/MV2
2401C
2402 JW3W(1) = DCMPLX( (JJ(0)-JQ*Q(0))*DV )
2403 JW3W(2) = DCMPLX( (JJ(1)-JQ*Q(1))*DV )
2404 JW3W(3) = DCMPLX( (JJ(2)-JQ*Q(2))*DV )
2405 JW3W(4) = DCMPLX( (JJ(3)-JQ*Q(3))*DV )
2406C
2407 ELSE
2408C
2409 JW3W(1) = DCMPLX( JJ(0)*DV )
2410 JW3W(2) = DCMPLX( JJ(1)*DV )
2411 JW3W(3) = DCMPLX( JJ(2)*DV )
2412 JW3W(4) = DCMPLX( JJ(3)*DV )
2413 END IF
2414C
2415 RETURN
2416 END
2417C
2418C ----------------------------------------------------------------------
2419C
2420 SUBROUTINE JWWWXX(W1,W2,W3,GWWA,GWWZ,ZMASS,ZWIDTH,WMASS,WWIDTH ,
2421 & JWWW)
2422C
2423C this subroutine computes an off-shell w+/w- current from the four-
2424C point gauge boson coupling, including the contributions of photon and
2425C z exchanges. the vector propagators for the output w and the internal
2426C z bosons are given in unitary gauge, and that of the internal photon
2427C is given in feynman gauge.
2428C
2429C input:
2430C complex w1(6) : first vector w1
2431C complex w2(6) : second vector w2
2432C complex w3(6) : third vector w3
2433C real gwwa : coupling constant of w and a gwwa
2434C real gwwz : coupling constant of w and z gwwz
2435C real zmass : mass of internal z
2436C real zwidth : width of internal z
2437C real wmass : mass of output w
2438C real wwidth : width of output w
2439C
2440C the possible sets of the inputs are as follows:
2441C -------------------------------------------------------------------
2442C | w1 | w2 | w3 |gwwa|gwwz|zmass|zwidth|wmass|wwidth || jwww |
2443C -------------------------------------------------------------------
2444C | w- | w+ | w- |gwwa|gwwz|zmass|zwidth|wmass|wwidth || w+ |
2445C | w+ | w- | w+ |gwwa|gwwz|zmass|zwidth|wmass|wwidth || w- |
2446C -------------------------------------------------------------------
2447C where all the bosons are defined by the flowing-out quantum number.
2448C
2449C output:
2450C complex jwww(6) : w current j^mu(w':w1,w2,w3)
2451C
2452#if defined(CERNLIB_IMPNONE)
2453 IMPLICIT NONE
2454#endif
2455 COMPLEX*16 W1(6),W2(6),W3(6),JWWW(6)
2456 COMPLEX*16 DW1(0:3),DW2(0:3),DW3(0:3),
2457 & JJ(0:3),JS(0:3),JT(0:3),J4(0:3),
2458 & JT12(0:3),JT32(0:3),J12(0:3),J32(0:3),
2459 & DZS,DZT,DW,W12,W32,W13,P1W2,P2W1,P3W2,P2W3,
2460 & JK12,JK32,JSW3,JTW1,P3JS,KSW3,P1JT,KTW1,JQ
2461 REAL*8 GWWA,GWWZ,ZMASS,ZWIDTH,WMASS,WWIDTH
2462 REAL*8 P1(0:3),P2(0:3),P3(0:3),Q(0:3),KS(0:3),KT(0:3),
2463 & DGWWA2,DGWWZ2,DGW2,DMZ,DWZ,DMW,DWW,MZ2,MW2,Q2,KS2,KT2,
2464 & DAS,DAT
2465C
2466 JWWW(5) = W1(5)+W2(5)+W3(5)
2467 JWWW(6) = W1(6)+W2(6)+W3(6)
2468C
2469 DW1(0)=DCMPLX(W1(1))
2470 DW1(1)=DCMPLX(W1(2))
2471 DW1(2)=DCMPLX(W1(3))
2472 DW1(3)=DCMPLX(W1(4))
2473 DW2(0)=DCMPLX(W2(1))
2474 DW2(1)=DCMPLX(W2(2))
2475 DW2(2)=DCMPLX(W2(3))
2476 DW2(3)=DCMPLX(W2(4))
2477 DW3(0)=DCMPLX(W3(1))
2478 DW3(1)=DCMPLX(W3(2))
2479 DW3(2)=DCMPLX(W3(3))
2480 DW3(3)=DCMPLX(W3(4))
2481 P1(0)=DBLE( W1(5))
2482 P1(1)=DBLE( W1(6))
2483 P1(2)=DBLE(DIMAG(W1(6)))
2484 P1(3)=DBLE(DIMAG(W1(5)))
2485 P2(0)=DBLE( W2(5))
2486 P2(1)=DBLE( W2(6))
2487 P2(2)=DBLE(DIMAG(W2(6)))
2488 P2(3)=DBLE(DIMAG(W2(5)))
2489 P3(0)=DBLE( W3(5))
2490 P3(1)=DBLE( W3(6))
2491 P3(2)=DBLE(DIMAG(W3(6)))
2492 P3(3)=DBLE(DIMAG(W3(5)))
2493 Q(0)=-(P1(0)+P2(0)+P3(0))
2494 Q(1)=-(P1(1)+P2(1)+P3(1))
2495 Q(2)=-(P1(2)+P2(2)+P3(2))
2496 Q(3)=-(P1(3)+P2(3)+P3(3))
2497 KS(0)=P1(0)+P2(0)
2498 KS(1)=P1(1)+P2(1)
2499 KS(2)=P1(2)+P2(2)
2500 KS(3)=P1(3)+P2(3)
2501 KT(0)=P2(0)+P3(0)
2502 KT(1)=P2(1)+P3(1)
2503 KT(2)=P2(2)+P3(2)
2504 KT(3)=P2(3)+P3(3)
2505 Q2 =Q(0)**2 -(Q(1)**2 +Q(2)**2 +Q(3)**2)
2506 KS2=KS(0)**2-(KS(1)**2+KS(2)**2+KS(3)**2)
2507 KT2=KT(0)**2-(KT(1)**2+KT(2)**2+KT(3)**2)
2508 DGWWA2=DBLE(GWWA)**2
2509 DGWWZ2=DBLE(GWWZ)**2
2510 DGW2 =DGWWA2+DGWWZ2
2511 DMZ=DBLE(ZMASS)
2512 DWZ=DBLE(ZWIDTH)
2513 DMW=DBLE(WMASS)
2514 DWW=DBLE(WWIDTH)
2515 MZ2=DMZ**2
2516 MW2=DMW**2
2517C
2518 DAS=-DGWWA2/KS2
2519 DAT=-DGWWA2/KT2
2520 DZS=-DGWWZ2/DCMPLX( KS2-MZ2 , DMAX1(DSIGN(DMZ*DWZ,KS2),0.D0) )
2521 DZT=-DGWWZ2/DCMPLX( KT2-MZ2 , DMAX1(DSIGN(DMZ*DWZ,KT2),0.D0) )
2522 DW =-1.0D0/DCMPLX( Q2 -MW2 , DMAX1(DSIGN(DMW*DWW,Q2 ),0.D0) )
2523C for the running width, use below instead of the above dw.
2524C dw =-1.0d0/dcmplx( q2 -mw2 , dmax1(dww*q2/dmw,0.d0) )
2525C
2526 W12=DW1(0)*DW2(0)-DW1(1)*DW2(1)-DW1(2)*DW2(2)-DW1(3)*DW2(3)
2527 W32=DW3(0)*DW2(0)-DW3(1)*DW2(1)-DW3(2)*DW2(2)-DW3(3)*DW2(3)
2528C
2529 P1W2= (P1(0)+KS(0))*DW2(0)-(P1(1)+KS(1))*DW2(1)
2530 & -(P1(2)+KS(2))*DW2(2)-(P1(3)+KS(3))*DW2(3)
2531 P2W1= (P2(0)+KS(0))*DW1(0)-(P2(1)+KS(1))*DW1(1)
2532 & -(P2(2)+KS(2))*DW1(2)-(P2(3)+KS(3))*DW1(3)
2533 P3W2= (P3(0)+KT(0))*DW2(0)-(P3(1)+KT(1))*DW2(1)
2534 & -(P3(2)+KT(2))*DW2(2)-(P3(3)+KT(3))*DW2(3)
2535 P2W3= (P2(0)+KT(0))*DW3(0)-(P2(1)+KT(1))*DW3(1)
2536 & -(P2(2)+KT(2))*DW3(2)-(P2(3)+KT(3))*DW3(3)
2537C
2538 JT12(0)= (P1(0)-P2(0))*W12 + P2W1*DW2(0) - P1W2*DW1(0)
2539 JT12(1)= (P1(1)-P2(1))*W12 + P2W1*DW2(1) - P1W2*DW1(1)
2540 JT12(2)= (P1(2)-P2(2))*W12 + P2W1*DW2(2) - P1W2*DW1(2)
2541 JT12(3)= (P1(3)-P2(3))*W12 + P2W1*DW2(3) - P1W2*DW1(3)
2542 JT32(0)= (P3(0)-P2(0))*W32 + P2W3*DW2(0) - P3W2*DW3(0)
2543 JT32(1)= (P3(1)-P2(1))*W32 + P2W3*DW2(1) - P3W2*DW3(1)
2544 JT32(2)= (P3(2)-P2(2))*W32 + P2W3*DW2(2) - P3W2*DW3(2)
2545 JT32(3)= (P3(3)-P2(3))*W32 + P2W3*DW2(3) - P3W2*DW3(3)
2546C
2547 JK12=(JT12(0)*KS(0)-JT12(1)*KS(1)-JT12(2)*KS(2)-JT12(3)*KS(3))/MZ2
2548 JK32=(JT32(0)*KT(0)-JT32(1)*KT(1)-JT32(2)*KT(2)-JT32(3)*KT(3))/MZ2
2549C
2550 J12(0)=JT12(0)*(DAS+DZS)-KS(0)*JK12*DZS
2551 J12(1)=JT12(1)*(DAS+DZS)-KS(1)*JK12*DZS
2552 J12(2)=JT12(2)*(DAS+DZS)-KS(2)*JK12*DZS
2553 J12(3)=JT12(3)*(DAS+DZS)-KS(3)*JK12*DZS
2554 J32(0)=JT32(0)*(DAT+DZT)-KT(0)*JK32*DZT
2555 J32(1)=JT32(1)*(DAT+DZT)-KT(1)*JK32*DZT
2556 J32(2)=JT32(2)*(DAT+DZT)-KT(2)*JK32*DZT
2557 J32(3)=JT32(3)*(DAT+DZT)-KT(3)*JK32*DZT
2558C
2559 JSW3=J12(0)*DW3(0)-J12(1)*DW3(1)-J12(2)*DW3(2)-J12(3)*DW3(3)
2560 JTW1=J32(0)*DW1(0)-J32(1)*DW1(1)-J32(2)*DW1(2)-J32(3)*DW1(3)
2561C
2562 P3JS= (P3(0)-Q(0))*J12(0)-(P3(1)-Q(1))*J12(1)
2563 & -(P3(2)-Q(2))*J12(2)-(P3(3)-Q(3))*J12(3)
2564 KSW3= (KS(0)-Q(0))*DW3(0)-(KS(1)-Q(1))*DW3(1)
2565 & -(KS(2)-Q(2))*DW3(2)-(KS(3)-Q(3))*DW3(3)
2566 P1JT= (P1(0)-Q(0))*J32(0)-(P1(1)-Q(1))*J32(1)
2567 & -(P1(2)-Q(2))*J32(2)-(P1(3)-Q(3))*J32(3)
2568 KTW1= (KT(0)-Q(0))*DW1(0)-(KT(1)-Q(1))*DW1(1)
2569 & -(KT(2)-Q(2))*DW1(2)-(KT(3)-Q(3))*DW1(3)
2570C
2571 JS(0)= (KS(0)-P3(0))*JSW3 + P3JS*DW3(0) - KSW3*J12(0)
2572 JS(1)= (KS(1)-P3(1))*JSW3 + P3JS*DW3(1) - KSW3*J12(1)
2573 JS(2)= (KS(2)-P3(2))*JSW3 + P3JS*DW3(2) - KSW3*J12(2)
2574 JS(3)= (KS(3)-P3(3))*JSW3 + P3JS*DW3(3) - KSW3*J12(3)
2575 JT(0)= (KT(0)-P1(0))*JTW1 + P1JT*DW1(0) - KTW1*J32(0)
2576 JT(1)= (KT(1)-P1(1))*JTW1 + P1JT*DW1(1) - KTW1*J32(1)
2577 JT(2)= (KT(2)-P1(2))*JTW1 + P1JT*DW1(2) - KTW1*J32(2)
2578 JT(3)= (KT(3)-P1(3))*JTW1 + P1JT*DW1(3) - KTW1*J32(3)
2579C
2580 W13=DW1(0)*DW3(0)-DW1(1)*DW3(1)-DW1(2)*DW3(2)-DW1(3)*DW3(3)
2581C
2582 J4(0)=DGW2*( DW1(0)*W32 + DW3(0)*W12 - 2.D0*DW2(0)*W13 )
2583 J4(1)=DGW2*( DW1(1)*W32 + DW3(1)*W12 - 2.D0*DW2(1)*W13 )
2584 J4(2)=DGW2*( DW1(2)*W32 + DW3(2)*W12 - 2.D0*DW2(2)*W13 )
2585 J4(3)=DGW2*( DW1(3)*W32 + DW3(3)*W12 - 2.D0*DW2(3)*W13 )
2586C
2587C jj(0)=js(0)+jt(0)+j4(0)
2588C jj(1)=js(1)+jt(1)+j4(1)
2589C jj(2)=js(2)+jt(2)+j4(2)
2590C jj(3)=js(3)+jt(3)+j4(3)
2591
2592 JJ(0)=J4(0)
2593 JJ(1)=J4(1)
2594 JJ(2)=J4(2)
2595 JJ(3)=J4(3)
2596C
2597 JQ=(JJ(0)*Q(0)-JJ(1)*Q(1)-JJ(2)*Q(2)-JJ(3)*Q(3))/MW2
2598C
2599
2600 JWWW(1) = DCMPLX( (JJ(0)-JQ*Q(0))*DW )
2601 JWWW(2) = DCMPLX( (JJ(1)-JQ*Q(1))*DW )
2602 JWWW(3) = DCMPLX( (JJ(2)-JQ*Q(2))*DW )
2603 JWWW(4) = DCMPLX( (JJ(3)-JQ*Q(3))*DW )
2604C
2605 RETURN
2606 END
2607
2608C
2609C ----------------------------------------------------------------------
2610C
2611 SUBROUTINE MOM2CX(ESUM,MASS1,MASS2,COSTH1,PHI1 , P1,P2)
2612C
2613C This subroutine sets up two four-momenta in the two particle rest
2614C frame.
2615C
2616C INPUT:
2617C real ESUM : energy sum of particle 1 and 2
2618C real MASS1 : mass of particle 1
2619C real MASS2 : mass of particle 2
2620C real COSTH1 : cos(theta) of particle 1
2621C real PHI1 : azimuthal angle of particle 1
2622C
2623C OUTPUT:
2624C real P1(0:3) : four-momentum of particle 1
2625C real P2(0:3) : four-momentum of particle 2
2626C
2627#if defined(CERNLIB_IMPNONE)
2628 IMPLICIT NONE
2629#endif
2630 REAL*8 P1(0:3),P2(0:3),
2631 & ESUM,MASS1,MASS2,COSTH1,PHI1,MD2,ED,PP,SINTH1
2632C
2633 MD2=(MASS1-MASS2)*(MASS1+MASS2)
2634 ED=MD2/ESUM
2635 IF (MASS1*MASS2.EQ.0.) THEN
2636 PP=(ESUM-ABS(ED))*0.5D0
2637C
2638 ELSE
2639 PP=SQRT((MD2/ESUM)**2-2.0D0*(MASS1**2+MASS2**2)+ESUM**2)*0.5D0
2640 ENDIF
2641 SINTH1=SQRT((1.0D0-COSTH1)*(1.0D0+COSTH1))
2642C
2643 P1(0) = MAX((ESUM+ED)*0.5D0,0.D0)
2644 P1(1) = PP*SINTH1*COS(PHI1)
2645 P1(2) = PP*SINTH1*SIN(PHI1)
2646 P1(3) = PP*COSTH1
2647C
2648 P2(0) = MAX((ESUM-ED)*0.5D0,0.D0)
2649 P2(1) = -P1(1)
2650 P2(2) = -P1(2)
2651 P2(3) = -P1(3)
2652C
2653 RETURN
2654 END
2655C **********************************************************************
2656C
2657 SUBROUTINE MOMNTX(ENERGY,MASS,COSTH,PHI , P)
2658C
2659C This subroutine sets up a four-momentum from the four inputs.
2660C
2661C INPUT:
2662C real ENERGY : energy
2663C real MASS : mass
2664C real COSTH : cos(theta)
2665C real PHI : azimuthal angle
2666C
2667C OUTPUT:
2668C real P(0:3) : four-momentum
2669C
2670#if defined(CERNLIB_IMPNONE)
2671 IMPLICIT NONE
2672#endif
2673 REAL*8 P(0:3),ENERGY,MASS,COSTH,PHI,PP,SINTH
2674C
2675 P(0) = ENERGY
2676 IF (ENERGY.EQ.MASS) THEN
2677 P(1) = 0.
2678 P(2) = 0.
2679 P(3) = 0.
2680 ELSE
2681 PP=SQRT((ENERGY-MASS)*(ENERGY+MASS))
2682 SINTH=SQRT((1.-COSTH)*(1.+COSTH))
2683 P(3) = PP*COSTH
2684 IF (PHI.EQ.0.) THEN
2685 P(1) = PP*SINTH
2686 P(2) = 0.
2687 ELSE
2688 P(1) = PP*SINTH*COS(PHI)
2689 P(2) = PP*SINTH*SIN(PHI)
2690 ENDIF
2691 ENDIF
2692 RETURN
2693 END
2694C
2695C
2696C
2697C Subroutine returns the desired fermion or
2698C anti-fermion anti-spinor. ie., <f|
2699C A replacement for the HELAS routine OXXXXX
2700C
2701C Adam Duff, 1992 August 31
2702C <duff@phenom.physics.wisc.edu>
2703C
2704 SUBROUTINE OXXXXX(P,FMASS,NHEL,NSF,FO)
2705C
2706C P IN: FOUR VECTOR MOMENTUM
2707C FMASS IN: FERMION MASS
2708C NHEL IN: ANTI-SPINOR HELICITY, -1 OR 1
2709C NSF IN: -1=ANTIFERMION, 1=FERMION
2710C FO OUT: FERMION WAVEFUNCTION
2711C
2712C declare input/output variables
2713C
2714#if defined(CERNLIB_IMPNONE)
2715 IMPLICIT NONE
2716#endif
2717 COMPLEX*16 FO(6)
2718 INTEGER*4 NHEL, NSF
2719 REAL*8 P(0:3), FMASS
2720C
2721C declare local variables
2722C
2723 REAL*8 RXZERO, RXONE, RXTWO
2724 PARAMETER( RXZERO=0.0D0, RXONE=1.0D0, RXTWO=2.0D0 )
2725 REAL*8 PLAT, PABS, OMEGAP, OMEGAM, RS2PA, SPAZ
2726 COMPLEX*16 CXZERO
2727 LOGICAL FIRST
2728 SAVE CXZERO,FIRST
2729 DATA FIRST/.TRUE./
2730C
2731C Fix compilation with g77
2732 IF(FIRST) THEN
2733 FIRST=.FALSE.
2734 CXZERO=DCMPLX( RXZERO, RXZERO )
2735 ENDIF
2736C
2737C define kinematic parameters
2738C
2739 FO(5) = DCMPLX( P(0), P(3) ) * NSF
2740 FO(6) = DCMPLX( P(1), P(2) ) * NSF
2741 PLAT = SQRT( P(1)**2 + P(2)**2 )
2742 PABS = SQRT( P(1)**2 + P(2)**2 + P(3)**2 )
2743 OMEGAP = SQRT( P(0) + PABS )
2744C
2745C do massive fermion case
2746C
2747 IF ( FMASS .NE. RXZERO ) THEN
2748 OMEGAM = FMASS / OMEGAP
2749 IF ( NSF .EQ. 1 ) THEN
2750 IF ( NHEL .EQ. 1 ) THEN
2751 IF ( P(3) .GE. RXZERO ) THEN
2752 IF ( PLAT .EQ. RXZERO ) THEN
2753 FO(1) = DCMPLX( OMEGAP, RXZERO )
2754 FO(2) = CXZERO
2755 FO(3) = DCMPLX( OMEGAM, RXZERO )
2756 FO(4) = CXZERO
2757 ELSE
2758 RS2PA = RXONE / SQRT( RXTWO * PABS )
2759 SPAZ = SQRT( PABS + P(3) )
2760 FO(1) = OMEGAP * RS2PA
2761 & * DCMPLX( SPAZ, RXZERO )
2762 FO(2) = OMEGAP * RS2PA / SPAZ
2763 & * DCMPLX( P(1), -P(2) )
2764 FO(3) = OMEGAM * RS2PA
2765 & * DCMPLX( SPAZ, RXZERO )
2766 FO(4) = OMEGAM * RS2PA / SPAZ
2767 & * DCMPLX( P(1), -P(2) )
2768 END IF
2769 ELSE
2770 IF ( PLAT .EQ. RXZERO ) THEN
2771 FO(1) = CXZERO
2772 FO(2) = DCMPLX( OMEGAP, RXZERO )
2773 FO(3) = CXZERO
2774 FO(4) = DCMPLX( OMEGAM, RXZERO )
2775 ELSE
2776 RS2PA = RXONE / SQRT( RXTWO * PABS )
2777 SPAZ = SQRT( PABS - P(3) )
2778 FO(1) = OMEGAP * RS2PA / SPAZ
2779 & * DCMPLX( PLAT, RXZERO )
2780 FO(2) = OMEGAP * RS2PA * SPAZ / PLAT
2781 & * DCMPLX( P(1), -P(2) )
2782 FO(3) = OMEGAM * RS2PA / SPAZ
2783 & * DCMPLX( PLAT, RXZERO )
2784 FO(4) = OMEGAM * RS2PA * SPAZ / PLAT
2785 & * DCMPLX( P(1), -P(2) )
2786 END IF
2787 END IF
2788 ELSE IF ( NHEL .EQ. -1 ) THEN
2789 IF ( P(3) .GE. RXZERO ) THEN
2790 IF ( PLAT .EQ. RXZERO ) THEN
2791 FO(1) = CXZERO
2792 FO(2) = DCMPLX( OMEGAM, RXZERO )
2793 FO(3) = CXZERO
2794 FO(4) = DCMPLX( OMEGAP, RXZERO )
2795 ELSE
2796 RS2PA = RXONE / SQRT( RXTWO * PABS )
2797 SPAZ = SQRT( PABS + P(3) )
2798 FO(1) = OMEGAM * RS2PA / SPAZ
2799 & * DCMPLX( -P(1), -P(2) )
2800 FO(2) = OMEGAM * RS2PA
2801 & * DCMPLX( SPAZ, RXZERO )
2802 FO(3) = OMEGAP * RS2PA / SPAZ
2803 & * DCMPLX( -P(1), -P(2) )
2804 FO(4) = OMEGAP * RS2PA
2805 & * DCMPLX( SPAZ, RXZERO )
2806 END IF
2807 ELSE
2808 IF ( PLAT .EQ. RXZERO ) THEN
2809 FO(1) = DCMPLX( -OMEGAM, RXZERO )
2810 FO(2) = CXZERO
2811 FO(3) = DCMPLX( -OMEGAP, RXZERO )
2812 FO(4) = CXZERO
2813 ELSE
2814 RS2PA = RXONE / SQRT( RXTWO * PABS )
2815 SPAZ = SQRT( PABS - P(3) )
2816 FO(1) = OMEGAM * RS2PA * SPAZ / PLAT
2817 & * DCMPLX( -P(1), -P(2) )
2818 FO(2) = OMEGAM * RS2PA / SPAZ
2819 & * DCMPLX( PLAT, RXZERO )
2820 FO(3) = OMEGAP * RS2PA * SPAZ / PLAT
2821 & * DCMPLX( -P(1), -P(2) )
2822 FO(4) = OMEGAP * RS2PA / SPAZ
2823 & * DCMPLX( PLAT, RXZERO )
2824 END IF
2825 END IF
2826 ELSE
2827 STOP 'OXXXXX: FERMION HELICITY MUST BE +1,-1'
2828 END IF
2829 ELSE IF ( NSF .EQ. -1 ) THEN
2830 IF ( NHEL .EQ. 1 ) THEN
2831 IF ( P(3) .GE. RXZERO ) THEN
2832 IF ( PLAT .EQ. RXZERO ) THEN
2833 FO(1) = CXZERO
2834 FO(2) = DCMPLX( OMEGAM, RXZERO )
2835 FO(3) = CXZERO
2836 FO(4) = DCMPLX( -OMEGAP, RXZERO )
2837 ELSE
2838 RS2PA = RXONE / SQRT( RXTWO * PABS )
2839 SPAZ = SQRT( PABS + P(3) )
2840 FO(1) = OMEGAM * RS2PA / SPAZ
2841 & * DCMPLX( -P(1), -P(2) )
2842 FO(2) = OMEGAM * RS2PA
2843 & * DCMPLX( SPAZ, RXZERO )
2844 FO(3) = -OMEGAP * RS2PA / SPAZ
2845 & * DCMPLX( -P(1), -P(2) )
2846 FO(4) = -OMEGAP * RS2PA
2847 & * DCMPLX( SPAZ, RXZERO )
2848 END IF
2849 ELSE
2850 IF ( PLAT .EQ. RXZERO ) THEN
2851 FO(1) = DCMPLX( -OMEGAM, RXZERO )
2852 FO(2) = CXZERO
2853 FO(3) = DCMPLX( OMEGAP, RXZERO )
2854 FO(4) = CXZERO
2855 ELSE
2856 RS2PA = RXONE / SQRT( RXTWO * PABS )
2857 SPAZ = SQRT( PABS - P(3) )
2858 FO(1) = OMEGAM * RS2PA * SPAZ / PLAT
2859 & * DCMPLX( -P(1), -P(2) )
2860 FO(2) = OMEGAM * RS2PA / SPAZ
2861 & * DCMPLX( PLAT, RXZERO )
2862 FO(3) = -OMEGAP * RS2PA * SPAZ / PLAT
2863 & * DCMPLX( -P(1), -P(2) )
2864 FO(4) = -OMEGAP * RS2PA / SPAZ
2865 & * DCMPLX( PLAT, RXZERO )
2866 END IF
2867 END IF
2868 ELSE IF ( NHEL .EQ. -1 ) THEN
2869 IF ( P(3) .GE. RXZERO ) THEN
2870 IF ( PLAT .EQ. RXZERO ) THEN
2871 FO(1) = DCMPLX( -OMEGAP, RXZERO )
2872 FO(2) = CXZERO
2873 FO(3) = DCMPLX( OMEGAM, RXZERO )
2874 FO(4) = CXZERO
2875 ELSE
2876 RS2PA = RXONE / SQRT( RXTWO * PABS )
2877 SPAZ = SQRT( PABS + P(3) )
2878 FO(1) = -OMEGAP * RS2PA
2879 & * DCMPLX( SPAZ, RXZERO )
2880 FO(2) = -OMEGAP * RS2PA / SPAZ
2881 & * DCMPLX( P(1), -P(2) )
2882 FO(3) = OMEGAM * RS2PA
2883 & * DCMPLX( SPAZ, RXZERO )
2884 FO(4) = OMEGAM * RS2PA / SPAZ
2885 & * DCMPLX( P(1), -P(2) )
2886 END IF
2887 ELSE
2888 IF ( PLAT .EQ. RXZERO ) THEN
2889 FO(1) = CXZERO
2890 FO(2) = DCMPLX( -OMEGAP, RXZERO )
2891 FO(3) = CXZERO
2892 FO(4) = DCMPLX( OMEGAM, RXZERO )
2893 ELSE
2894 RS2PA = RXONE / SQRT( RXTWO * PABS )
2895 SPAZ = SQRT( PABS - P(3) )
2896 FO(1) = -OMEGAP * RS2PA / SPAZ
2897 & * DCMPLX( PLAT, RXZERO )
2898 FO(2) = -OMEGAP * RS2PA * SPAZ / PLAT
2899 & * DCMPLX( P(1), -P(2) )
2900 FO(3) = OMEGAM * RS2PA / SPAZ
2901 & * DCMPLX( PLAT, RXZERO )
2902 FO(4) = OMEGAM * RS2PA * SPAZ / PLAT
2903 & * DCMPLX( P(1), -P(2) )
2904 END IF
2905 END IF
2906 ELSE
2907 STOP 'OXXXXX: FERMION HELICITY MUST BE +1,-1'
2908 END IF
2909 ELSE
2910 STOP 'OXXXXX: FERMION TYPE MUST BE +1,-1'
2911 END IF
2912C
2913C do massless case
2914C
2915 ELSE
2916 IF ( NSF .EQ. 1 ) THEN
2917 IF ( NHEL .EQ. 1 ) THEN
2918 IF ( P(3) .GE. RXZERO ) THEN
2919 IF ( PLAT .EQ. RXZERO ) THEN
2920 FO(1) = DCMPLX( OMEGAP, RXZERO )
2921 FO(2) = CXZERO
2922 FO(3) = CXZERO
2923 FO(4) = CXZERO
2924 ELSE
2925 SPAZ = SQRT( PABS + P(3) )
2926 FO(1) = DCMPLX( SPAZ, RXZERO )
2927 FO(2) = RXONE / SPAZ
2928 & * DCMPLX( P(1), -P(2) )
2929 FO(3) = CXZERO
2930 FO(4) = CXZERO
2931 END IF
2932 ELSE
2933 IF ( PLAT .EQ. RXZERO ) THEN
2934 FO(1) = CXZERO
2935 FO(2) = DCMPLX( OMEGAP, RXZERO )
2936 FO(3) = CXZERO
2937 FO(4) = CXZERO
2938 ELSE
2939 SPAZ = SQRT( PABS - P(3) )
2940 FO(1) = RXONE / SPAZ
2941 & * DCMPLX( PLAT, RXZERO )
2942 FO(2) = SPAZ / PLAT
2943 & * DCMPLX( P(1), -P(2) )
2944 FO(3) = CXZERO
2945 FO(4) = CXZERO
2946 END IF
2947 END IF
2948 ELSE IF ( NHEL .EQ. -1 ) THEN
2949 IF ( P(3) .GE. RXZERO ) THEN
2950 IF ( PLAT .EQ. RXZERO ) THEN
2951 FO(1) = CXZERO
2952 FO(2) = CXZERO
2953 FO(3) = CXZERO
2954 FO(4) = DCMPLX( OMEGAP, RXZERO )
2955 ELSE
2956 SPAZ = SQRT( PABS + P(3) )
2957 FO(1) = CXZERO
2958 FO(2) = CXZERO
2959 FO(3) = RXONE / SPAZ
2960 & * DCMPLX( -P(1), -P(2) )
2961 FO(4) = DCMPLX( SPAZ, RXZERO )
2962 END IF
2963 ELSE
2964 IF ( PLAT .EQ. RXZERO ) THEN
2965 FO(1) = CXZERO
2966 FO(2) = CXZERO
2967 FO(3) = DCMPLX( -OMEGAP, RXZERO )
2968 FO(4) = CXZERO
2969 ELSE
2970 SPAZ = SQRT( PABS - P(3) )
2971 FO(1) = CXZERO
2972 FO(2) = CXZERO
2973 FO(3) = SPAZ / PLAT
2974 & * DCMPLX( -P(1), -P(2) )
2975 FO(4) = RXONE / SPAZ
2976 & * DCMPLX( PLAT, RXZERO )
2977 END IF
2978 END IF
2979 ELSE
2980 STOP 'OXXXXX: FERMION HELICITY MUST BE +1,-1'
2981 END IF
2982 ELSE IF ( NSF .EQ. -1 ) THEN
2983 IF ( NHEL .EQ. 1 ) THEN
2984 IF ( P(3) .GE. RXZERO ) THEN
2985 IF ( PLAT .EQ. RXZERO ) THEN
2986 FO(1) = CXZERO
2987 FO(2) = CXZERO
2988 FO(3) = CXZERO
2989 FO(4) = DCMPLX( -OMEGAP, RXZERO )
2990 ELSE
2991 SPAZ = SQRT( PABS + P(3) )
2992 FO(1) = CXZERO
2993 FO(2) = CXZERO
2994 FO(3) = -RXONE / SPAZ
2995 & * DCMPLX( -P(1), -P(2) )
2996 FO(4) = DCMPLX( -SPAZ, RXZERO )
2997 END IF
2998 ELSE
2999 IF ( PLAT .EQ. RXZERO ) THEN
3000 FO(1) = CXZERO
3001 FO(2) = CXZERO
3002 FO(3) = DCMPLX( OMEGAP, RXZERO )
3003 FO(4) = CXZERO
3004 ELSE
3005 SPAZ = SQRT( PABS - P(3) )
3006 FO(1) = CXZERO
3007 FO(2) = CXZERO
3008 FO(3) = -SPAZ / PLAT
3009 & * DCMPLX( -P(1), -P(2) )
3010 FO(4) = -RXONE / SPAZ
3011 & * DCMPLX( PLAT, RXZERO )
3012 END IF
3013 END IF
3014 ELSE IF ( NHEL .EQ. -1 ) THEN
3015 IF ( P(3) .GE. RXZERO ) THEN
3016 IF ( PLAT .EQ. RXZERO ) THEN
3017 FO(1) = DCMPLX( -OMEGAP, RXZERO )
3018 FO(2) = CXZERO
3019 FO(3) = CXZERO
3020 FO(4) = CXZERO
3021 ELSE
3022 SPAZ = SQRT( PABS + P(3) )
3023 FO(1) = DCMPLX( -SPAZ, RXZERO )
3024 FO(2) = -RXONE / SPAZ
3025 & * DCMPLX( P(1), -P(2) )
3026 FO(3) = CXZERO
3027 FO(4) = CXZERO
3028 END IF
3029 ELSE
3030 IF ( PLAT .EQ. RXZERO ) THEN
3031 FO(1) = CXZERO
3032 FO(2) = DCMPLX( -OMEGAP, RXZERO )
3033 FO(3) = CXZERO
3034 FO(4) = CXZERO
3035 ELSE
3036 SPAZ = SQRT( PABS - P(3) )
3037 FO(1) = -RXONE / SPAZ
3038 & * DCMPLX( PLAT, RXZERO )
3039 FO(2) = -SPAZ / PLAT
3040 & * DCMPLX( P(1), -P(2) )
3041 FO(3) = CXZERO
3042 FO(4) = CXZERO
3043 END IF
3044 END IF
3045 ELSE
3046 STOP 'OXXXXX: FERMION HELICITY MUST BE +1,-1'
3047 END IF
3048 ELSE
3049 STOP 'OXXXXX: FERMION TYPE MUST BE +1,-1'
3050 END IF
3051 END IF
3052C
3053C done
3054C
3055 RETURN
3056 END
3057C
3058C ----------------------------------------------------------------------
3059C
3060 SUBROUTINE ROTXXX(P,Q , PROT)
3061C
3062C this subroutine performs the spacial rotation of a four-momentum.
3063C the momentum p is assumed to be given in the frame where the spacial
3064C component of q points the positive z-axis. prot is the momentum p
3065C rotated to the frame where q is given.
3066C
3067C input:
3068C real p(0:3) : four-momentum p in q(1)=q(2)=0 frame
3069C real q(0:3) : four-momentum q in the rotated frame
3070C
3071C output:
3072C real prot(0:3) : four-momentum p in the rotated frame
3073C
3074#if defined(CERNLIB_IMPNONE)
3075 IMPLICIT NONE
3076#endif
3077 REAL*8 P(0:3),Q(0:3),PROT(0:3),QT2,QT,PSGN,QQ,P1
3078C
3079 REAL*8 RXZERO, RXONE
3080 PARAMETER( RXZERO=0.0D0, RXONE=1.0D0 )
3081C
3082 PROT(0) = P(0)
3083C
3084 QT2=Q(1)**2+Q(2)**2
3085C
3086 IF ( QT2 .EQ. RXZERO ) THEN
3087 IF ( Q(3) .EQ. RXZERO ) THEN
3088 PROT(1) = P(1)
3089 PROT(2) = P(2)
3090 PROT(3) = P(3)
3091 ELSE
3092 PSGN=DSIGN(RXONE,Q(3))
3093 PROT(1) = P(1)*PSGN
3094 PROT(2) = P(2)*PSGN
3095 PROT(3) = P(3)*PSGN
3096 ENDIF
3097 ELSE
3098 QQ=SQRT(QT2+Q(3)**2)
3099 QT=SQRT(QT2)
3100 P1=P(1)
3101 PROT(1) = Q(1)*Q(3)/QQ/QT*P1 -Q(2)/QT*P(2) +Q(1)/QQ*P(3)
3102 PROT(2) = Q(2)*Q(3)/QQ/QT*P1 +Q(1)/QT*P(2) +Q(2)/QQ*P(3)
3103 PROT(3) = -QT/QQ*P1 +Q(3)/QQ*P(3)
3104 ENDIF
3105C
3106 RETURN
3107 END
3108C ======================================================================
3109C
3110 SUBROUTINE SSSSXX(S1,S2,S3,S4,G , VERTEX)
3111C
3112C This subroutine computes an amplitude of the four-scalar coupling.
3113C
3114C INPUT:
3115C complex S1(3) : first scalar S1
3116C complex S2(3) : second scalar S2
3117C complex S3(3) : third scalar S3
3118C complex S4(3) : fourth scalar S4
3119C real G : coupling constant GHHHH
3120C
3121C OUTPUT:
3122C complex VERTEX : amplitude Gamma(S1,S2,S3,S4)
3123C
3124#if defined(CERNLIB_IMPNONE)
3125 IMPLICIT NONE
3126#endif
3127 COMPLEX*16 S1(3),S2(3),S3(3),S4(3),VERTEX
3128 REAL*8 G
3129C
3130 VERTEX = G*S1(1)*S2(1)*S3(1)*S4(1)
3131C
3132 RETURN
3133 END
3134C
3135C ======================================================================
3136C
3137 SUBROUTINE SSSXXX(S1,S2,S3,G , VERTEX)
3138C
3139C This subroutine computes an amplitude of the three-scalar coupling.
3140C
3141C INPUT:
3142C complex S1(3) : first scalar S1
3143C complex S2(3) : second scalar S2
3144C complex S3(3) : third scalar S3
3145C real G : coupling constant GHHH
3146C
3147C OUTPUT:
3148C complex VERTEX : amplitude Gamma(S1,S2,S3)
3149C
3150#if defined(CERNLIB_IMPNONE)
3151 IMPLICIT NONE
3152#endif
3153 COMPLEX*16 S1(3),S2(3),S3(3),VERTEX
3154 REAL*8 G
3155C
3156 VERTEX = G*S1(1)*S2(1)*S3(1)
3157C
3158 RETURN
3159 END
3160C
3161C
3162C ----------------------------------------------------------------------
3163C
3164 SUBROUTINE SXXXXX(P,NSS , SC)
3165C
3166C This subroutine computes a complex SCALAR wavefunction.
3167C
3168C INPUT:
3169C real P(0:3) : four-momentum of scalar boson
3170C integer NSS = -1 or 1 : +1 for final, -1 for initial
3171C
3172C OUTPUT:
3173C complex SC(3) : scalar wavefunction S
3174C
3175#if defined(CERNLIB_IMPNONE)
3176 IMPLICIT NONE
3177#endif
3178 COMPLEX*16 SC(3)
3179 REAL*8 P(0:3)
3180 INTEGER NSS
3181C
3182 SC(1) = DCMPLX( 1.0 )
3183 SC(2) = DCMPLX(P(0),P(3))*NSS
3184 SC(3) = DCMPLX(P(1),P(2))*NSS
3185C
3186 RETURN
3187 END
3188C
3189C ======================================================================
3190C
3191 SUBROUTINE VSSXXX(VC,S1,S2,G , VERTEX)
3192C
3193C this subroutine computes an amplitude from the vector-scalar-scalar
3194C coupling. the coupling is absent in the minimal sm in unitary gauge.
3195C
3196C complex vc(6) : input vector v
3197C complex s1(3) : first scalar s1
3198C complex s2(3) : second scalar s2
3199C complex g : coupling constant (s1 charge)
3200C
3201C examples of the coupling constant g for susy particles are as follows:
3202C -----------------------------------------------------------
3203C | s1 | (q,i3) of s1 || v=a | v=z | v=w |
3204C -----------------------------------------------------------
3205C | nu~_l | ( 0 , +1/2) || --- | gzn(1) | gwf(1) |
3206C | e~_l | ( -1 , -1/2) || gal(1) | gzl(1) | gwf(1) |
3207C | u~_l | (+2/3 , +1/2) || gau(1) | gzu(1) | gwf(1) |
3208C | d~_l | (-1/3 , -1/2) || gad(1) | gzd(1) | gwf(1) |
3209C -----------------------------------------------------------
3210C | e~_r-bar | ( +1 , 0 ) || -gal(2) | -gzl(2) | -gwf(2) |
3211C | u~_r-bar | (-2/3 , 0 ) || -gau(2) | -gzu(2) | -gwf(2) |
3212C | d~_r-bar | (+1/3 , 0 ) || -gad(2) | -gzd(2) | -gwf(2) |
3213C -----------------------------------------------------------
3214C where the s1 charge is defined by the flowing-out quantum number.
3215C
3216C output:
3217C complex vertex : amplitude gamma(v,s1,s2)
3218C
3219#if defined(CERNLIB_IMPNONE)
3220 IMPLICIT NONE
3221#endif
3222 COMPLEX*16 VC(6),S1(3),S2(3),VERTEX,G
3223 REAL*8 P(0:3)
3224C
3225 P(0)=DBLE( S1(2)-S2(2))
3226 P(1)=DBLE( S1(3)-S2(3))
3227 P(2)=DIMAG(S1(3)-S2(3))
3228 P(3)=DIMAG(S1(2)-S2(2))
3229C
3230 VERTEX = G*S1(1)*S2(1)
3231 & *(VC(1)*P(0)-VC(2)*P(1)-VC(3)*P(2)-VC(4)*P(3))
3232C
3233 RETURN
3234 END
3235C
3236 SUBROUTINE VVSSXX(V1,V2,S1,S2,G , VERTEX)
3237C
3238C This subroutine computes an amplitude of the vector-vector-scalar-
3239C scalar coupling.
3240C
3241C INPUT:
3242C complex V1(6) : first vector V1
3243C complex V2(6) : second vector V2
3244C complex S1(3) : first scalar S1
3245C complex S2(3) : second scalar S2
3246C real G : coupling constant GVVHH
3247C
3248C OUTPUT:
3249C complex VERTEX : amplitude Gamma(V1,V2,S1,S2)
3250C
3251#if defined(CERNLIB_IMPNONE)
3252 IMPLICIT NONE
3253#endif
3254 COMPLEX*16 V1(6),V2(6),S1(3),S2(3),VERTEX
3255 REAL*8 G
3256C
3257 VERTEX = G*S1(1)*S2(1)
3258 & *(V1(1)*V2(1)-V1(2)*V2(2)-V1(3)*V2(3)-V1(4)*V2(4))
3259C
3260 RETURN
3261 END
3262C
3263C
3264C ======================================================================
3265C
3266 SUBROUTINE VVSXXX(V1,V2,SC,G , VERTEX)
3267C
3268C this subroutine computes an amplitude of the vector-vector-scalar
3269C coupling.
3270C
3271C input:
3272C complex v1(6) : first vector v1
3273C complex v2(6) : second vector v2
3274C complex sc(3) : input scalar s
3275C real g : coupling constant gvvh
3276C
3277C output:
3278C complex vertex : amplitude gamma(v1,v2,s)
3279C
3280#if defined(CERNLIB_IMPNONE)
3281 IMPLICIT NONE
3282#endif
3283 COMPLEX*16 V1(6),V2(6),SC(3),VERTEX
3284 REAL*8 G
3285C
3286 VERTEX = G*SC(1)*(V1(1)*V2(1)-V1(2)*V2(2)-V1(3)*V2(3)-V1(4)*V2(4))
3287C
3288 RETURN
3289 END
3290C
3291C ======================================================================
3292C
3293 SUBROUTINE VVVXXX(WM,WP,W3,G , VERTEX)
3294C
3295C this subroutine computes an amplitude of the three-point coupling of
3296C the gauge bosons.
3297C
3298C input:
3299C complex wm(6) : vector flow-out w-
3300C complex wp(6) : vector flow-out w+
3301C complex w3(6) : vector j3 or a or z
3302C real g : coupling constant gw or gwwa or gwwz
3303C
3304C output:
3305C complex vertex : amplitude gamma(wm,wp,w3)
3306C
3307#if defined(CERNLIB_IMPNONE)
3308 IMPLICIT NONE
3309#endif
3310 COMPLEX*16 WM(6),WP(6),W3(6),VERTEX,
3311 & XV1,XV2,XV3,V12,V23,V31,P12,P13,P21,P23,P31,P32
3312 REAL*8 PWM(0:3),PWP(0:3),PW3(0:3),G
3313C
3314 REAL*8 RXZERO, RTENTH
3315 PARAMETER( RXZERO=0.0D0, RTENTH=0.1D0 )
3316C
3317 PWM(0)=DBLE( WM(5))
3318 PWM(1)=DBLE( WM(6))
3319 PWM(2)=DIMAG(WM(6))
3320 PWM(3)=DIMAG(WM(5))
3321 PWP(0)=DBLE( WP(5))
3322 PWP(1)=DBLE( WP(6))
3323 PWP(2)=DIMAG(WP(6))
3324 PWP(3)=DIMAG(WP(5))
3325 PW3(0)=DBLE( W3(5))
3326 PW3(1)=DBLE( W3(6))
3327 PW3(2)=DIMAG(W3(6))
3328 PW3(3)=DIMAG(W3(5))
3329C
3330 V12=WM(1)*WP(1)-WM(2)*WP(2)-WM(3)*WP(3)-WM(4)*WP(4)
3331 V23=WP(1)*W3(1)-WP(2)*W3(2)-WP(3)*W3(3)-WP(4)*W3(4)
3332 V31=W3(1)*WM(1)-W3(2)*WM(2)-W3(3)*WM(3)-W3(4)*WM(4)
3333 XV1=RXZERO
3334 XV2=RXZERO
3335 XV3=RXZERO
3336 IF ( ABS(WM(1)) .NE. RXZERO ) THEN
3337 IF (ABS(WM(1)).GE.MAX(ABS(WM(2)),ABS(WM(3)),ABS(WM(4)))
3338 $ *RTENTH)
3339 & XV1=PWM(0)/WM(1)
3340 ENDIF
3341 IF ( ABS(WP(1)) .NE. RXZERO) THEN
3342 IF (ABS(WP(1)).GE.MAX(ABS(WP(2)),ABS(WP(3)),ABS(WP(4)))
3343 $ *RTENTH)
3344 & XV2=PWP(0)/WP(1)
3345 ENDIF
3346 IF ( ABS(W3(1)) .NE. RXZERO) THEN
3347 IF ( ABS(W3(1)).GE.MAX(ABS(W3(2)),ABS(W3(3)),ABS(W3(4)))
3348 $ *RTENTH)
3349 & XV3=PW3(0)/W3(1)
3350 ENDIF
3351 P12= (PWM(0)-XV1*WM(1))*WP(1)-(PWM(1)-XV1*WM(2))*WP(2)
3352 & -(PWM(2)-XV1*WM(3))*WP(3)-(PWM(3)-XV1*WM(4))*WP(4)
3353 P13= (PWM(0)-XV1*WM(1))*W3(1)-(PWM(1)-XV1*WM(2))*W3(2)
3354 & -(PWM(2)-XV1*WM(3))*W3(3)-(PWM(3)-XV1*WM(4))*W3(4)
3355 P21= (PWP(0)-XV2*WP(1))*WM(1)-(PWP(1)-XV2*WP(2))*WM(2)
3356 & -(PWP(2)-XV2*WP(3))*WM(3)-(PWP(3)-XV2*WP(4))*WM(4)
3357 P23= (PWP(0)-XV2*WP(1))*W3(1)-(PWP(1)-XV2*WP(2))*W3(2)
3358 & -(PWP(2)-XV2*WP(3))*W3(3)-(PWP(3)-XV2*WP(4))*W3(4)
3359 P31= (PW3(0)-XV3*W3(1))*WM(1)-(PW3(1)-XV3*W3(2))*WM(2)
3360 & -(PW3(2)-XV3*W3(3))*WM(3)-(PW3(3)-XV3*W3(4))*WM(4)
3361 P32= (PW3(0)-XV3*W3(1))*WP(1)-(PW3(1)-XV3*W3(2))*WP(2)
3362 & -(PW3(2)-XV3*W3(3))*WP(3)-(PW3(3)-XV3*W3(4))*WP(4)
3363C
3364 VERTEX = -(V12*(P13-P23)+V23*(P21-P31)+V31*(P32-P12))*G
3365C
3366 RETURN
3367 END
3368C
3369C
3370C Subroutine returns the value of evaluated
3371C helicity basis boson polarisation wavefunction.
3372C Replaces the HELAS routine VXXXXX
3373C
3374C Adam Duff, 1992 September 3
3375C <duff@phenom.physics.wisc.edu>
3376C
3377 SUBROUTINE VXXXXX(P,VMASS,NHEL,NSV,VC)
3378C
3379C P IN: BOSON FOUR MOMENTUM
3380C VMASS IN: BOSON MASS
3381C NHEL IN: BOSON HELICITY
3382C NSV IN: INCOMING (-1) OR OUTGOING (+1)
3383C VC OUT: BOSON WAVEFUNCTION
3384C
3385C declare input/output variables
3386C
3387#if defined(CERNLIB_IMPNONE)
3388 IMPLICIT NONE
3389#endif
3390 COMPLEX*16 VC(6)
3391 INTEGER*4 NHEL, NSV
3392 REAL*8 P(0:3), VMASS
3393C
3394C declare local variables
3395C
3396 REAL*8 RXZERO, RXONE, RXTWO
3397 PARAMETER( RXZERO=0.0D0, RXONE=1.0D0, RXTWO=2.0D0 )
3398 REAL*8 PLAT, PABS, RS2, RPLAT, RPABS, RDEN
3399 COMPLEX*16 CXZERO
3400 LOGICAL FIRST
3401 SAVE CXZERO,FIRST
3402 DATA FIRST/.TRUE./
3403C
3404C Fix compilation with g77
3405 IF(FIRST) THEN
3406 FIRST=.FALSE.
3407 CXZERO=DCMPLX( RXZERO, RXZERO )
3408 ENDIF
3409C
3410C define internal/external momenta
3411C
3412 IF ( NSV**2 .NE. 1 ) THEN
3413 STOP 'VXXXXX: NSV IS NOT ONE OF -1, +1'
3414 END IF
3415C
3416 RS2 = SQRT( RXONE / RXTWO )
3417 VC(5) = DCMPLX( P(0), P(3) ) * NSV
3418 VC(6) = DCMPLX( P(1), P(2) ) * NSV
3419 PLAT = SQRT( P(1)**2 + P(2)**2 )
3420 PABS = SQRT( P(1)**2 + P(2)**2 + P(3)**2 )
3421C
3422C calculate polarisation four vectors
3423C
3424 IF ( NHEL**2 .EQ. 1 ) THEN
3425 IF ( (PABS .EQ. RXZERO) .OR. (PLAT .EQ. RXZERO) ) THEN
3426 VC(1) = CXZERO
3427 VC(2) = DCMPLX( -NHEL * RS2 * DSIGN( RXONE, P(3) ), RXZERO )
3428 VC(3) = DCMPLX( RXZERO, NSV * RS2 )
3429 VC(4) = CXZERO
3430 ELSE
3431 RPLAT = RXONE / PLAT
3432 RPABS = RXONE / PABS
3433 VC(1) = CXZERO
3434 VC(2) = DCMPLX( -NHEL * RS2 * RPABS * RPLAT * P(1) * P(3),
3435 & -NSV * RS2 * RPLAT * P(2) )
3436 VC(3) = DCMPLX( -NHEL * RS2 * RPABS * RPLAT * P(2) * P(3),
3437 & NSV * RS2 * RPLAT * P(1) )
3438 VC(4) = DCMPLX( NHEL * RS2 * RPABS * PLAT,
3439 & RXZERO )
3440 END IF
3441 ELSE IF ( NHEL .EQ. 0 ) THEN
3442 IF ( VMASS .GT. RXZERO ) THEN
3443 IF ( PABS .EQ. RXZERO ) THEN
3444 VC(1) = CXZERO
3445 VC(2) = CXZERO
3446 VC(3) = CXZERO
3447 VC(4) = DCMPLX( RXONE, RXZERO )
3448 ELSE
3449 RDEN = P(0) / ( VMASS * PABS )
3450 VC(1) = DCMPLX( PABS / VMASS, RXZERO )
3451 VC(2) = DCMPLX( RDEN * P(1), RXZERO )
3452 VC(3) = DCMPLX( RDEN * P(2), RXZERO )
3453 VC(4) = DCMPLX( RDEN * P(3), RXZERO )
3454 END IF
3455 ELSE
3456 STOP 'VXXXXX: NHEL = 0 IS ONLY FOR MASSIVE BOSONS'
3457 END IF
3458 ELSE IF ( NHEL .EQ. 4 ) THEN
3459 IF ( VMASS .GT. RXZERO ) THEN
3460 RDEN = RXONE / VMASS
3461 VC(1) = DCMPLX( RDEN * P(0), RXZERO )
3462 VC(2) = DCMPLX( RDEN * P(1), RXZERO )
3463 VC(3) = DCMPLX( RDEN * P(2), RXZERO )
3464 VC(4) = DCMPLX( RDEN * P(3), RXZERO )
3465 ELSEIF (VMASS .EQ. RXZERO) THEN
3466 RDEN = RXONE / P(0)
3467 VC(1) = DCMPLX( RDEN * P(0), RXZERO )
3468 VC(2) = DCMPLX( RDEN * P(1), RXZERO )
3469 VC(3) = DCMPLX( RDEN * P(2), RXZERO )
3470 VC(4) = DCMPLX( RDEN * P(3), RXZERO )
3471 ELSE
3472 STOP 'VXXXXX: NHEL = 4 IS ONLY FOR M>=0'
3473 END IF
3474 ELSE
3475 STOP 'VXXXXX: NHEL IS NOT ONE OF -1, 0, 1 OR 4'
3476 END IF
3477C
3478C done
3479C
3480 RETURN
3481 END
3482C
3483C ----------------------------------------------------------------------
3484C
3485 SUBROUTINE W3W3XX(WM,W31,WP,W32,G31,G32,WMASS,WWIDTH , VERTEX)
3486C
3487C this subroutine computes an amplitude of the four-point coupling of
3488C the w-, w+ and two w3/z/a. the amplitude includes the contributions
3489C of w exchange diagrams. the internal w propagator is given in unitary
3490C gauge. if one sets wmass=0.0, then the gggg vertex is given (see sect
3491C 2.9.1 of the manual).
3492C
3493C input:
3494C complex wm(0:3) : flow-out w- wm
3495C complex w31(0:3) : first w3/z/a w31
3496C complex wp(0:3) : flow-out w+ wp
3497C complex w32(0:3) : second w3/z/a w32
3498C real g31 : coupling of w31 with w-/w+
3499C real g32 : coupling of w32 with w-/w+
3500C (see the table below)
3501C real wmass : mass of w
3502C real wwidth : width of w
3503C
3504C the possible sets of the inputs are as follows:
3505C -------------------------------------------
3506C | wm | w31 | wp | w32 | g31 | g32 |
3507C -------------------------------------------
3508C | w- | w3 | w+ | w3 | gw | gw |
3509C | w- | w3 | w+ | z | gw | gwwz |
3510C | w- | w3 | w+ | a | gw | gwwa |
3511C | w- | z | w+ | z | gwwz | gwwz |
3512C | w- | z | w+ | a | gwwz | gwwa |
3513C | w- | a | w+ | a | gwwa | gwwa |
3514C -------------------------------------------
3515C where all the bosons are defined by the flowing-out quantum number.
3516C
3517C output:
3518C complex vertex : amplitude gamma(wm,w31,wp,w32)
3519C
3520#if defined(CERNLIB_IMPNONE)
3521 IMPLICIT NONE
3522#endif
3523 COMPLEX*16 WM(6),W31(6),WP(6),W32(6),VERTEX
3524 COMPLEX*16 DV1(0:3),DV2(0:3),DV3(0:3),DV4(0:3),DVERTX,
3525 & V12,V13,V14,V23,V24,V34
3526 REAL*8 G31,G32,WMASS,WWIDTH
3527C
3528 REAL*8 RXZERO, RXONE
3529 PARAMETER( RXZERO=0.0D0, RXONE=1.0D0 )
3530
3531 DV1(0)=DCMPLX(WM(1))
3532 DV1(1)=DCMPLX(WM(2))
3533 DV1(2)=DCMPLX(WM(3))
3534 DV1(3)=DCMPLX(WM(4))
3535 DV2(0)=DCMPLX(W31(1))
3536 DV2(1)=DCMPLX(W31(2))
3537 DV2(2)=DCMPLX(W31(3))
3538 DV2(3)=DCMPLX(W31(4))
3539 DV3(0)=DCMPLX(WP(1))
3540 DV3(1)=DCMPLX(WP(2))
3541 DV3(2)=DCMPLX(WP(3))
3542 DV3(3)=DCMPLX(WP(4))
3543 DV4(0)=DCMPLX(W32(1))
3544 DV4(1)=DCMPLX(W32(2))
3545 DV4(2)=DCMPLX(W32(3))
3546 DV4(3)=DCMPLX(W32(4))
3547C
3548 IF ( DBLE(WMASS) .NE. RXZERO ) THEN
3549C dm2inv = r_one / dmw2
3550C
3551 V12= DV1(0)*DV2(0)-DV1(1)*DV2(1)-DV1(2)*DV2(2)-DV1(3)*DV2(3)
3552 V13= DV1(0)*DV3(0)-DV1(1)*DV3(1)-DV1(2)*DV3(2)-DV1(3)*DV3(3)
3553 V14= DV1(0)*DV4(0)-DV1(1)*DV4(1)-DV1(2)*DV4(2)-DV1(3)*DV4(3)
3554 V23= DV2(0)*DV3(0)-DV2(1)*DV3(1)-DV2(2)*DV3(2)-DV2(3)*DV3(3)
3555 V24= DV2(0)*DV4(0)-DV2(1)*DV4(1)-DV2(2)*DV4(2)-DV2(3)*DV4(3)
3556 V34= DV3(0)*DV4(0)-DV3(1)*DV4(1)-DV3(2)*DV4(2)-DV3(3)*DV4(3)
3557C
3558 DVERTX = V12*V34 +V14*V23 -2.D0*V13*V24
3559C
3560 VERTEX = DCMPLX( DVERTX ) * (G31*G32)
3561C
3562 ELSE
3563 V12= DV1(0)*DV2(0)-DV1(1)*DV2(1)-DV1(2)*DV2(2)-DV1(3)*DV2(3)
3564 V13= DV1(0)*DV3(0)-DV1(1)*DV3(1)-DV1(2)*DV3(2)-DV1(3)*DV3(3)
3565 V14= DV1(0)*DV4(0)-DV1(1)*DV4(1)-DV1(2)*DV4(2)-DV1(3)*DV4(3)
3566 V23= DV2(0)*DV3(0)-DV2(1)*DV3(1)-DV2(2)*DV3(2)-DV2(3)*DV3(3)
3567 V24= DV2(0)*DV4(0)-DV2(1)*DV4(1)-DV2(2)*DV4(2)-DV2(3)*DV4(3)
3568 V34= DV3(0)*DV4(0)-DV3(1)*DV4(1)-DV3(2)*DV4(2)-DV3(3)*DV4(3)
3569C
3570
3571 DVERTX = V14*V23 -V13*V24
3572C
3573 VERTEX = DCMPLX( DVERTX ) * (G31*G32)
3574 END IF
3575C
3576 RETURN
3577 END
3578C
3579C ======================================================================
3580C
3581 SUBROUTINE WWWWXX(WM1,WP1,WM2,WP2,GWWA,GWWZ,ZMASS,ZWIDTH , VERTEX)
3582C
3583C this subroutine computes an amplitude of the four-point w-/w+
3584C coupling, including the contributions of photon and z exchanges. the
3585C photon propagator is given in feynman gauge and the z propagator is
3586C given in unitary gauge.
3587C
3588C input:
3589C complex wm1(0:3) : first flow-out w- wm1
3590C complex wp1(0:3) : first flow-out w+ wp1
3591C complex wm2(0:3) : second flow-out w- wm2
3592C complex wp2(0:3) : second flow-out w+ wp2
3593C real gwwa : coupling constant of w and a gwwa
3594C real gwwz : coupling constant of w and z gwwz
3595C real zmass : mass of z
3596C real zwidth : width of z
3597C
3598C output:
3599C complex vertex : amplitude gamma(wm1,wp1,wm2,wp2)
3600C
3601#if defined(CERNLIB_IMPNONE)
3602 IMPLICIT NONE
3603#endif
3604 COMPLEX*16 WM1(6),WP1(6),WM2(6),WP2(6),VERTEX
3605 COMPLEX*16 DV1(0:3),DV2(0:3),DV3(0:3),DV4(0:3),
3606 & J12(0:3),J34(0:3),J14(0:3),J32(0:3),DVERTX,
3607 & SV1,SV2,SV3,SV4,TV1,TV2,TV3,TV4,DZS,DZT,
3608 & V12,V13,V14,V23,V24,V34,JS12,JS34,JS14,JS32,JS,JT
3609 REAL*8 PWM1(0:3),PWP1(0:3),PWM2(0:3),PWP2(0:3),
3610 & GWWA,GWWZ,ZMASS,ZWIDTH
3611 REAL*8 Q(0:3),K(0:3),DP1(0:3),DP2(0:3),DP3(0:3),DP4(0:3),
3612 & DGWWA2,DGWWZ2,DGW2,DMZ,DWIDTH,S,T,DAS,DAT
3613C
3614 REAL*8 RXZERO, RXONE, RXTWO
3615 PARAMETER( RXZERO=0.0D0, RXONE=1.0D0, RXTWO=2.0D0 )
3616C
3617 PWM1(0)=DBLE( WM1(5))
3618 PWM1(1)=DBLE( WM1(6))
3619 PWM1(2)=DIMAG(WM1(6))
3620 PWM1(3)=DIMAG(WM1(5))
3621 PWP1(0)=DBLE( WP1(5))
3622 PWP1(1)=DBLE( WP1(6))
3623 PWP1(2)=DIMAG(WP1(6))
3624 PWP1(3)=DIMAG(WP1(5))
3625 PWM2(0)=DBLE( WM2(5))
3626 PWM2(1)=DBLE( WM2(6))
3627 PWM2(2)=DIMAG(WM2(6))
3628 PWM2(3)=DIMAG(WM2(5))
3629 PWP2(0)=DBLE( WP2(5))
3630 PWP2(1)=DBLE( WP2(6))
3631 PWP2(2)=DIMAG(WP2(6))
3632 PWP2(3)=DIMAG(WP2(5))
3633C
3634 DV1(0)=DCMPLX(WM1(1))
3635 DV1(1)=DCMPLX(WM1(2))
3636 DV1(2)=DCMPLX(WM1(3))
3637 DV1(3)=DCMPLX(WM1(4))
3638 DP1(0)=DBLE(PWM1(0))
3639 DP1(1)=DBLE(PWM1(1))
3640 DP1(2)=DBLE(PWM1(2))
3641 DP1(3)=DBLE(PWM1(3))
3642 DV2(0)=DCMPLX(WP1(1))
3643 DV2(1)=DCMPLX(WP1(2))
3644 DV2(2)=DCMPLX(WP1(3))
3645 DV2(3)=DCMPLX(WP1(4))
3646 DP2(0)=DBLE(PWP1(0))
3647 DP2(1)=DBLE(PWP1(1))
3648 DP2(2)=DBLE(PWP1(2))
3649 DP2(3)=DBLE(PWP1(3))
3650 DV3(0)=DCMPLX(WM2(1))
3651 DV3(1)=DCMPLX(WM2(2))
3652 DV3(2)=DCMPLX(WM2(3))
3653 DV3(3)=DCMPLX(WM2(4))
3654 DP3(0)=DBLE(PWM2(0))
3655 DP3(1)=DBLE(PWM2(1))
3656 DP3(2)=DBLE(PWM2(2))
3657 DP3(3)=DBLE(PWM2(3))
3658 DV4(0)=DCMPLX(WP2(1))
3659 DV4(1)=DCMPLX(WP2(2))
3660 DV4(2)=DCMPLX(WP2(3))
3661 DV4(3)=DCMPLX(WP2(4))
3662 DP4(0)=DBLE(PWP2(0))
3663 DP4(1)=DBLE(PWP2(1))
3664 DP4(2)=DBLE(PWP2(2))
3665 DP4(3)=DBLE(PWP2(3))
3666 DGWWA2=DBLE(GWWA)**2
3667 DGWWZ2=DBLE(GWWZ)**2
3668 DGW2 =DGWWA2+DGWWZ2
3669 DMZ =DBLE(ZMASS)
3670 DWIDTH=DBLE(ZWIDTH)
3671C
3672 V12= DV1(0)*DV2(0)-DV1(1)*DV2(1)-DV1(2)*DV2(2)-DV1(3)*DV2(3)
3673 V13= DV1(0)*DV3(0)-DV1(1)*DV3(1)-DV1(2)*DV3(2)-DV1(3)*DV3(3)
3674 V14= DV1(0)*DV4(0)-DV1(1)*DV4(1)-DV1(2)*DV4(2)-DV1(3)*DV4(3)
3675 V23= DV2(0)*DV3(0)-DV2(1)*DV3(1)-DV2(2)*DV3(2)-DV2(3)*DV3(3)
3676 V24= DV2(0)*DV4(0)-DV2(1)*DV4(1)-DV2(2)*DV4(2)-DV2(3)*DV4(3)
3677 V34= DV3(0)*DV4(0)-DV3(1)*DV4(1)-DV3(2)*DV4(2)-DV3(3)*DV4(3)
3678C
3679 Q(0)=DP1(0)+DP2(0)
3680 Q(1)=DP1(1)+DP2(1)
3681 Q(2)=DP1(2)+DP2(2)
3682 Q(3)=DP1(3)+DP2(3)
3683 K(0)=DP1(0)+DP4(0)
3684 K(1)=DP1(1)+DP4(1)
3685 K(2)=DP1(2)+DP4(2)
3686 K(3)=DP1(3)+DP4(3)
3687C
3688 S=Q(0)**2-Q(1)**2-Q(2)**2-Q(3)**2
3689 T=K(0)**2-K(1)**2-K(2)**2-K(3)**2
3690C
3691 DAS=-RXONE/S
3692 DAT=-RXONE/T
3693 DZS=-RXONE/DCMPLX( S-DMZ**2 , DMAX1(DSIGN(DMZ*DWIDTH,S),RXZERO) )
3694 DZT=-RXONE/DCMPLX( T-DMZ**2 , DMAX1(DSIGN(DMZ*DWIDTH,T),RXZERO) )
3695C
3696 SV1= (DP2(0)+Q(0))*DV1(0) -(DP2(1)+Q(1))*DV1(1)
3697 & -(DP2(2)+Q(2))*DV1(2) -(DP2(3)+Q(3))*DV1(3)
3698 SV2=-(DP1(0)+Q(0))*DV2(0) +(DP1(1)+Q(1))*DV2(1)
3699 & +(DP1(2)+Q(2))*DV2(2) +(DP1(3)+Q(3))*DV2(3)
3700 SV3= (DP4(0)-Q(0))*DV3(0) -(DP4(1)-Q(1))*DV3(1)
3701 & -(DP4(2)-Q(2))*DV3(2) -(DP4(3)-Q(3))*DV3(3)
3702 SV4=-(DP3(0)-Q(0))*DV4(0) +(DP3(1)-Q(1))*DV4(1)
3703 & +(DP3(2)-Q(2))*DV4(2) +(DP3(3)-Q(3))*DV4(3)
3704C
3705 TV1= (DP4(0)+K(0))*DV1(0) -(DP4(1)+K(1))*DV1(1)
3706 & -(DP4(2)+K(2))*DV1(2) -(DP4(3)+K(3))*DV1(3)
3707 TV2=-(DP3(0)-K(0))*DV2(0) +(DP3(1)-K(1))*DV2(1)
3708 & +(DP3(2)-K(2))*DV2(2) +(DP3(3)-K(3))*DV2(3)
3709 TV3= (DP2(0)-K(0))*DV3(0) -(DP2(1)-K(1))*DV3(1)
3710 & -(DP2(2)-K(2))*DV3(2) -(DP2(3)-K(3))*DV3(3)
3711 TV4=-(DP1(0)+K(0))*DV4(0) +(DP1(1)+K(1))*DV4(1)
3712 & +(DP1(2)+K(2))*DV4(2) +(DP1(3)+K(3))*DV4(3)
3713C
3714 J12(0)=(DP1(0)-DP2(0))*V12 +SV1*DV2(0) +SV2*DV1(0)
3715 J12(1)=(DP1(1)-DP2(1))*V12 +SV1*DV2(1) +SV2*DV1(1)
3716 J12(2)=(DP1(2)-DP2(2))*V12 +SV1*DV2(2) +SV2*DV1(2)
3717 J12(3)=(DP1(3)-DP2(3))*V12 +SV1*DV2(3) +SV2*DV1(3)
3718 J34(0)=(DP3(0)-DP4(0))*V34 +SV3*DV4(0) +SV4*DV3(0)
3719 J34(1)=(DP3(1)-DP4(1))*V34 +SV3*DV4(1) +SV4*DV3(1)
3720 J34(2)=(DP3(2)-DP4(2))*V34 +SV3*DV4(2) +SV4*DV3(2)
3721 J34(3)=(DP3(3)-DP4(3))*V34 +SV3*DV4(3) +SV4*DV3(3)
3722C
3723 J14(0)=(DP1(0)-DP4(0))*V14 +TV1*DV4(0) +TV4*DV1(0)
3724 J14(1)=(DP1(1)-DP4(1))*V14 +TV1*DV4(1) +TV4*DV1(1)
3725 J14(2)=(DP1(2)-DP4(2))*V14 +TV1*DV4(2) +TV4*DV1(2)
3726 J14(3)=(DP1(3)-DP4(3))*V14 +TV1*DV4(3) +TV4*DV1(3)
3727 J32(0)=(DP3(0)-DP2(0))*V23 +TV3*DV2(0) +TV2*DV3(0)
3728 J32(1)=(DP3(1)-DP2(1))*V23 +TV3*DV2(1) +TV2*DV3(1)
3729 J32(2)=(DP3(2)-DP2(2))*V23 +TV3*DV2(2) +TV2*DV3(2)
3730 J32(3)=(DP3(3)-DP2(3))*V23 +TV3*DV2(3) +TV2*DV3(3)
3731C
3732 JS12=Q(0)*J12(0)-Q(1)*J12(1)-Q(2)*J12(2)-Q(3)*J12(3)
3733 JS34=Q(0)*J34(0)-Q(1)*J34(1)-Q(2)*J34(2)-Q(3)*J34(3)
3734 JS14=K(0)*J14(0)-K(1)*J14(1)-K(2)*J14(2)-K(3)*J14(3)
3735 JS32=K(0)*J32(0)-K(1)*J32(1)-K(2)*J32(2)-K(3)*J32(3)
3736C
3737 JS=J12(0)*J34(0)-J12(1)*J34(1)-J12(2)*J34(2)-J12(3)*J34(3)
3738 JT=J14(0)*J32(0)-J14(1)*J32(1)-J14(2)*J32(2)-J14(3)*J32(3)
3739C
3740 DVERTX = (V12*V34 +V14*V23 -RXTWO*V13*V24)*DGW2
3741
3742C & +(dzs*dgwwz2+das*dgwwa2)*js -dzs*dgwwz2*js12*js34/dmz**2
3743C & +(dzt*dgwwz2+dat*dgwwa2)*jt -dzt*dgwwz2*js14*js32/dmz**2
3744C
3745 VERTEX = -DCMPLX( DVERTX )
3746C
3747 RETURN
3748 END