~maddevelopers/mg5amcnlo/3.0.2-alpha0

« back to all changes in this revision

Viewing changes to HELAS/fvigld.f

Added Template and HELAS into bzr

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
c
 
2
c ----------------------------------------------------------------------
 
3
c
 
4
      subroutine fvigld(fi,vc,gc,fmass,fwidth,idecay , fvi)
 
5
c
 
6
c This subroutine computes an off-shell fermion wavefunction from a
 
7
c flowing-in external fermion and a vector boson, for the NLSP-boson-
 
8
c Goldstino vertex. The h.c. of the NLSP decay is handled via the
 
9
c input parameter idecay (picks out correct Goldstino momentum).
 
10
c
 
11
c input:
 
12
c       complex fi(6)          : flow-in  fermion                   |fi>
 
13
c       complex vc(6)          : input    vector                      v
 
14
c       complex gc(2)          : coupling constants                  gvf
 
15
c       real    fmass          : mass  of output fermion f'
 
16
c       real    fwidth         : width of output fermion f'
 
17
c       integer idecay         :  1 for NLSP decay to Goldstino
 
18
c                              : -1 for Goldstino to NLSP (h.c. of above)
 
19
c
 
20
c output:
 
21
c       complex fvi(6)         : off-shell fermion             |f',v,fi>
 
22
c
 
23
      implicit none
 
24
      double complex  fi(6), vc(6), gc(2), fvi(6), sl1, sl2, sr1, sr2, d
 
25
      double complex  p14p, p14m, p23p, p23m, A14p, A14m, A23p, A23m
 
26
      double complex  AdotpG
 
27
      double precision  fmass, fwidth
 
28
      double precision  pf(0:3), pv(4), pf2, pdotpG
 
29
      integer idecay
 
30
 
 
31
      double precision rOne
 
32
      parameter( rOne = 1.0d0 )
 
33
      double complex ci, cZero
 
34
      parameter( ci = ( 0.0d0, 1.0d0 ), cZero = ( 0.0d0, 0.0d0 ) )
 
35
c
 
36
      fvi(5) = fi(5) - vc(5)
 
37
      fvi(6) = fi(6) - vc(6)
 
38
 
 
39
      pv(1) = dble( vc(5))
 
40
      pv(2) = dble( vc(6))
 
41
      pv(3) = dimag(vc(6))
 
42
      pv(4) = dimag(vc(5))
 
43
 
 
44
      pf(0) = dble( fvi(5))
 
45
      pf(1) = dble( fvi(6))
 
46
      pf(2) = dimag(fvi(6))
 
47
      pf(3) = dimag(fvi(5))
 
48
      pf2 = pf(0)**2 - pf(1)**2 - pf(2)**2 - pf(3)**2
 
49
 
 
50
      if ( idecay.eq.1 ) then
 
51
         pdotpG = pv(1)*pf(0) - pv(2)*pf(1) - pv(3)*pf(2) - pv(4)*pf(3)
 
52
         AdotpG = vc(1)*pf(0) - vc(2)*pf(1) - vc(3)*pf(2) - vc(4)*pf(3)
 
53
      else if ( idecay.eq.-1 ) then
 
54
         pdotpG =  pv(1)*dble( fi(5)) - pv(2)*dble( fi(6))
 
55
     &           - pv(3)*dimag(fi(6)) - pv(4)*dimag(fi(5))
 
56
         AdotpG =  vc(1)*dble( fi(5)) - vc(2)*dble( fi(6))
 
57
     &           - vc(3)*dimag(fi(6)) - vc(4)*dimag(fi(5))
 
58
      else
 
59
         write(6,*) 'error in idecay of FVIGLD'
 
60
         stop
 
61
      end if
 
62
 
 
63
      p14p = dble(vc(5)) + dimag(vc(5))
 
64
      p14m = dble(vc(5)) - dimag(vc(5))
 
65
      p23p = vc(6)
 
66
      p23m = dconjg(vc(6))
 
67
      A14p = vc(1) + vc(4)
 
68
      A14m = vc(1) - vc(4)
 
69
      A23p = vc(2) + vc(3)*ci
 
70
      A23m = vc(2) - vc(3)*ci
 
71
 
 
72
      d = -rOne/dcmplx( pf2-fmass**2, fmass*fwidth )
 
73
      d = d*idecay
 
74
 
 
75
      sl1 =  (p14p*AdotpG - A14p*pdotpG)*fi(1)
 
76
     &      +(p23m*AdotpG - A23m*pdotpG)*fi(2)
 
77
      sl2 =  (p23p*AdotpG - A23p*pdotpG)*fi(1)
 
78
     &      +(p14m*AdotpG - A14m*pdotpG)*fi(2)
 
79
 
 
80
      if ( gc(2).ne.cZero ) then
 
81
         sr1 =  (p14m*AdotpG - A14m*pdotpG)*fi(3)
 
82
     &         -(p23m*AdotpG - A23m*pdotpG)*fi(4)
 
83
         sr2 = -(p23p*AdotpG - A23p*pdotpG)*fi(3)
 
84
     &         +(p14p*AdotpG - A14p*pdotpG)*fi(4)
 
85
 
 
86
         fvi(1) = ( gc(1)*((pf(0)-pf(3))*sl1 - dconjg(fvi(6))*sl2 )
 
87
     &             +gc(2)*fmass*sr1 )*d
 
88
         fvi(2) = ( gc(1)*(      -fvi(6)*sl1 +  (pf(0)+pf(3))*sl2 )
 
89
     &             +gc(2)*fmass*sr2 )*d
 
90
         fvi(3) = ( gc(2)*((pf(0)+pf(3))*sr1 + dconjg(fvi(6))*sr2 )
 
91
     &             +gc(1)*fmass*sl1 )*d
 
92
         fvi(4) = ( gc(2)*(       fvi(6)*sr1 +  (pf(0)-pf(3))*sr2 )
 
93
     &             +gc(1)*fmass*sl2 )*d
 
94
 
 
95
      else
 
96
         d = d*gc(1)
 
97
         fvi(1) = d*((pf(0)-pf(3))*sl1 - dconjg(fvi(6))*sl2)
 
98
         fvi(2) = d*(      -fvi(6)*sl1 +  (pf(0)+pf(3))*sl2)
 
99
         fvi(3) = d*fmass*sl1
 
100
         fvi(4) = d*fmass*sl2
 
101
      end if
 
102
c
 
103
      return          
 
104
      end