15 integer,
intent(in) :: id(9)
16 real(8),
intent(in) :: helicity(9)
17 real(8),
intent(in) :: momext(1:4,1:9)
18 real(8),
intent(out) :: me2
19 real(8) :: mass(3:5,1:2)
21 complex(8) amplitude, a_vv(1:4), amptest
24 real(8) :: pin(1:4,1:9)
30 call swap(idin(1),idin(2))
31 call swap(helin(1),helin(2))
32 call swap(pin(:,1),pin(:,2))
35 call swap(idin(6),idin(7))
36 call swap(helin(6),helin(7))
37 call swap(pin(:,6),pin(:,7))
75 amplitude = a_vv(1)+a_vv(2)+a_vv(3)+a_vv(4)
97 me2=dble(amplitude*dconjg(amplitude))
105 real(8),
intent(in) :: momext(1:4,1:9)
106 real(8),
intent(in) :: mass(3:5,1:2)
107 real(8),
intent(in) :: helicity(9)
108 integer,
intent(in) :: id(9)
109 logical,
intent(in) :: usea(2)
112 real(8) qq,q3_q3,q4_q4,q5_q5
114 complex(8) vcurrent1(4), acurrent1(4), current1(4), currentvp1(4)
115 complex(8) vcurrent2(4), acurrent2(4), current2(4), currentvp2(4)
116 complex(8) vpffcoupl(2,2)
117 complex(8) pol1(3,4), pol2(3,4)
118 complex(8) g_mu_nu(4,4), pp(4,4), epp(4,4)
119 complex(8) prop1, prop2, prop3
120 complex(8) prop_vp1, prop_vp2
121 complex(8) gffz, gffa, gffw
122 complex(8) gvvp, gvvs1, gvvs2
123 complex(8) ghz1_dyn,ghz2_dyn,ghz3_dyn,ghz4_dyn
124 complex(8) gvvpp, gvvps1, gvvps2
125 complex(8) ghzzp1_dyn,ghzzp2_dyn,ghzzp3_dyn,ghzzp4_dyn
126 complex(8) gvpvp, gvpvs1, gvpvs2
127 complex(8) ghzpz1_dyn,ghzpz2_dyn,ghzpz3_dyn,ghzpz4_dyn
128 complex(8) gvpvpp, gvpvps1, gvpvps2
129 complex(8) ghzpzp1_dyn,ghzpzp2_dyn,ghzpzp3_dyn,ghzpzp4_dyn
135 ((id(1)+id(2)).ne.0 .and. id(1).ne.
convertlhe(
pho_) .and. usea(1)) .or. &
136 ((id(6)+id(7)).ne.0 .and. id(6).ne.
convertlhe(
pho_) .and. usea(2)) &
176 qq = -
scr(momext(:,3),momext(:,4))
180 q3_q3 =
scr(momext(:,3),momext(:,3))
185 q4_q4 =
scr(momext(:,4),momext(:,4))
187 q5_q5 =
scr(momext(:,5),momext(:,5))
188 prop3 =
propagator(dsqrt(q5_q5),mass(5,1),mass(5,2))
191 if(.not.usea(1))
then
195 if(.not.usea(2))
then
202 if(.not.usea(1))
then
203 prop1 =
propagator(dsqrt(q3_q3),mass(3,1),mass(3,2))
205 call ffv(id(2), momext(:,2), helicity(2), id(1), momext(:,1), helicity(1), vcurrent1)
206 call ffa(id(2), momext(:,2), helicity(2), id(1), momext(:,1), helicity(1), acurrent1)
208 call ffv(id(1), momext(:,1), helicity(1), id(2), momext(:,2), helicity(2), vcurrent1)
209 call ffa(id(1), momext(:,1), helicity(1), id(2), momext(:,2), helicity(2), acurrent1)
214 if((id(1)*helicity(1)).le.0d0)
then
216 vcurrent1*(vpffcoupl(1,1)+vpffcoupl(1,2))*0.5 - &
217 acurrent1*(vpffcoupl(1,1)-vpffcoupl(1,2))*0.5 &
221 vcurrent1*vpffcoupl(1,2) &
227 if((id(1)+id(2)).ne.0)
then
235 currentvp1 = currentvp1*gffw*
ckmbare(id(1),id(2))
237 if((id(1)*helicity(1)).le.0d0)
then
238 current1=(vcurrent1-acurrent1)/2d0*gffw*
ckmbare(id(1),id(2))
251 currentvp1 = currentvp1*gffz
254 if((abs(id(1)).eq.11).or.(abs(id(1)).eq.13).or.(abs(id(1)).eq.15))
then
255 if((id(1)*helicity(1)).gt.0d0)
then
260 current1=current1*gffz
262 else if((abs(id(1)).eq.2).or.(abs(id(1)).eq.4))
then
263 if((id(1)*helicity(1)).gt.0d0)
then
268 current1=current1*gffz
270 else if((abs(id(1)).eq.1).or.(abs(id(1)).eq.3).or.(abs(id(1)).eq.5))
then
271 if((id(1)*helicity(1)).gt.0d0)
then
276 current1=current1*gffz
280 print *,
"invalid incoming state"
286 if((id(1)*helicity(1)).gt.0d0)
then
294 call ffv(id(2), momext(:,2), helicity(2), id(1), momext(:,1), helicity(1), vcurrent1)
296 call ffv(id(1), momext(:,1), helicity(1), id(2), momext(:,2), helicity(2), vcurrent1)
304 else if((abs(id(1)).eq.11).or.(abs(id(1)).eq.13).or.(abs(id(1)).eq.15))
then
305 if((id(1)*helicity(1)).gt.0d0)
then
306 current1 =
qlr*vcurrent1
308 current1 =
qll*vcurrent1
310 current1=current1*gffa
312 else if((abs(id(1)).eq.2).or.(abs(id(1)).eq.4))
then
313 if((id(1)*helicity(1)).gt.0d0)
then
314 current1 =
qur*vcurrent1
316 current1 =
qul*vcurrent1
318 current1=current1*gffa
320 else if((abs(id(1)).eq.1).or.(abs(id(1)).eq.3).or.(abs(id(1)).eq.5))
then
321 if((id(1)*helicity(1)).gt.0d0)
then
322 current1 =
qdr*vcurrent1
324 current1 =
qdl*vcurrent1
326 current1=current1*gffa
329 print *,
"invalid incoming state"
333 if(.not.usea(2))
then
334 prop2 =
propagator(dsqrt(q4_q4),mass(4,1),mass(4,2))
337 call ffv(id(6), momext(:,6), helicity(6), id(7), momext(:,7), helicity(7), vcurrent2)
338 call ffa(id(6), momext(:,6), helicity(6), id(7), momext(:,7), helicity(7), acurrent2)
340 call ffv(id(7), momext(:,7), helicity(7), id(6), momext(:,6), helicity(6), vcurrent2)
341 call ffa(id(7), momext(:,7), helicity(7), id(6), momext(:,6), helicity(6), acurrent2)
346 if((id(6)*helicity(6)).le.0d0)
then
348 vcurrent2*(vpffcoupl(2,1)+vpffcoupl(2,2))*0.5 - &
349 acurrent2*(vpffcoupl(2,1)-vpffcoupl(2,2))*0.5 &
353 vcurrent2*vpffcoupl(2,2) &
359 if((id(6)+id(7)).ne.0)
then
366 currentvp2 = currentvp2*gffw*
ckmbare(id(6),id(7))
368 if((id(6)*helicity(6)).le.0d0)
then
369 current2=(vcurrent2-acurrent2)/2d0*gffw*
ckm(id(6),id(7))
381 currentvp2 = currentvp2*gffz
384 if((abs(id(6)).eq.11).or.(abs(id(6)).eq.13))
then
385 if((id(6)*helicity(6)).gt.0d0)
then
392 else if((abs(id(6)).eq.15))
then
393 if((id(6)*helicity(6)).gt.0d0)
then
400 else if((abs(id(6)).eq.2).or.(abs(id(6)).eq.4))
then
401 if((id(6)*helicity(6)).gt.0d0)
then
408 else if((abs(id(6)).eq.1).or.(abs(id(6)).eq.3).or.(abs(id(6)).eq.5))
then
409 if((id(6)*helicity(6)).gt.0d0)
then
416 else if((abs(id(6)).eq.12).or.(abs(id(6)).eq.14).or.(abs(id(6)).eq.16))
then
422 print *,
"invalid final state", id(6:7), helicity(6:7)
429 if((id(6)*helicity(6)).gt.0d0)
then
434 vcurrent2 = dconjg(vcurrent2)
438 call ffv(id(6), momext(:,6), helicity(6), id(7), momext(:,7), helicity(7), vcurrent2)
440 call ffv(id(7), momext(:,7), helicity(7), id(6), momext(:,6), helicity(6), vcurrent2)
448 else if((abs(id(6)).eq.11).or.(abs(id(6)).eq.13))
then
449 if((id(6)*helicity(6)).gt.0d0)
then
450 current2=
qlr*vcurrent2
452 current2=
qll*vcurrent2
456 else if((abs(id(6)).eq.15))
then
457 if((id(6)*helicity(6)).gt.0d0)
then
458 current2=
qlr*vcurrent2
460 current2=
qll*vcurrent2
464 else if((abs(id(6)).eq.2).or.(abs(id(6)).eq.4))
then
465 if((id(6)*helicity(6)).gt.0d0)
then
466 current2=
qur*vcurrent2
468 current2=
qul*vcurrent2
472 else if((abs(id(6)).eq.1).or.(abs(id(6)).eq.3).or.(abs(id(6)).eq.5))
then
473 if((id(6)*helicity(6)).gt.0d0)
then
474 current2=
qdr*vcurrent2
476 current2=
qdl*vcurrent2
480 else if((abs(id(6)).eq.12).or.(abs(id(6)).eq.14).or.(abs(id(6)).eq.16))
then
481 current2=
qnl*vcurrent2
485 print *,
"invalid final state", id(6:7), helicity(6:7)
491 current1 = -current1 +
scrc(momext(:,3),current1)/q3_q3
492 currentvp1 = -currentvp1 +
scrc(momext(:,3),currentvp1)/q3_q3
495 current2 = -current2 +
scrc(momext(:,4),current2)/q4_q4
496 currentvp2 = -currentvp2 +
scrc(momext(:,4),currentvp2)/q4_q4
508 current1 = current1*prop1
509 current2 = current2*prop2
510 currentvp1 = currentvp1*prop_vp1
511 currentvp2 = currentvp2*prop_vp2
515 call swap(q3_q3,q4_q4)
516 call swap(current1,current2)
517 call swap(currentvp1,currentvp2)
520 if(.not.usea(1) .and. .not.usea(2))
then
542 else if(usea(1) .and. usea(2))
then
547 else if(usea(1))
then
573 gvvs1 = ghz1_dyn*(mass(3,1)**2) + qq * ( 2d0*ghz2_dyn + ghz3_dyn*qq/
lambda**2 )
574 gvvs2 = -( 2d0*ghz2_dyn + ghz3_dyn*qq/
lambda**2 )
578 if(.not.usea(1) .and. .not.usea(2))
then
579 gvvps1 = ghzzp1_dyn*(mass(3,1)**2) + qq * ( 2d0*ghzzp2_dyn + ghzzp3_dyn*qq/
lambda**2 )
580 gvvps2 = -( 2d0*ghzzp2_dyn + ghzzp3_dyn*qq/
lambda**2 )
581 gvvpp = -2d0*ghzzp4_dyn
583 gvpvs1 = ghzpz1_dyn*(mass(3,1)**2) + qq * ( 2d0*ghzpz2_dyn + ghzpz3_dyn*qq/
lambda**2 )
584 gvpvs2 = -( 2d0*ghzpz2_dyn + ghzpz3_dyn*qq/
lambda**2 )
585 gvpvp = -2d0*ghzpz4_dyn
587 gvpvps1 = ghzpzp1_dyn*(mass(3,1)**2) + qq * ( 2d0*ghzpzp2_dyn + ghzpzp3_dyn*qq/
lambda**2 )
588 gvpvps2 = -( 2d0*ghzpzp2_dyn + ghzpzp3_dyn*qq/
lambda**2 )
589 gvpvpp = -2d0*ghzpzp4_dyn
590 else if (usea(1))
then
591 gvvps1 = ghzzp1_dyn*(mass(3,1)**2) + qq * ( 2d0*ghzzp2_dyn + ghzzp3_dyn*qq/
lambda**2 )
592 gvvps2 = -( 2d0*ghzzp2_dyn + ghzzp3_dyn*qq/
lambda**2 )
593 gvvpp = -2d0*ghzzp4_dyn
595 gvpvs1 = ghzpz1_dyn*(mass(3,1)**2) + qq * ( 2d0*ghzpz2_dyn + ghzpz3_dyn*qq/
lambda**2 )
596 gvpvs2 = -( 2d0*ghzpz2_dyn + ghzpz3_dyn*qq/
lambda**2 )
597 gvpvp = -2d0*ghzpz4_dyn
603 call vvs2(momext(:,5),momext(:,5),pp)
605 call vvp(momext(:,4),-momext(:,3),epp)
607 call vvp(-momext(:,3),momext(:,4),epp)
615 current1(mu3)*current2(mu4)*( &
616 gvvs1*g_mu_nu(mu3,mu4) + &
617 gvvs2*pp(mu3,mu4) + &
621 current1(mu3)*currentvp2(mu4)*( &
622 gvvps1*g_mu_nu(mu3,mu4) + &
623 gvvps2*pp(mu3,mu4) + &
624 gvvpp *epp(mu3,mu4) &
627 currentvp1(mu3)*current2(mu4)*( &
628 gvpvs1*g_mu_nu(mu3,mu4) + &
629 gvpvs2*pp(mu3,mu4) + &
630 gvpvp *epp(mu3,mu4) &
633 currentvp1(mu3)*currentvp2(mu4)*( &
634 gvpvps1*g_mu_nu(mu3,mu4) + &
635 gvpvps2*pp(mu3,mu4) + &
636 gvpvpp *epp(mu3,mu4) &
642 if(
h_dk.eqv..false.)
then
646 *(
kappa*
ffs(id(8), momext(:,8), helicity(8), id(9), momext(:,9), helicity(9)) &
647 +
kappa_tilde*
ffp(id(8), momext(:,8), helicity(8), id(9), momext(:,9), helicity(9)))&
661 integer,
intent(in) :: pdgid
662 integer,
intent(in) :: hel
663 logical,
intent(in) :: usewp
680 subroutine angles(sincos, vector)
683 real(8) Twopi, Fourpi, epsilon
685 parameter( twopi = 2d0 * pi )
686 parameter( fourpi = 4d0 * pi )
687 parameter( epsilon = 1d-13 )
688 real(8) sincos(4), vector(4), abs3p, phi
695 abs3p = dsqrt(vector(2)**2+vector(3)**2+vector(4)**2)
698 if(abs3p.lt.epsilon)
then
702 sincos(1)=vector(4)/abs3p
703 sincos(2)=dsqrt((1d0+sincos(1))*(1d0-sincos(1)))
707 if(dabs(vector(3)).lt.epsilon)
then
710 if(dabs(vector(2)).lt.epsilon)
then
711 phi=(twopi/2d0)/2d0 * dsign(1d0,vector(3))
713 phi=datan(vector(3)/vector(2))
717 if(vector(2).lt.0d0)
then
736 real(8) Twopi, Fourpi, epsilon
738 parameter( twopi = 2d0 * pi )
739 parameter( fourpi = 4d0 * pi )
740 parameter( epsilon = 1d-13 )
742 complex(8) p1(4), p2(4)
774 real(8) function ANTISYMMETRIC(i,j,k,l)
781 antisymmetric=dble((i-j)*(i-k)*(i-l)*(j-k)*(j-l)*(k-l))/12d0
795 real(8) Twopi, Fourpi, epsilon
797 parameter( twopi = 2d0 * pi )
798 parameter( fourpi = 4d0 * pi )
799 parameter( epsilon = 1d-13 )
800 complex(8) epep(4,4),emem(4,4),epe0(4,4),eme0(4,4),e0e0(4,4)
801 complex(8) epem(4,4),e0ep(4,4),e0em(4,4),emep(4,4)
802 complex(8) POL(3,4), T_mu_nu(5,4,4)
819 t_mu_nu(3,:,:)=(epe0+e0ep)/dsqrt(2d0)
821 t_mu_nu(4,:,:)=(eme0+e0em)/dsqrt(2d0)
823 t_mu_nu(5,:,:)=(epem+emep)/dsqrt(6d0) + e0e0/dsqrt(1.5d0)
838 complex(8) p1(4), p2(4)
844 pp(mu,nu)=p1(mu)*p2(nu)
860 real(8) Twopi, Fourpi, epsilon
862 parameter( twopi = 2d0 * pi )
863 parameter( fourpi = 4d0 * pi )
864 parameter( epsilon = 1d-13 )
865 complex(8) epep(4,4),emem(4,4),epe0(4,4),eme0(4,4),e0e0(4,4)
866 complex(8) epem(4,4),e0ep(4,4),e0em(4,4),emep(4,4)
867 complex(8) POL(3,4), T_mu_nu(5,4,4)
884 t_mu_nu(3,:,:)=(epe0+e0ep)/dsqrt(2d0)
886 t_mu_nu(4,:,:)=(eme0+e0em)/dsqrt(2d0)
888 t_mu_nu(5,:,:)=(epem+emep)/dsqrt(6d0) + e0e0/dsqrt(1.5d0)
902 complex(8) p1(4), p2(4)
908 pp(mu,nu)=p1(mu)*p2(nu)
909 if( ( (mu.ne.1).and.(nu.eq.1) ).or. &
910 ( (mu.eq.1).and.(nu.ne.1) ) )
then
944 complex(8) function ffp(pdg_code1, p1, h1, pdg_code2, p2, h2)
947 real(8),
parameter :: epsilon = 1d-13
949 real(8) p1(4), p2(4), h1, h2
950 integer pdg_code1, pdg_code2
953 if( ( dble(pdg_code1) *h1* dble(pdg_code2) *h2 ).gt.0d0)
then
956 else if( ( dabs( p1(1)+p1(4) ).lt.epsilon ).and. ( dabs( p2(1)+p2(4) ).lt.epsilon ) )
then
958 else if( dabs( p1(1)+p1(4) ).lt.epsilon )
then
959 ffp=-dsqrt(2d0*p1(1)*(p2(1)+p2(4)))
960 else if( dabs( p2(1)+p2(4) ).lt.epsilon )
then
961 ffp= dsqrt(2d0*p2(1)*(p1(1)+p1(4)))
963 sqrt_pp1dpp2 = dsqrt((p1(1)+p1(4))/(p2(1)+p2(4)))
964 ffp=(p2(2)-(0d0,1d0)*p2(3))*sqrt_pp1dpp2- (p1(2)-(0d0,1d0)*p1(3))/sqrt_pp1dpp2
969 if( (dble(pdg_code1)*h1) .lt. 0d0)
then
982 subroutine ffa(pdg_code1, p1, h1, pdg_code2, p2, h2, Acurrent)
985 real(8),
parameter :: epsilon = 1d-13
987 real(8) p1(4), p2(4), h1, h2
988 integer pdg_code1, pdg_code2
989 real(8) sqrt_pp1Dpp2, sqrt_pp1Xpp2
990 complex(8) Acurrent(4)
995 if( ( dble(pdg_code1) *h1* dble(pdg_code2) *h2 ).lt.0d0)
then
1000 else if( ( dabs( p1(1)+p1(4) ).lt.epsilon ).and. &
1001 ( dabs( p2(1)+p2(4) ).lt.epsilon ) )
then
1003 acurrent(1)= 2d0*dsqrt(p1(1)*p2(1))
1006 acurrent(4)=-acurrent(1)
1008 else if( dabs( p1(1)+p1(4) ).lt.epsilon )
then
1010 acurrent(1)= dsqrt( 2d0*p1(1) / ( p2(1)+p2(4) ) ) &
1011 *( p2(2) + (0d0,1d0)*p2(3) )
1012 acurrent(2)= dsqrt( 2d0*p1(1) * ( p2(1)+p2(4) ) )
1013 acurrent(3)= (0d0,1d0)*acurrent(2)
1014 acurrent(4)=-acurrent(1)
1016 else if( dabs( p2(1)+p2(4) ).lt.epsilon )
then
1018 acurrent(1)= dsqrt( 2d0*p2(1) / ( p1(1)+p1(4) ) ) &
1019 *( p1(2) - (0d0,1d0)*p1(3) )
1020 acurrent(2)= dsqrt( 2d0*p2(1) * ( p1(1)+p1(4) ) )
1021 acurrent(3)=-(0d0,1d0)*acurrent(2)
1022 acurrent(4)=-acurrent(1)
1026 sqrt_pp1dpp2= dsqrt( (p1(1)+p1(4)) / (p2(1)+p2(4)) )
1027 sqrt_pp1xpp2= dsqrt( (p1(1)+p1(4)) * (p2(1)+p2(4)) )
1028 acurrent(1)= sqrt_pp1xpp2 &
1029 +( p1(2) - (0d0,1d0)*p1(3) ) &
1030 *( p2(2) + (0d0,1d0)*p2(3) )/sqrt_pp1xpp2
1031 acurrent(2)= ( p1(2) - (0d0,1d0)*p1(3) )/sqrt_pp1dpp2 &
1032 +( p2(2) + (0d0,1d0)*p2(3) )*sqrt_pp1dpp2
1033 acurrent(3)= ( (0d0,1d0)*p1(2) + p1(3) )/sqrt_pp1dpp2 &
1034 -( (0d0,1d0)*p2(2) - p2(3) )*sqrt_pp1dpp2
1035 acurrent(4)=sqrt_pp1xpp2 &
1036 -( p1(2) - (0d0,1d0)*p1(3) ) &
1037 *( p2(2) + (0d0,1d0)*p2(3) )/sqrt_pp1xpp2
1041 if( (dble(pdg_code1)*h1) .lt. 0d0)
then
1044 acurrent(mu)=-dconjg(acurrent(mu))
1055 complex(8) function ffs(pdg_code1, p1, h1, pdg_code2, p2, h2)
1058 real(8),
parameter :: epsilon = 1d-13
1060 real(8) p1(4), p2(4), h1, h2
1061 integer pdg_code1, pdg_code2
1062 real(8) sqrt_pp1dpp2
1066 if( ( dble(pdg_code1) *h1* dble(pdg_code2) *h2 ).gt.0d0)
then
1069 else if( ( dabs( p1(1)+p1(4) ).lt.epsilon ).and. ( dabs( p2(1)+p2(4) ).lt.epsilon ) )
then
1071 else if( dabs( p1(1)+p1(4) ).lt.epsilon )
then
1072 ffs=-dsqrt(2d0*p1(1)*(p2(1)+p2(4)))
1073 else if( dabs( p2(1)+p2(4) ).lt.epsilon )
then
1074 ffs= dsqrt(2d0*p2(1)*(p1(1)+p1(4)))
1076 sqrt_pp1dpp2 = dsqrt((p1(1)+p1(4))/(p2(1)+p2(4)))
1077 ffs=(p2(2)-(0d0,1d0)*p2(3))*sqrt_pp1dpp2- (p1(2)-(0d0,1d0)*p1(3))/sqrt_pp1dpp2
1080 if( (dble(pdg_code1)*h1) .lt. 0d0)
then
1093 subroutine ffv(pdg_code1, p1, h1, pdg_code2, p2, h2, Vcurrent)
1096 real(8),
parameter :: epsilon = 1d-13
1098 real(8) p1(4), p2(4), h1, h2
1099 integer pdg_code1, pdg_code2
1100 real(8) sqrt_pp1Dpp2, sqrt_pp1Xpp2
1101 complex(8) Vcurrent(4)
1104 vcurrent = (0d0,0d0)
1106 if( ( dble(pdg_code1) *h1* dble(pdg_code2) *h2 ).lt.0d0)
then
1111 else if( ( dabs( p1(1)+p1(4) ).lt.epsilon ).and. ( dabs( p2(1)+p2(4) ).lt.epsilon ) )
then
1113 vcurrent(1)= 2d0*dsqrt(p1(1)*p2(1))
1116 vcurrent(4)=-vcurrent(1)
1118 else if( dabs( p1(1)+p1(4) ).lt.epsilon )
then
1120 vcurrent(1)= dsqrt( 2d0*p1(1) / ( p2(1)+p2(4) ) ) *( p2(2) + (0d0,1d0)*p2(3) )
1121 vcurrent(2)= dsqrt( 2d0*p1(1) * ( p2(1)+p2(4) ) )
1122 vcurrent(3)= (0d0,1d0)*vcurrent(2)
1123 vcurrent(4)=-vcurrent(1)
1125 else if( dabs( p2(1)+p2(4) ).lt.epsilon )
then
1127 vcurrent(1)= dsqrt( 2d0*p2(1) / ( p1(1)+p1(4) ) ) *( p1(2) - (0d0,1d0)*p1(3) )
1128 vcurrent(2)= dsqrt( 2d0*p2(1) * ( p1(1)+p1(4) ) )
1129 vcurrent(3)=-(0d0,1d0)*vcurrent(2)
1130 vcurrent(4)=-vcurrent(1)
1134 sqrt_pp1dpp2= dsqrt( (p1(1)+p1(4)) / (p2(1)+p2(4)) )
1135 sqrt_pp1xpp2= dsqrt( (p1(1)+p1(4)) * (p2(1)+p2(4)) )
1136 vcurrent(1)= sqrt_pp1xpp2 &
1137 +( p1(2) - (0d0,1d0)*p1(3) ) &
1138 *( p2(2) + (0d0,1d0)*p2(3) )/sqrt_pp1xpp2
1139 vcurrent(2)= ( p1(2) - (0d0,1d0)*p1(3) )/sqrt_pp1dpp2 &
1140 +( p2(2) + (0d0,1d0)*p2(3) )*sqrt_pp1dpp2
1141 vcurrent(3)= ( (0d0,1d0)*p1(2) + p1(3) )/sqrt_pp1dpp2 &
1142 -( (0d0,1d0)*p2(2) - p2(3) )*sqrt_pp1dpp2
1143 vcurrent(4)=sqrt_pp1xpp2 &
1144 -( p1(2) - (0d0,1d0)*p1(3) ) &
1145 *( p2(2) + (0d0,1d0)*p2(3) )/sqrt_pp1xpp2
1148 if( (dble(pdg_code1)*h1) .lt. 0d0)
then
1150 vcurrent(mu)=dconjg(vcurrent(mu))
1169 real(8) vector(4), boost(4)
1170 real(8) lambda(4,4), vector_copy(4)
1171 real(8) beta(2:4), beta_sq, gamma
1175 beta(i) = -boost(i)/boost(1)
1178 beta_sq = beta(2)**2+beta(3)**2+beta(4)**2
1180 gamma = 1d0/dsqrt(1d0-beta_sq)
1185 lambda(1,i) = gamma*beta(i)
1186 lambda(i,1) = lambda(1,i)
1191 lambda(i,j) = (gamma-1d0)*beta(i)*beta(j)/beta_sq +
kronecker_delta(i,j)
1196 vector_copy = vector
1200 vector(i) = vector(i) + lambda(i,j)*vector_copy(j)
1211 real(8) function KRONECKER_DELTA(i,j)
1227 real(8) function
metric(mu,nu)
1234 else if(mu.eq.1)
then
1264 real(8) p(4), sincos(4), inv_mass, abs3p
1277 if(lambda.eq.1)
then
1279 pol(2)= (sincos(3)*sincos(1)-(0d0,1d0)*sincos(4))/dsqrt(2d0)
1280 pol(3)= (sincos(4)*sincos(1)+(0d0,1d0)*sincos(3))/dsqrt(2d0)
1281 pol(4)= -sincos(2)/dsqrt(2d0)
1283 else if(lambda.eq.-1)
then
1285 pol(2)= (sincos(3)*sincos(1)+(0d0,1d0)*sincos(4))/dsqrt(2d0)
1286 pol(3)= (sincos(4)*sincos(1)-(0d0,1d0)*sincos(3))/dsqrt(2d0)
1287 pol(4)= -sincos(2)/dsqrt(2d0)
1289 else if(lambda.eq.0)
then
1291 abs3p = dsqrt(p(2)**2+p(3)**2+p(4)**2)
1293 inv_mass= dsqrt(p(1)**2-abs3p**2)
1294 pol(1)= abs3p/inv_mass
1295 pol(2)= sincos(3)*sincos(2)*p(1)/inv_mass
1296 pol(3)= sincos(4)*sincos(2)*p(1)/inv_mass
1297 pol(4)= sincos(1)*p(1)/inv_mass
1299 else if(lambda.eq.2)
then
1301 pol(2)= sincos(3)*sincos(2)
1302 pol(3)= sincos(4)*sincos(2)
1305 else if(lambda.eq.-2)
then
1307 pol(2)= -sincos(3)*sincos(2)
1308 pol(3)= -sincos(4)*sincos(2)
1356 complex(8) function propagator(inv_mass, mass, width)
1359 real(8) inv_mass, mass, width
1368 if (mass.ge.0d0)
then
1369 propagator = ci / ( inv_mass**2 - mass**2 + ci*mass*width )
1382 subroutine vvp(p1,p2,epp)
1385 real(8) p1(4), p2(4)
1415 subroutine vvs1(g_mu_nu)
1418 complex(8) g_mu_nu(4,4)
1434 subroutine vvs2(p1,p2,pp)
1437 real(8) p1(4), p2(4)
1443 pp(mu,nu)=p1(mu)*p2(nu)
1444 if( ( (mu.ne.1).and.(nu.eq.1) ).or. &
1445 ( (mu.eq.1).and.(nu.ne.1) ) )
then
1446 pp(mu,nu)=-pp(mu,nu)
1458 integer,
intent(in) :: n
1459 real(8),
intent(in) :: p(4,n)
1460 complex(8),
intent(out) :: za(n,n), zb(n,n)
1461 real(8),
intent(out) :: s(n,n)
1463 complex(8) :: c23(n), f(n)
1472 if (p(1,j) .gt. zero)
then
1473 rt(j)=sqrt(abs(p(2,j)+p(1,j)))
1474 c23(j)=dcmplx(p(4,j),-p(3,j))
1478 rt(j)=sqrt(abs(-p(1,j)-p(2,j)))
1479 c23(j)=dcmplx(-p(4,j),p(3,j))
1487 s(i,j)=two*scr(p(:,i),p(:,j))
1488 za(i,j)=f(i)*f(j) * ( c23(i)*dcmplx(rt(j)/(rt(i)+1d-16))-c23(j)*dcmplx(rt(i)/(rt(j)+1d-16)) )
1490 if (abs(s(i,j)).lt.1d-5)
then
1491 zb(i,j)=-(f(i)*f(j))**2*conjg(za(i,j))
1493 zb(i,j)=-dcmplx(s(i,j))/(za(i,j)+1d-16)
1624 complex(8) :: SME(1:3,-1:+1,-1:+1),HelAmp
1625 real(8) :: p(1:4,1:9),UnpolSqAmp,PreFac,IZis(-1:+1)
1626 real(8) :: qsq_V1,qsq_V2,qsq_V1V2,qsq_H
1627 complex(8) ghz1_dyn,ghz2_dyn,ghz3_dyn,ghz4_dyn
1628 complex(8) :: a1HVV,a2HVV,a3HVV,Prop
1629 integer :: ishel,fshel,FermFlav(1:6)
1632 call getsme(p,fermflav,sme)
1633 if(
h_dk )
call error(
"Higgs decay not implemented")
1635 prop = (0d0,1d0)/(((p(1:4,4)+p(1:4,5)).dot.(p(1:4,4)+p(1:4,5))) -
m_v**2 + (0d0,1d0)*
m_v*
ga_v )
1640 izis(+1) =
br *
ckm(fermflav(1),fermflav(2))
1641 izis(-1) =
bl *
ckm(fermflav(1),fermflav(2))
1642 elseif(
isazdecay(
decaymode1) .and. (abs(fermflav(1)).eq.2 .or. abs(fermflav(1)).eq.4) )
then
1645 elseif(
isazdecay(
decaymode1) .and. (abs(fermflav(1)).eq.1 .or. abs(fermflav(1)).eq.3 .or. abs(fermflav(1)).eq.5) )
then
1652 qsq_v1 = p(1:4,3).dot.p(1:4,3)
1653 qsq_v2 = p(1:4,4).dot.p(1:4,4)
1654 qsq_v1v2=-(p(1:4,3).dot.p(1:4,4))
1655 qsq_h = p(1:4,5).dot.p(1:4,5)
1662 a1hvv = ghz1_dyn*
m_v**2 + qsq_v1v2*( 2d0*ghz2_dyn + ghz3_dyn*qsq_v1v2/
lambda**2 )
1663 a2hvv =-2d0*ghz2_dyn - ghz3_dyn*qsq_v1v2/
lambda**2
1664 a3hvv =-2d0*ghz4_dyn
1669 helamp = a3hvv * ( - izis(ishel)*sme(3,ishel,fshel) ) &
1670 + a2hvv * ( - izis(ishel)*sme(2,ishel,fshel) ) &
1671 + a1hvv * ( + izis(ishel)*sme(1,ishel,fshel) )
1672 helamp = helamp * prefac/
vev * prop
1673 unpolsqamp = unpolsqamp + dreal( helamp*dconjg(helamp) )
1676 unpolsqamp = unpolsqamp *
cf
1681 SUBROUTINE getsme(p,FermFlav,SME)
1685 complex(8) :: SME(1:3,-1:+1,-1:+1)
1686 real(8) :: sprod(9,9),p(1:4,1:9),IZfs(-1:+1)
1687 complex(8) :: za(9,9), zb(9,9),Prop
1688 integer :: FermFlav(1:6)
1690 call spinoru2(9,(/-p(1:4,1),-p(1:4,2),-p(1:4,1)-p(1:4,2),p(1:4,6)+p(1:4,7),p(1:4,8)+p(1:4,9),p(1:4,6),p(1:4,7),p(1:4,8),p(1:4,9)/),za,zb,sprod)
1695 izfs(+1) =
br *
ckm(fermflav(3),fermflav(4))
1696 izfs(-1) =
bl *
ckm(fermflav(3),fermflav(4))
1697 elseif( abs(fermflav(3)).eq.11 .or. abs(fermflav(3)).eq.13 .or. abs(fermflav(3)).eq.15)
then
1700 elseif( abs(fermflav(3)).eq.12 .or. abs(fermflav(3)).eq.14 .or. abs(fermflav(3)).eq.16 )
then
1703 elseif( abs(fermflav(3)).eq.2 .or. abs(fermflav(3)).eq.4 )
then
1706 elseif( abs(fermflav(3)).eq.1 .or. abs(fermflav(3)).eq.3 .or. abs(fermflav(3)).eq.5 )
then
1710 call error(
"Wrong flavor in getSME",fermflav(3))
1713 sme(1,+1,+1) = -2*izfs(1)*za(1,7)*zb(2,6)
1714 sme(2,+1,+1) = izfs(1)*(za(1,6)*zb(2,6) + za(1,7)*zb(2,7))*(za(7,8)*zb(6,8) + za(7,9)*zb(6,9))
1715 sme(3,+1,+1) =
ci*izfs(1)*(za(1,7)*(za(7,8)*zb(2,8) + za(7,9)*zb(2,9))*zb(6,7) + za(6,7)*zb(2,6)*(za(1,8)*zb(6,8) + za(1,9)*zb(6,9)))
1716 sme(1,+1,-1) = -2*izfs(-1)*za(1,6)*zb(2,7)
1717 sme(2,+1,-1) = izfs(-1)*(za(1,6)*zb(2,6) + za(1,7)*zb(2,7))*(za(6,8)*zb(7,8) + za(6,9)*zb(7,9))
1718 sme(3,+1,-1) =
ci*izfs(-1)*(-(za(1,7)*zb(2,7)*(za(6,8)*zb(7,8) + za(6,9)*zb(7,9))) + za(1,6)*(za(6,8)*(-(zb(2,7)*zb(6,8)) + zb(2,6)*zb(7,8)) + zb(2,7)*(za(7,8)*zb(7,8) + za(7,9)*zb(7,9)) + za(6,9)*(-(zb(2,7)*zb(6,9)) + zb(2,6)*zb(7,9))))
1719 sme(1,-1,+1) = -2*izfs(1)*za(2,7)*zb(1,6)
1720 sme(2,-1,+1) = izfs(1)*(za(2,6)*zb(1,6) + za(2,7)*zb(1,7))*(za(7,8)*zb(6,8) + za(7,9)*zb(6,9))
1721 sme(3,-1,+1) =
ci*izfs(1)*(za(2,7)*(za(7,8)*zb(1,8) + za(7,9)*zb(1,9))*zb(6,7) + za(6,7)*zb(1,6)*(za(2,8)*zb(6,8) + za(2,9)*zb(6,9)))
1722 sme(1,-1,-1) = -2*izfs(-1)*za(2,6)*zb(1,7)
1723 sme(2,-1,-1) = izfs(-1)*(za(2,6)*zb(1,6) + za(2,7)*zb(1,7))*(za(6,8)*zb(7,8) + za(6,9)*zb(7,9))
1724 sme(3,-1,-1) = -(
ci*izfs(-1)*(za(2,6)*(za(6,8)*zb(1,8) + za(6,9)*zb(1,9))*zb(6,7) + za(6,7)*zb(1,7)*(za(2,8)*zb(7,8) + za(2,9)*zb(7,9))))
1726 prop = (0d0,1d0)/(2*(p(1:4,6).dot.p(1:4,7)) -
m_v**2 + (0d0,1d0)*
m_v*
ga_v )
1727 sme(:,:,:) = sme(:,:,:) * prop