You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

170 lines
4.3 KiB

!
! SPDX-License-Identifier: GPL-3.0-or-later
! Copyright (C) 2019-2022, respective authors of MCFM.
!
subroutine qqb_twojet_v(p,msq)
c*******************************************************************************
c *
c Author: J. Campbell, September 2014 *
c Virtual matrix elements for two-jet production *
c *
c*******************************************************************************
implicit none
include 'types.f'
include 'constants.f'
include 'nf.f'
include 'mxpart.f'
include 'nflav.f'
include 'qcdcouple.f'
include 'sprods_com.f'
include 'scheme.f'
include 'blha.f'
integer j,k
real(dp):: msq(-nf:nf,-nf:nf),p(mxpart,4),fac,
& QjQk_QjQk,AjAk_AjAk,AjQk_AjQk,QjAk_QjAk,
& QjQj_QjQj,AjAj_AjAj,AjQj_AjQj,QjAj_QjAj,
& AjQj_AkQk,QjAj_QkAk,
& GQ_GQ,GA_GA,QG_QG,AG_AG,GG_GG,GG_QA,QA_GG,AQ_GG,ss,tt,uu,
& virta,virtb,virtc,virtd
scheme='tH-V'
call dotem(4,p,s)
ss=s(1,2)
tt=s(1,3)
uu=s(2,3)
fac=gsq**2*ason2pi
c--- four quarks
if (useblha == 0 .or. (blhatype == 4)) then
QjQk_QjQk=fac*aveqq*virta(ss,tt,uu)
AjAk_AjAk=QjQk_QjQk
endif
if (useblha == 0) then
QjAj_QkAk=fac*aveqq*virta(tt,ss,uu)
QjAk_QjAk=fac*aveqq*virta(uu,tt,ss)
AjQj_AkQk=QjAj_QkAk
AjQk_AjQk=QjAk_QjAk
endif
if (useblha == 0 .or. (blhatype == 3)) then
QjQj_QjQj=fac*half*aveqq*virtb(ss,tt,uu)
AjAj_AjAj=QjQj_QjQj
endif
if (useblha == 0) then
QjAj_QjAj=fac*aveqq*virtb(uu,tt,ss)
AjQj_AjQj=QjAj_QjAj
endif
c--- two quarks, two gluons
if (useblha == 0 .or. (blhatype == 2)) then
GG_QA=fac*avegg*virtc(ss,uu,tt)
QA_GG=half*aveqq/avegg*GG_QA
AQ_GG=half*aveqq/avegg*GG_QA
endif
if (useblha == 0) then
QG_QG=-fac*aveqg*virtc(tt,ss,uu)
AG_AG=-fac*aveqg*virtc(tt,uu,ss)
GQ_GQ=QG_QG
GA_GA=AG_AG
endif
c--- four gluons
if (useblha == 0 .or. (blhatype == 1)) then
GG_GG=fac*avegg*virtd(ss,tt,uu)
endif
c--- initalize matrix elements to zero
msq(:,:)=0d0
nflav=nf
do j=-nflav,nflav
do k=-nflav,nflav
c-- QQ
if ((j > 0) .and. (k > 0)) then
if (j == k) then
msq(j,k)=QjQj_QjQj
else
msq(j,k)=QjQk_QjQk
endif
c-- QA
elseif ((j > 0) .and. (k < 0)) then
if (j == -k) then
msq(j,k)=QjAj_QjAj+dfloat(nflav-1)*QjAj_QkAk+QA_GG
if (useblha == 1) then
if (blhatype == 2) then
msq(j,k)=QA_GG
elseif (blhatype == 3) then
msq(j,k)=QjAj_QjAj
elseif (blhatype == 4) then
msq(j,k)=QjAj_QkAk
endif
if (p(3,4)*p(4,4) < 0._dp) msq(j,k)=-msq(j,k)
endif
else
msq(j,k)=QjAk_QjAk
endif
c-- AA
elseif ((j < 0) .and. (k < 0)) then
if (j == k) then
msq(j,k)=AjAj_AjAj
else
msq(j,k)=AjAk_AjAk
endif
c-- AQ
elseif ((j > 0) .and. (k < 0)) then
if (j == -k) then
msq(j,k)=AjQj_AjQj+dfloat(nflav-1)*AjQj_AkQk+AQ_GG
if (blhatype == 2) then
msq(j,k)=AQ_GG
elseif (blhatype == 3) then
msq(j,k)=AjQj_AjQj
elseif (blhatype == 4) then
msq(j,k)=AjQj_AkQk
endif
else
msq(j,k)=AjQk_AjQk
endif
c-- QG
elseif ((j > 0) .and. (k == 0)) then
msq(j,k)=QG_QG
c-- AG
elseif ((j < 0) .and. (k == 0)) then
msq(j,k)=AG_AG
c-- GQ
elseif ((j == 0) .and. (k > 0)) then
msq(j,k)=GQ_GQ
c-- GA
elseif ((j == 0) .and. (k < 0)) then
msq(j,k)=GA_GA
c-- GG
elseif ((j == 0) .and. (k == 0)) then
msq(j,k)=half*GG_GG+dfloat(nflav)*GG_QA
if (blhatype == 1) then
msq(j,k)=half*GG_GG
else
msq(j,k)=GG_QA
endif
endif
enddo
enddo
return
end