Page MenuHomeHEPForge

No OneTemporary

Index: branches/bach/release_2.1.1_hoppet_top_features/m4/hoppet.m4
===================================================================
--- branches/bach/release_2.1.1_hoppet_top_features/m4/hoppet.m4 (revision 5348)
+++ branches/bach/release_2.1.1_hoppet_top_features/m4/hoppet.m4 (revision 5349)
@@ -1,58 +1,58 @@
dnl hoppet.m4 -- checks for HOPPET library
dnl
include([aux.m4])
### Determine paths to HOPPET components
### If successful, set the conditional HOPPET_AVAILABLE
### Also: HOPPET_VERSION HOPPET_INCLUDES LDFLAGS_HOPPET
AC_DEFUN([WO_PROG_HOPPET],
[dnl
AC_REQUIRE([AC_PROG_FC])
AC_ARG_ENABLE([hoppet],
[AS_HELP_STRING([--enable-hoppet],
[enable HOPPET for b quark pdf matching [[no]]])],
[], [enable_hoppet="no"])
if test "$enable_hoppet" = "yes"; then
# Guessing the most likely paths
wo_hoppet_path="/usr/local/lib:/usr/lib:/opt/local/lib"
- WO_PATH_LIB(HOPPET, hoppet_v1, libhoppet_v1.a, $wo_hoppet_path:$HOPPET_DIR:$HOPPET_DIR/src)
+ WO_PATH_LIB(HOPPET, hoppet_v1, libhoppet_v1.a, $wo_hoppet_path:$HOPPET_DIR)
if test "$HOPPET_DIR" = ""; then
enable_hoppet="no"
else
- wo_hoppet_includes="-I$HOPPET_DIR/src"
+ wo_hoppet_includes="-I$HOPPET_DIR/../include/hoppet"
fi
if test "$enable_hoppet" = "yes"; then
- wo_hoppet_libdir="-L$HOPPET_DIR/src"
+ wo_hoppet_libdir="-L$HOPPET_DIR"
AC_LANG([Fortran])
HOPPET_INCLUDES=$wo_hoppet_includes
LDFLAGS_HOPPET="$wo_hoppet_libdir -lhoppet_v1"
else
AC_MSG_CHECKING([for HOPPET])
AC_MSG_RESULT([(disabled)])
fi
else
AC_MSG_CHECKING([for HOPPET])
AC_MSG_RESULT([(disabled)])
fi
AC_SUBST([HOPPET_INCLUDES])
AC_SUBST(LDFLAGS_HOPPET)
if test "$enable_hoppet" = "yes"; then
HOPPET_AVAILABLE_FLAG=".true."
else
HOPPET_AVAILABLE_FLAG=".false."
fi
AC_SUBST(HOPPET_AVAILABLE_FLAG)
AM_CONDITIONAL([HOPPET_AVAILABLE], [test "$enable_hoppet" = "yes"])
])
Index: branches/bach/release_2.1.1_hoppet_top_features/src/models/Makefile.am
===================================================================
--- branches/bach/release_2.1.1_hoppet_top_features/src/models/Makefile.am (revision 5348)
+++ branches/bach/release_2.1.1_hoppet_top_features/src/models/Makefile.am (revision 5349)
@@ -1,310 +1,315 @@
## Makefile.am -- Makefile for model-parameter modules in WHIZARD
##
## Process this file with automake to produce Makefile.in
#
# Copyright (C) 1999-2012 by
# Wolfgang Kilian <kilian@physik.uni-siegen.de>
# Thorsten Ohl <ohl@physik.uni-wuerzburg.de>
# Juergen Reuter <juergen.reuter@desy.de>
# Christian Speckner <christian.speckner@physik.uni-freiburg.de>
#
# WHIZARD is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# WHIZARD is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
########################################################################
## Build the threeshl bundle required for the 3SHL models.
SUBDIRS = \
threeshl_bundle
## Build WHIZARD/O'Mega model interface library
## These modules transfer WHIZARD's parameters to the matrix-element code
## as generated by O'Mega
noinst_LTLIBRARIES = libmodels.la
libmodels_la_SOURCES = \
parameters.2HDM.f90 \
parameters.GravTest.f90 \
parameters.Littlest.f90 \
parameters.Littlest_Eta.f90 \
parameters.Littlest_Tpar.f90 \
parameters.MSSM.f90 \
parameters.MSSM_CKM.f90 \
parameters.MSSM_Grav.f90 \
parameters.MSSM_Hgg.f90 \
parameters.NMSSM.f90 \
parameters.NMSSM_CKM.f90 \
parameters.NMSSM_Hgg.f90 \
parameters.QED.f90 \
parameters.QCD.f90 \
parameters.PSSSM.f90 \
parameters.Simplest.f90 \
parameters.Simplest_univ.f90 \
parameters.SM.f90 \
parameters.SM_ac.f90 \
parameters.SM_ac_CKM.f90 \
parameters.SM_km.f90 \
parameters.SM_CKM.f90 \
parameters.SM_QCD.f90 \
parameters.SM_top.f90 \
parameters.SM_top_anom.f90 \
+ parameters.SM_tt_threshold.f90 \
parameters.SM_Higgs.f90 \
parameters.Template.f90 \
parameters.UED.f90 \
parameters.Xdim.f90 \
parameters.Zprime.f90 \
parameters.Threeshl.f90 \
parameters.Threeshl_nohf.f90 \
parameters.Test.f90
## Install the modules used by generated matrix element code
execmoddir = $(pkglibdir)/mod/models
nodist_execmod_HEADERS = \
parameters_2hdm.$(FC_MODULE_EXT) \
parameters_gravtest.$(FC_MODULE_EXT) \
parameters_littlest.$(FC_MODULE_EXT) \
parameters_littlest_eta.$(FC_MODULE_EXT) \
parameters_littlest_tpar.$(FC_MODULE_EXT) \
parameters_mssm.$(FC_MODULE_EXT) \
parameters_mssm_ckm.$(FC_MODULE_EXT) \
parameters_mssm_hgg.$(FC_MODULE_EXT) \
parameters_mssm_grav.$(FC_MODULE_EXT) \
parameters_nmssm.$(FC_MODULE_EXT) \
parameters_nmssm_ckm.$(FC_MODULE_EXT) \
parameters_nmssm_hgg.$(FC_MODULE_EXT) \
parameters_qed.$(FC_MODULE_EXT) \
parameters_qcd.$(FC_MODULE_EXT) \
parameters_psssm.$(FC_MODULE_EXT) \
parameters_simplest.$(FC_MODULE_EXT) \
parameters_simplest_univ.$(FC_MODULE_EXT) \
parameters_sm.$(FC_MODULE_EXT) \
parameters_sm_ac.$(FC_MODULE_EXT) \
parameters_sm_ac_ckm.$(FC_MODULE_EXT) \
parameters_sm_km.$(FC_MODULE_EXT) \
parameters_sm_ckm.$(FC_MODULE_EXT) \
parameters_sm_qcd.$(FC_MODULE_EXT) \
parameters_sm_top.$(FC_MODULE_EXT) \
parameters_sm_top_anom.$(FC_MODULE_EXT) \
+ parameters_sm_tt_threshold.$(FC_MODULE_EXT) \
parameters_sm_higgs.$(FC_MODULE_EXT) \
parameters_template.$(FC_MODULE_EXT) \
parameters_ued.$(FC_MODULE_EXT) \
parameters_xdim.$(FC_MODULE_EXT) \
parameters_zprime.$(FC_MODULE_EXT) \
parameters_threeshl.$(FC_MODULE_EXT) \
parameters_threeshl_nohf.$(FC_MODULE_EXT) \
parameters_test.$(FC_MODULE_EXT)
## Build WHIZARD auxiliary dynamic libraries for model access
## These modules handle initialization operations that are not accounted
## for by definitions in the model files (external parameters).
modellibdir = $(pkglibdir)/models
modellib_LTLIBRARIES = \
external.Threeshl.la \
external.Threeshl_nohf.la \
external.Test.la
external_Threeshl_la_SOURCES = external.Threeshl.f90
external_Threeshl_la_LDFLAGS = -module
external_Threeshl_nohf_la_SOURCES = external.Threeshl_nohf.f90
external_Threeshl_nohf_la_LDFLAGS = -module
external_Test_la_SOURCES = external.Test.f90
external_Test_la_LDFLAGS = -module
## Collect the 3SHL code.
external_Threeshl_la_LIBADD = threeshl_bundle/libthreeshl_bundle.la
libmodels_la_LIBADD = threeshl_bundle/libthreeshl_bundle.la
external_Threeshl_nohf_la_LIBADD = threeshl_bundle/libthreeshl_bundle.la
## Switch off optimization if requested
## Optimization is useless here, it just consumes compile time.
if !OPTIMIZATION_FOR_PARFILES
NO_OPT=-O0
endif
.f90.o:
$(FCCOMPILE) $(NO_OPT) -c -o $@ $<
.f90.obj:
$(FCCOMPILE) $(NO_OPT) -c -o $@ `$(CYGPATH_W) '$<'`
.f90.lo:
$(LTFCCOMPILE) $(NO_OPT) -c -o $@ $<
## The mismatch of filenames and module names requires a lot of repetition:
parameters_2hdm.$(FC_MODULE_EXT): parameters.2HDM.lo
@:
parameters_gravtest.$(FC_MODULE_EXT): parameters.GravTest.lo
@:
parameters_littlest.$(FC_MODULE_EXT): parameters.Littlest.lo
@:
parameters_littlest_eta.$(FC_MODULE_EXT): parameters.Littlest_Eta.lo
@:
parameters_littlest_tpar.$(FC_MODULE_EXT): parameters.Littlest_Tpar.lo
@:
parameters_mssm.$(FC_MODULE_EXT): parameters.MSSM.lo
@:
parameters_mssm_4.$(FC_MODULE_EXT): parameters.MSSM_4.lo
@:
parameters_mssm_ckm.$(FC_MODULE_EXT): parameters.MSSM_CKM.lo
@:
parameters_mssm_grav.$(FC_MODULE_EXT): parameters.MSSM_Grav.lo
@:
parameters_mssm_hgg.$(FC_MODULE_EXT): parameters.MSSM_Hgg.lo
@:
parameters_nmssm.$(FC_MODULE_EXT): parameters.NMSSM.lo
@:
parameters_nmssm_ckm.$(FC_MODULE_EXT): parameters.NMSSM_CKM.lo
@:
parameters_nmssm_hgg.$(FC_MODULE_EXT): parameters.NMSSM_Hgg.lo
@:
parameters_psssm.$(FC_MODULE_EXT): parameters.PSSSM.lo
@:
parameters_qcd.$(FC_MODULE_EXT): parameters.QCD.lo
@:
parameters_qed.$(FC_MODULE_EXT): parameters.QED.lo
@:
parameters_sm.$(FC_MODULE_EXT): parameters.SM.lo
@:
parameters_sm_ckm.$(FC_MODULE_EXT): parameters.SM_CKM.lo
@:
parameters_sm_ac.$(FC_MODULE_EXT): parameters.SM_ac.lo
@:
parameters_sm_ac_ckm.$(FC_MODULE_EXT): parameters.SM_ac_CKM.lo
@:
parameters_sm_km.$(FC_MODULE_EXT): parameters.SM_km.lo
@:
parameters_sm_qcd.$(FC_MODULE_EXT): parameters.SM_QCD.lo
@:
parameters_sm_top.$(FC_MODULE_EXT): parameters.SM_top.lo
@:
parameters_sm_top_anom.$(FC_MODULE_EXT): parameters.SM_top_anom.lo
@:
+parameters_sm_tt_threshold.$(FC_MODULE_EXT): parameters.SM_tt_threshold.lo
+ @:
+
parameters_sm_higgs.$(FC_MODULE_EXT): parameters.SM_Higgs.lo
@:
parameters_simplest.$(FC_MODULE_EXT): parameters.Simplest.lo
@:
parameters_simplest_univ.$(FC_MODULE_EXT): parameters.Simplest_univ.lo
@:
parameters_template.$(FC_MODULE_EXT): parameters.Template.lo
@:
parameters_test.$(FC_MODULE_EXT): parameters.Test.lo
@:
parameters_threeshl.$(FC_MODULE_EXT): parameters.Threeshl.lo
@:
parameters_threeshl_nohf.$(FC_MODULE_EXT): parameters.Threeshl_nohf.lo
@:
parameters_ued.$(FC_MODULE_EXT): parameters.UED.lo
@:
parameters_xdim.$(FC_MODULE_EXT): parameters.Xdim.lo
@:
parameters_zprime.$(FC_MODULE_EXT): parameters.Zprime.lo
@:
########################################################################
## Dependency on O'Mega modules
auxdir = $(top_builddir)/src/misc
omegadir = $(top_builddir)/src/omega/src
KINDS_MOD = kinds.$(FC_MODULE_EXT)
CONSTANTS_MOD = constants.$(FC_MODULE_EXT)
DIAGNOSTICS_MOD = diagnostics.$(FC_MODULE_EXT)
SMPHYSICS_MOD = sm_physics.$(FC_MODULE_EXT)
FILEUTILS_MOD = file_utils.$(FC_MODULE_EXT)
OMEGAVECTORS_MOD = omega_vectors.$(FC_MODULE_EXT)
ILCTTTHRESHOLD_MOD = ilc_tt_threshold.$(FC_MODULE_EXT)
### To be changed when moved in an external physics library
$(libmodels_la_OBJECTS) $(external_Threeshl_la_OBJECTS): \
$(auxdir)/$(KINDS_MOD) \
$(auxdir)/$(CONSTANTS_MOD) \
$(auxdir)/$(SMPHYSICS_MOD) \
$(auxdir)/$(DIAGNOSTICS_MOD) \
$(auxdir)/$(FILEUTILS_MOD) \
$(omegadir)/$(OMEGAVECTORS_MOD) \
$(auxdir)/$(ILCTTTHRESHOLD_MOD) \
threeshl_bundle/threeshl.$(FC_MODULE_EXT) \
threeshl_bundle/tglue.$(FC_MODULE_EXT)
AM_FCFLAGS = -I$(auxdir) -I$(omegadir) -Ithreeshl_bundle
########################################################################
## Default Fortran compiler options
## Profiling
if FC_USE_PROFILING
AM_FCFLAGS += $(FCFLAGS_PROFILING)
endif
## OpenMP
if FC_USE_OPENMP
AM_FCFLAGS += $(FCFLAGS_OPENMP)
endif
########################################################################
## Threeshl and Threeshl_nohf are identical
parameters.Threeshl_nohf.f90: parameters.Threeshl.f90
sed -e 's/\(module parameters_threeshl\)/\1_nohf/' < $< > $@
external.Threeshl_nohf.f90: external.Threeshl.f90
cp $< $@
########################################################################
## Non-standard cleanup tasks
CLEANFILES = \
parameters.Threeshl_nohf.f90 \
external.Threeshl_nohf.f90
clean-local:
-rm -f *.$(FC_MODULE_EXT)
## Remove backup files
maintainer-clean-local:
-rm -f *~
Index: branches/bach/release_2.1.1_hoppet_top_features/src/models/parameters.SM_tt_threshold.f90
===================================================================
--- branches/bach/release_2.1.1_hoppet_top_features/src/models/parameters.SM_tt_threshold.f90 (revision 0)
+++ branches/bach/release_2.1.1_hoppet_top_features/src/models/parameters.SM_tt_threshold.f90 (revision 5349)
@@ -0,0 +1,226 @@
+! $Id: parameters.SM_tt_threshold.f90,v 1.4 2006/06/16 13:31:48 kilian Exp $
+!
+! Copyright (C) 1999-2012 by
+! Wolfgang Kilian <kilian@physik.uni-siegen.de>
+! Thorsten Ohl <ohl@physik.uni-wuerzburg.de>
+! Juergen Reuter <juergen.reuter@desy.de>
+! Christian Speckner <christian.speckner@physik.uni-freiburg.de>
+!
+! WHIZARD is free software; you can redistribute it and/or modify it
+! under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 2, or (at your option)
+! any later version.
+!
+! WHIZARD is distributed in the hope that it will be useful, but
+! WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program; if not, write to the Free Software
+! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+module parameters_sm_tt_threshold
+ use kinds
+ use constants
+ use sm_physics !NODEP!
+ use omega_vectors
+ use ilc_tt_threshold
+ implicit none
+ private
+
+ real(default), dimension(27), public :: mass, width
+ real(default), public :: as
+ complex(default), public :: gs, igs
+
+ real(default), public :: e, g, e_em
+ real(default), public :: sinthw, costhw, sin2thw, tanthw
+ real(default), public :: qelep, qeup, qedwn
+ complex(default), public :: qlep, qup, qdwn, gcc, qw, &
+ gzww, gwww, ghww, ghhww, ghzz, ghhzz, &
+ ghbb, ghtt, ghcc, ghtautau, gh3, gh4, ghmm, &
+ iqw, igzww, igwww, gw4, gzzww, gazww, gaaww
+ real(default), public :: vev
+ complex(default), dimension(2), public :: &
+ gncneu, gnclep, gncup, gncdwn
+
+ public :: import_from_whizard, model_update_alpha_s, &
+ va_ilc_tta, va_ilc_ttz
+
+contains
+
+ subroutine import_from_whizard (par_array)
+ real(default), dimension(28), intent(in) :: par_array
+ type :: parameter_set
+ real(default) :: gf
+ real(default) :: mZ
+ real(default) :: mW
+ real(default) :: mH
+ real(default) :: alphas
+ real(default) :: me
+ real(default) :: mmu
+ real(default) :: mtau
+ real(default) :: ms
+ real(default) :: mc
+ real(default) :: mb
+ real(default) :: mtop
+ real(default) :: wtop
+ real(default) :: wZ
+ real(default) :: wW
+ real(default) :: wH
+ real(default) :: khgaz
+ real(default) :: khgaga
+ real(default) :: khgg
+ real(default) :: xi0
+ real(default) :: xipm
+ real(default) :: vsoft
+ real(default) :: vmax
+ real(default) :: nloop
+ real(default) :: v
+ real(default) :: cw
+ real(default) :: sw
+ real(default) :: ee
+ end type parameter_set
+ type(parameter_set) :: par
+ !!! This corresponds to 1/alpha = 137.03598949333
+ real(default), parameter :: &
+ alpha = 1.0_default/137.03598949333_default
+ e_em = sqrt(4.0_default * PI * alpha)
+ par%gf = par_array(1)
+ par%mZ = par_array(2)
+ par%mW = par_array(3)
+ par%mH = par_array(4)
+ par%alphas = par_array(5)
+ par%me = par_array(6)
+ par%mmu = par_array(7)
+ par%mtau = par_array(8)
+ par%ms = par_array(9)
+ par%mc = par_array(10)
+ par%mb = par_array(11)
+ par%mtop = par_array(12)
+ par%wtop = par_array(13)
+ par%wZ = par_array(14)
+ par%wW = par_array(15)
+ par%wH = par_array(16)
+ par%khgaz = par_array(17)
+ par%khgaga = par_array(18)
+ par%khgg = par_array(19)
+ par%xi0 = par_array(20)
+ par%xipm = par_array(21)
+ par%vsoft = par_array(22)
+ par%vmax = par_array(23)
+ par%nloop = par_array(24)
+ par%v = par_array(25)
+ par%cw = par_array(26)
+ par%sw = par_array(27)
+ par%ee = par_array(28)
+ mass(1:27) = 0
+ width(1:27) = 0
+ mass(3) = par%ms
+ mass(4) = par%mc
+ mass(5) = par%mb
+ mass(6) = par%mtop
+ width(6) = par%wtop
+ mass(11) = par%me
+ mass(13) = par%mmu
+ mass(15) = par%mtau
+ mass(23) = par%mZ
+ width(23) = par%wZ
+ mass(24) = par%mW
+ width(24) = par%wW
+ mass(25) = par%mH
+ width(25) = par%wH
+ mass(26) = par%xi0 * mass(23)
+ width(26) = 0
+ mass(27) = par%xipm * mass(24)
+ width(27) = 0
+ vev = par%v
+ e = par%ee
+ sinthw = par%sw
+ sin2thw = par%sw**2
+ costhw = par%cw
+ tanthw = sinthw/costhw
+ qelep = - 1
+ qeup = 2.0_default / 3.0_default
+ qedwn = - 1.0_default / 3.0_default
+ g = e / sinthw
+ gcc = - g / 2 / sqrt (2.0_default)
+ gncneu(1) = - g / 2 / costhw * ( + 0.5_default)
+ gnclep(1) = - g / 2 / costhw * ( - 0.5_default - 2 * qelep * sin2thw)
+ gncup(1) = - g / 2 / costhw * ( + 0.5_default - 2 * qeup * sin2thw)
+ gncdwn(1) = - g / 2 / costhw * ( - 0.5_default - 2 * qedwn * sin2thw)
+ gncneu(2) = - g / 2 / costhw * ( + 0.5_default)
+ gnclep(2) = - g / 2 / costhw * ( - 0.5_default)
+ gncup(2) = - g / 2 / costhw * ( + 0.5_default)
+ gncdwn(2) = - g / 2 / costhw * ( - 0.5_default)
+ qlep = - e * qelep
+ qup = - e * qeup
+ qdwn = - e * qedwn
+ qw = e
+ iqw = (0,1)*qw
+ gzww = g * costhw
+ igzww = (0,1)*gzww
+ gwww = g
+ igwww = (0,1)*gwww
+ gw4 = gwww**2
+ gzzww = gzww**2
+ gazww = gzww * qw
+ gaaww = qw**2
+ ghww = mass(24) * g
+ ghhww = g**2 / 2.0_default
+ ghzz = mass(23) * g / costhw
+ ghhzz = g**2 / 2.0_default / costhw**2
+ ghtt = - mass(6) / vev
+ ghbb = - mass(5) / vev
+ ghcc = - mass(4) / vev
+ ghtautau = - mass(15) / vev
+ ghmm = - mass(13) / vev
+ gh3 = - 3 * mass(25)**2 / vev
+ gh4 = - 3 * mass(25)**2 / vev**2
+ !!! Color flow basis, divide by sqrt(2)
+ gs = sqrt(2.0_default*PI*par%alphas)
+ igs = cmplx (0.0_default, 1.0_default, kind=default) * gs
+ call ilc_tt_init (mass(6), width(6), par%vsoft, par%vmax, int(par%nloop))
+ end subroutine import_from_whizard
+
+ subroutine model_update_alpha_s (alpha_s)
+ real(default), intent(in) :: alpha_s
+ gs = sqrt(2.0_default*PI*alpha_s)
+ igs = cmplx (0.0_default, 1.0_default, kind=default) * gs
+ end subroutine model_update_alpha_s
+
+ function ilc_tt_fudge (p, q, i) result (c)
+ complex(default) :: c
+ type(momentum), intent(in) :: p, q
+ integer, intent(in) :: i
+ real(default) :: en, pt
+ real(single) :: dm_p, dm_q
+ c = 0.0_default
+ dm_p = sqrt(p*p) - mass(6)
+ dm_q = sqrt(q*q) - mass(6)
+!!! on-shell veto???
+ if ( dm_p==0.0_single .and. dm_q==0.0_single ) return
+ if ( dm_p > 30.0_default .or. dm_q > 30.0_default ) return
+ en = sqrt( (p+q)*(p+q) )
+ pt = sqrt( dot_product(p%x,p%x) )
+ c = ilc_tt_formfactor (pt, en, i)
+! print *, "c = ", c
+ end function ilc_tt_fudge
+
+ function va_ilc_tta (p, q, i) result (c)
+ complex(default) :: c
+ type(momentum), intent(in) :: p, q
+ integer, intent(in) :: i
+ c = 0.0_default
+ if ( i==1 ) c = qup * ilc_tt_fudge (p, q, 1)
+ end function va_ilc_tta
+
+ function va_ilc_ttz (p, q, i) result (c)
+ complex(default) :: c
+ type(momentum), intent(in) :: p, q
+ integer, intent(in) :: i
+ c = gncup(i) * ilc_tt_fudge (p, q, i)
+ end function va_ilc_ttz
+
+end module parameters_sm_tt_threshold
Index: branches/bach/release_2.1.1_hoppet_top_features/src/models/parameters.SM.f90
===================================================================
--- branches/bach/release_2.1.1_hoppet_top_features/src/models/parameters.SM.f90 (revision 5348)
+++ branches/bach/release_2.1.1_hoppet_top_features/src/models/parameters.SM.f90 (revision 5349)
@@ -1,234 +1,182 @@
! $Id: parameters.SM.f90,v 1.4 2006/06/16 13:31:48 kilian Exp $
!
! Copyright (C) 1999-2012 by
! Wolfgang Kilian <kilian@physik.uni-siegen.de>
! Thorsten Ohl <ohl@physik.uni-wuerzburg.de>
! Juergen Reuter <juergen.reuter@desy.de>
! Christian Speckner <christian.speckner@physik.uni-freiburg.de>
!
! WHIZARD is free software; you can redistribute it and/or modify it
! under the terms of the GNU General Public License as published by
! the Free Software Foundation; either version 2, or (at your option)
! any later version.
!
! WHIZARD is distributed in the hope that it will be useful, but
! WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! GNU General Public License for more details.
!
! You should have received a copy of the GNU General Public License
! along with this program; if not, write to the Free Software
! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
module parameters_sm
use kinds
use constants
use sm_physics !NODEP!
- use omega_vectors
- use ilc_tt_threshold
implicit none
private
real(default), dimension(27), public :: mass, width
real(default), public :: as
complex(default), public :: gs, igs
real(default), public :: e, g, e_em
real(default), public :: sinthw, costhw, sin2thw, tanthw
real(default), public :: qelep, qeup, qedwn
complex(default), public :: qlep, qup, qdwn, gcc, qw, &
gzww, gwww, ghww, ghhww, ghzz, ghhzz, &
ghbb, ghtt, ghcc, ghtautau, gh3, gh4, ghmm, &
iqw, igzww, igwww, gw4, gzzww, gazww, gaaww
real(default), public :: vev
complex(default), dimension(2), public :: &
gncneu, gnclep, gncup, gncdwn
- logical, public :: ilc_tt_flag = .false.
- public :: import_from_whizard, model_update_alpha_s, &
- ilc_tt_fudge, va_ilc_tta, va_ilc_ttz
+ public :: import_from_whizard, model_update_alpha_s
contains
subroutine import_from_whizard (par_array)
- real(default), dimension(30), intent(in) :: par_array
+ real(default), dimension(25), intent(in) :: par_array
type :: parameter_set
real(default) :: gf
real(default) :: mZ
real(default) :: mW
real(default) :: mH
real(default) :: alphas
real(default) :: me
real(default) :: mmu
real(default) :: mtau
real(default) :: ms
real(default) :: mc
real(default) :: mb
real(default) :: mtop
real(default) :: wtop
real(default) :: wZ
real(default) :: wW
real(default) :: wH
real(default) :: khgaz
real(default) :: khgaga
real(default) :: khgg
real(default) :: xi0
real(default) :: xipm
- real(default) :: ilc_tt
- real(default) :: m1s
- real(default) :: vsoft
- real(default) :: vmax
- real(default) :: nloop
real(default) :: v
real(default) :: cw
real(default) :: sw
real(default) :: ee
end type parameter_set
type(parameter_set) :: par
!!! This corresponds to 1/alpha = 137.03598949333
real(default), parameter :: &
alpha = 1.0_default/137.03598949333_default
e_em = sqrt(4.0_default * PI * alpha)
par%gf = par_array(1)
par%mZ = par_array(2)
par%mW = par_array(3)
par%mH = par_array(4)
par%alphas = par_array(5)
par%me = par_array(6)
par%mmu = par_array(7)
par%mtau = par_array(8)
par%ms = par_array(9)
par%mc = par_array(10)
par%mb = par_array(11)
par%mtop = par_array(12)
par%wtop = par_array(13)
par%wZ = par_array(14)
par%wW = par_array(15)
par%wH = par_array(16)
par%khgaz = par_array(17)
par%khgaga = par_array(18)
par%khgg = par_array(19)
par%xi0 = par_array(20)
par%xipm = par_array(21)
- par%ilc_tt = par_array(22)
- par%m1s = par_array(23)
- par%vsoft = par_array(24)
- par%vmax = par_array(25)
- par%nloop = par_array(26)
- par%v = par_array(27)
- par%cw = par_array(28)
- par%sw = par_array(29)
- par%ee = par_array(30)
+ par%v = par_array(22)
+ par%cw = par_array(23)
+ par%sw = par_array(24)
+ par%ee = par_array(25)
mass(1:27) = 0
width(1:27) = 0
mass(3) = par%ms
mass(4) = par%mc
mass(5) = par%mb
mass(6) = par%mtop
width(6) = par%wtop
mass(11) = par%me
mass(13) = par%mmu
mass(15) = par%mtau
mass(23) = par%mZ
width(23) = par%wZ
mass(24) = par%mW
width(24) = par%wW
mass(25) = par%mH
width(25) = par%wH
mass(26) = par%xi0 * mass(23)
width(26) = 0
mass(27) = par%xipm * mass(24)
width(27) = 0
vev = par%v
e = par%ee
sinthw = par%sw
sin2thw = par%sw**2
costhw = par%cw
tanthw = sinthw/costhw
qelep = - 1
qeup = 2.0_default / 3.0_default
qedwn = - 1.0_default / 3.0_default
g = e / sinthw
gcc = - g / 2 / sqrt (2.0_default)
gncneu(1) = - g / 2 / costhw * ( + 0.5_default)
gnclep(1) = - g / 2 / costhw * ( - 0.5_default - 2 * qelep * sin2thw)
gncup(1) = - g / 2 / costhw * ( + 0.5_default - 2 * qeup * sin2thw)
gncdwn(1) = - g / 2 / costhw * ( - 0.5_default - 2 * qedwn * sin2thw)
gncneu(2) = - g / 2 / costhw * ( + 0.5_default)
gnclep(2) = - g / 2 / costhw * ( - 0.5_default)
gncup(2) = - g / 2 / costhw * ( + 0.5_default)
gncdwn(2) = - g / 2 / costhw * ( - 0.5_default)
qlep = - e * qelep
qup = - e * qeup
qdwn = - e * qedwn
qw = e
iqw = (0,1)*qw
gzww = g * costhw
igzww = (0,1)*gzww
gwww = g
igwww = (0,1)*gwww
gw4 = gwww**2
gzzww = gzww**2
gazww = gzww * qw
gaaww = qw**2
ghww = mass(24) * g
ghhww = g**2 / 2.0_default
ghzz = mass(23) * g / costhw
ghhzz = g**2 / 2.0_default / costhw**2
ghtt = - mass(6) / vev
ghbb = - mass(5) / vev
ghcc = - mass(4) / vev
ghtautau = - mass(15) / vev
ghmm = - mass(13) / vev
gh3 = - 3 * mass(25)**2 / vev
gh4 = - 3 * mass(25)**2 / vev**2
!!! Color flow basis, divide by sqrt(2)
gs = sqrt(2.0_default*PI*par%alphas)
- igs = cmplx (0.0_default, 1.0_default, kind=default) * gs
- if ( par%ilc_tt > 0. ) then
- ilc_tt_flag = .true.
- call ilc_tt_init (mass(6), width(6), par%m1s, par%vsoft, par%vmax, int(par%nloop))
- end if
+ igs = cmplx (0.0_default, 1.0_default, kind=default) * gs
end subroutine import_from_whizard
subroutine model_update_alpha_s (alpha_s)
real(default), intent(in) :: alpha_s
gs = sqrt(2.0_default*PI*alpha_s)
igs = cmplx (0.0_default, 1.0_default, kind=default) * gs
end subroutine model_update_alpha_s
-
- function ilc_tt_fudge (p, q, i) result (c)
- complex(default) :: c
- type(momentum), intent(in) :: p, q
- integer, intent(in) :: i
- real(default) :: en, pt
- real(single) :: m1, m2
- c = 0.0_default
- if ( .not. ilc_tt_flag ) return
-!!! on-shell veto???
-! mp = sqrt(p*p)
-! mq = sqrt(q*q)
-! if ( mp==real(mass(6),kind=single) .and. mq==real(mass(6),kind=single) ) return
- en = sqrt( (p+q)*(p+q) )
- pt = sqrt( dot_product(p%x,p%x) )
- c = ilc_tt_formfactor (pt, en, i)
-! print *, "c = ", c
- end function ilc_tt_fudge
-
- function va_ilc_tta (p, q, i) result (c)
- complex(default) :: c
- type(momentum), intent(in) :: p, q
- integer, intent(in) :: i
- c = 0.0_default
- if ( i==1 ) c = qup * ilc_tt_fudge (p, q, 1)
- end function va_ilc_tta
-
- function va_ilc_ttz (p, q, i) result (c)
- complex(default) :: c
- type(momentum), intent(in) :: p, q
- integer, intent(in) :: i
- c = gncup(i) * ilc_tt_fudge (p, q, i)
- end function va_ilc_ttz
-
end module parameters_sm
Index: branches/bach/release_2.1.1_hoppet_top_features/src/omega/src/modellib_SM.ml
===================================================================
--- branches/bach/release_2.1.1_hoppet_top_features/src/omega/src/modellib_SM.ml (revision 5348)
+++ branches/bach/release_2.1.1_hoppet_top_features/src/omega/src/modellib_SM.ml (revision 5349)
@@ -1,3122 +1,3150 @@
(* $Id$
Copyright (C) 1999-2012 by
Wolfgang Kilian <kilian@physik.uni-siegen.de>
Thorsten Ohl <ohl@physik.uni-wuerzburg.de>
Juergen Reuter <juergen.reuter@desy.de>
Christian Speckner <christian.speckner@physik.uni-freiburg.de>
Fabian Bach <fabian.bach@cern.ch> (only parts of this file)
WHIZARD is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
WHIZARD is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *)
let rcs_file = RCS.parse "Modellib_SM" ["Lagragians"]
{ RCS.revision = "$Revision$";
RCS.date = "$Date$";
RCS.author = "$Author$";
RCS.source
= "$URL$" }
(* \thocwmodulesection{$\phi^3$} *)
module Phi3 =
struct
let rcs = RCS.rename rcs_file "Modellib.Phi3"
["phi**3 with a single flavor"]
open Coupling
let options = Options.empty
type flavor = Phi
let external_flavors () = [ "", [Phi]]
let flavors () = ThoList.flatmap snd (external_flavors ())
type gauge = unit
type constant = G
let lorentz _ = Scalar
let color _ = Color.Singlet
let propagator _ = Prop_Scalar
let width _ = Timelike
let goldstone _ = None
let conjugate f = f
let fermion _ = 0
module Ch = Charges.Null
let charges _ = ()
module F = Modeltools.Fusions (struct
type f = flavor
type c = constant
let compare = compare
let conjugate = conjugate
end)
let vertices () =
([(Phi, Phi, Phi), Scalar_Scalar_Scalar 1, G], [], [])
let table = F.of_vertices (vertices ())
let fuse2 = F.fuse2 table
let fuse3 = F.fuse3 table
let fuse = F.fuse table
let max_degree () = 3
let parameters () = { input = [G, 1.0]; derived = []; derived_arrays = [] }
let flavor_of_string = function
| "p" -> Phi
| _ -> invalid_arg "Modellib.Phi3.flavor_of_string"
let flavor_to_string Phi = "phi"
let flavor_to_TeX Phi = "\\phi"
let flavor_symbol Phi = "phi"
let gauge_symbol () =
failwith "Modellib.Phi3.gauge_symbol: internal error"
let pdg _ = 1
let mass_symbol _ = "m"
let width_symbol _ = "w"
let constant_symbol G = "g"
end
(* \thocwmodulesection{$\lambda_3\phi^3+\lambda_4\phi^4$} *)
module Phi4 =
struct
let rcs = RCS.rename rcs_file "Modellib.Phi4"
["phi**4 with a single flavor"]
open Coupling
let options = Options.empty
type flavor = Phi
let external_flavors () = [ "", [Phi]]
let flavors () = ThoList.flatmap snd (external_flavors ())
type gauge = unit
type constant = G3 | G4
let lorentz _ = Scalar
let color _ = Color.Singlet
let propagator _ = Prop_Scalar
let width _ = Timelike
let goldstone _ = None
let conjugate f = f
let fermion _ = 0
module Ch = Charges.Null
let charges _ = ()
module F = Modeltools.Fusions (struct
type f = flavor
type c = constant
let compare = compare
let conjugate = conjugate
end)
let vertices () =
([(Phi, Phi, Phi), Scalar_Scalar_Scalar 1, G3],
[(Phi, Phi, Phi, Phi), Scalar4 1, G4], [])
let fuse2 _ = failwith "Modellib.Phi4.fuse2"
let fuse3 _ = failwith "Modellib.Phi4.fuse3"
let fuse = function
| [] | [_] -> invalid_arg "Modellib.Phi4.fuse"
| [_; _] -> [Phi, V3 (Scalar_Scalar_Scalar 1, F23, G3)]
| [_; _; _] -> [Phi, V4 (Scalar4 1, F234, G4)]
| _ -> []
let max_degree () = 4
let parameters () =
{ input = [G3, 1.0; G4, 1.0]; derived = []; derived_arrays = [] }
let flavor_of_string = function
| "p" -> Phi
| _ -> invalid_arg "Modellib.Phi4.flavor_of_string"
let flavor_to_string Phi = "phi"
let flavor_to_TeX Phi = "\\phi"
let flavor_symbol Phi = "phi"
let gauge_symbol () =
failwith "Modellib.Phi4.gauge_symbol: internal error"
let pdg _ = 1
let mass_symbol _ = "m"
let width_symbol _ = "w"
let constant_symbol = function
| G3 -> "g3"
| G4 -> "g4"
end
(* \thocwmodulesection{Quantum Electro Dynamics} *)
module QED =
struct
let rcs = RCS.rename rcs_file "Modellib.QED"
["QED with two leptonic flavors"]
open Coupling
let options = Options.empty
type flavor =
| Electron | Positron
| Muon | AntiMuon
| Tau | AntiTau
| Photon
let external_flavors () =
[ "Leptons", [Electron; Positron; Muon; AntiMuon; Tau; AntiTau];
"Gauge Bosons", [Photon] ]
let flavors () = ThoList.flatmap snd (external_flavors ())
type gauge = unit
type constant = Q
let lorentz = function
| Electron | Muon | Tau -> Spinor
| Positron | AntiMuon | AntiTau -> ConjSpinor
| Photon -> Vector
let color _ = Color.Singlet
let propagator = function
| Electron | Muon | Tau -> Prop_Spinor
| Positron | AntiMuon | AntiTau -> Prop_ConjSpinor
| Photon -> Prop_Feynman
let width _ = Timelike
let goldstone _ =
None
let conjugate = function
| Electron -> Positron | Positron -> Electron
| Muon -> AntiMuon | AntiMuon -> Muon
| Tau -> AntiTau | AntiTau -> Tau
| Photon -> Photon
let fermion = function
| Electron | Muon | Tau -> 1
| Positron | AntiMuon | AntiTau -> -1
| Photon -> 0
(* Taking generation numbers makes electric charge redundant. *)
module Ch = Charges.ZZ
let charges = function
| Electron -> [1; 0; 0]
| Muon -> [0; 1; 0]
| Tau -> [0; 0; 1]
| Positron -> [-1;0; 0]
| AntiMuon -> [0;-1; 0]
| AntiTau -> [0; 0;-1]
| Photon -> [0; 0; 0]
module F = Modeltools.Fusions (struct
type f = flavor
type c = constant
let compare = compare
let conjugate = conjugate
end)
let vertices () =
([(Positron, Photon, Electron), FBF (1, Psibar, V, Psi), Q;
(AntiMuon, Photon, Muon), FBF (1, Psibar, V, Psi), Q;
(AntiTau, Photon, Tau), FBF (1, Psibar, V, Psi), Q], [], [])
let table = F.of_vertices (vertices ())
let fuse2 = F.fuse2 table
let fuse3 = F.fuse3 table
let fuse = F.fuse table
let max_degree () = 3
let parameters () = { input = [Q, 1.0]; derived = []; derived_arrays = [] }
let flavor_of_string = function
| "e-" -> Electron | "e+" -> Positron
| "m-" -> Muon | "m+" -> AntiMuon
| "t-" -> Tau | "t+" -> AntiTau
| "A" -> Photon
| _ -> invalid_arg "Modellib.QED.flavor_of_string"
let flavor_to_string = function
| Electron -> "e-" | Positron -> "e+"
| Muon -> "m-" | AntiMuon -> "m+"
| Tau -> "t-" | AntiTau -> "t+"
| Photon -> "A"
let flavor_to_TeX = function
| Electron -> "e^-" | Positron -> "e^+"
| Muon -> "\\mu^-" | AntiMuon -> "\\mu^+"
| Tau -> "^\\tau^-" | AntiTau -> "\\tau+^"
| Photon -> "\\gamma"
let flavor_symbol = function
| Electron -> "ele" | Positron -> "pos"
| Muon -> "muo" | AntiMuon -> "amu"
| Tau -> "tau" | AntiTau -> "ata"
| Photon -> "gam"
let gauge_symbol () =
failwith "Modellib.QED.gauge_symbol: internal error"
let pdg = function
| Electron -> 11 | Positron -> -11
| Muon -> 13 | AntiMuon -> -13
| Tau -> 15 | AntiTau -> -15
| Photon -> 22
let mass_symbol f =
"mass(" ^ string_of_int (abs (pdg f)) ^ ")"
let width_symbol f =
"width(" ^ string_of_int (abs (pdg f)) ^ ")"
let constant_symbol = function
| Q -> "qlep"
end
(* \thocwmodulesection{Quantum Chromo Dynamics} *)
module QCD =
struct
let rcs = RCS.rename rcs_file "Modellib.QCD"
["QCD"]
open Coupling
let options = Options.empty
type flavor =
| U | Ubar | D | Dbar
| C | Cbar | S | Sbar
| T | Tbar | B | Bbar
| Gl
let external_flavors () =
[ "Quarks", [U; D; C; S; T; B; Ubar; Dbar; Cbar; Sbar; Tbar; Bbar];
"Gauge Bosons", [Gl]]
let flavors () = ThoList.flatmap snd (external_flavors ())
type gauge = unit
type constant = Gs | G2 | I_Gs
let lorentz = function
| U | D | C | S | T | B -> Spinor
| Ubar | Dbar | Cbar | Sbar | Tbar | Bbar -> ConjSpinor
| Gl -> Vector
let color = function
| U | D | C | S | T | B -> Color.SUN 3
| Ubar | Dbar | Cbar | Sbar | Tbar | Bbar -> Color.SUN (-3)
| Gl -> Color.AdjSUN 3
let propagator = function
| U | D | C | S | T | B -> Prop_Spinor
| Ubar | Dbar | Cbar | Sbar | Tbar | Bbar -> Prop_ConjSpinor
| Gl -> Prop_Feynman
let width _ = Timelike
let goldstone _ =
None
let conjugate = function
| U -> Ubar
| D -> Dbar
| C -> Cbar
| S -> Sbar
| T -> Tbar
| B -> Bbar
| Ubar -> U
| Dbar -> D
| Cbar -> C
| Sbar -> S
| Tbar -> T
| Bbar -> B
| Gl -> Gl
let fermion = function
| U | D | C | S | T | B -> 1
| Ubar | Dbar | Cbar | Sbar | Tbar | Bbar -> -1
| Gl -> 0
module Ch = Charges.ZZ
let charges = function
| D -> [1; 0; 0; 0; 0; 0]
| U -> [0; 1; 0; 0; 0; 0]
| S -> [0; 0; 1; 0; 0; 0]
| C -> [0; 0; 0; 1; 0; 0]
| B -> [0; 0; 0; 0; 1; 0]
| T -> [0; 0; 0; 0; 0; 1]
| Dbar -> [-1; 0; 0; 0; 0; 0]
| Ubar -> [0; -1; 0; 0; 0; 0]
| Sbar -> [0; 0; -1; 0; 0; 0]
| Cbar -> [0; 0; 0; -1; 0; 0]
| Bbar -> [0; 0; 0; 0; -1; 0]
| Tbar -> [0; 0; 0; 0; 0; -1]
| Gl -> [0; 0; 0; 0; 0; 0]
module F = Modeltools.Fusions (struct
type f = flavor
type c = constant
let compare = compare
let conjugate = conjugate
end)
(* This is compatible with CD+. *)
let color_current =
[ ((Dbar, Gl, D), FBF ((-1), Psibar, V, Psi), Gs);
((Ubar, Gl, U), FBF ((-1), Psibar, V, Psi), Gs);
((Cbar, Gl, C), FBF ((-1), Psibar, V, Psi), Gs);
((Sbar, Gl, S), FBF ((-1), Psibar, V, Psi), Gs);
((Tbar, Gl, T), FBF ((-1), Psibar, V, Psi), Gs);
((Bbar, Gl, B), FBF ((-1), Psibar, V, Psi), Gs)]
let three_gluon =
[ ((Gl, Gl, Gl), Gauge_Gauge_Gauge 1, I_Gs)]
let gauge4 = Vector4 [(2, C_13_42); (-1, C_12_34); (-1, C_14_23)]
let four_gluon =
[ ((Gl, Gl, Gl, Gl), gauge4, G2)]
let vertices3 =
(color_current @ three_gluon)
let vertices4 = four_gluon
let vertices () =
(vertices3, vertices4, [])
let table = F.of_vertices (vertices ())
let fuse2 = F.fuse2 table
let fuse3 = F.fuse3 table
let fuse = F.fuse table
let max_degree () = 4
let parameters () = { input = [Gs, 1.0]; derived = []; derived_arrays = [] }
let flavor_of_string = function
| "u" -> U
| "d" -> D
| "c" -> C
| "s" -> S
| "t" -> T
| "b" -> B
| "ubar" -> Ubar
| "dbar" -> Dbar
| "cbar" -> Cbar
| "sbar" -> Sbar
| "tbar" -> Tbar
| "bbar" -> Bbar
| "gl" -> Gl
| _ -> invalid_arg "Modellib.QCD.flavor_of_string"
let flavor_to_string = function
| U -> "u"
| Ubar -> "ubar"
| D -> "d"
| Dbar -> "dbar"
| C -> "c"
| Cbar -> "cbar"
| S -> "s"
| Sbar -> "sbar"
| T -> "t"
| Tbar -> "tbar"
| B -> "b"
| Bbar -> "bbar"
| Gl -> "gl"
let flavor_to_TeX = function
| U -> "u"
| Ubar -> "\bar{u}"
| D -> "d"
| Dbar -> "\bar{d}"
| C -> "c"
| Cbar -> "bar{c}"
| S -> "s"
| Sbar -> "\bar{s}"
| T -> "t"
| Tbar -> "\bar{t}"
| B -> "b"
| Bbar -> "\bar{b}"
| Gl -> "g"
let flavor_symbol = function
| U -> "u"
| Ubar -> "ubar"
| D -> "d"
| Dbar -> "dbar"
| C -> "c"
| Cbar -> "cbar"
| S -> "s"
| Sbar -> "sbar"
| T -> "t"
| Tbar -> "tbar"
| B -> "b"
| Bbar -> "bbar"
| Gl -> "gl"
let gauge_symbol () =
failwith "Modellib.QCD.gauge_symbol: internal error"
let pdg = function
| D -> 1 | Dbar -> -1
| U -> 2 | Ubar -> -2
| S -> 3 | Sbar -> -3
| C -> 4 | Cbar -> -4
| B -> 5 | Bbar -> -5
| T -> 6 | Tbar -> -6
| Gl -> 21
let mass_symbol f =
"mass(" ^ string_of_int (abs (pdg f)) ^ ")"
let width_symbol f =
"width(" ^ string_of_int (abs (pdg f)) ^ ")"
let constant_symbol = function
| I_Gs -> "(0,1)*gs"
| Gs -> "gs"
| G2 -> "gs**2"
end
(* \thocwmodulesection{Complete Minimal Standard Model (Unitarity Gauge)} *)
module type SM_flags =
sig
val higgs_triangle : bool (* $H\gamma\gamma$, $Hg\gamma$ and $Hgg$ couplings *)
val higgs_hmm : bool
val triple_anom : bool
val quartic_anom : bool
val higgs_anom : bool
val k_matrix : bool
val ckm_present : bool
val top_anom : bool
val top_anom_4f : bool
+ val tt_threshold : bool
end
module SM_no_anomalous : SM_flags =
struct
let higgs_triangle = false
let higgs_hmm = false
let triple_anom = false
let quartic_anom = false
let higgs_anom = false
let k_matrix = false
let ckm_present = false
let top_anom = false
let top_anom_4f = false
+ let tt_threshold = false
end
module SM_no_anomalous_ckm : SM_flags =
struct
let higgs_triangle = false
let higgs_hmm = false
let triple_anom = false
let quartic_anom = false
let higgs_anom = false
let k_matrix = false
let ckm_present = true
let top_anom = false
let top_anom_4f = false
+ let tt_threshold = false
end
module SM_anomalous : SM_flags =
struct
let higgs_triangle = false
let higgs_hmm = false
let triple_anom = true
let quartic_anom = true
let higgs_anom = true
let k_matrix = false
let ckm_present = false
let top_anom = false
let top_anom_4f = false
+ let tt_threshold = false
end
module SM_anomalous_ckm : SM_flags =
struct
let higgs_triangle = false
let higgs_hmm = false
let triple_anom = true
let quartic_anom = true
let higgs_anom = true
let k_matrix = false
let ckm_present = true
let top_anom = false
let top_anom_4f = false
+ let tt_threshold = false
end
module SM_k_matrix : SM_flags =
struct
let higgs_triangle = false
let higgs_hmm = false
let triple_anom = false
let quartic_anom = true
let higgs_anom = false
let k_matrix = true
let ckm_present = false
let top_anom = false
let top_anom_4f = false
+ let tt_threshold = false
end
module SM_Higgs : SM_flags =
struct
let higgs_triangle = true
let higgs_hmm = true
let triple_anom = false
let quartic_anom = false
let higgs_anom = false
let k_matrix = false
let ckm_present = false
let top_anom = false
let top_anom_4f = false
+ let tt_threshold = false
end
module SM_anomalous_top : SM_flags =
struct
let higgs_triangle = false
let higgs_hmm = false
let triple_anom = false
let quartic_anom = false
let higgs_anom = false
let k_matrix = false
let ckm_present = false
let top_anom = true
let top_anom_4f = true
+ let tt_threshold = false
+ end
+
+module SM_tt_threshold : SM_flags =
+ struct
+ let higgs_triangle = false
+ let higgs_hmm = false
+ let triple_anom = false
+ let quartic_anom = false
+ let higgs_anom = false
+ let k_matrix = false
+ let ckm_present = false
+ let top_anom = false
+ let top_anom_4f = false
+ let tt_threshold = true
end
(* \thocwmodulesection{Complete Minimal Standard Model (including some extensions)} *)
module SM (Flags : SM_flags) =
struct
let rcs = RCS.rename rcs_file "Modellib.SM"
[ "minimal electroweak standard model in unitarity gauge"]
open Coupling
let default_width = ref Timelike
let use_fudged_width = ref false
let options = Options.create
[ "constant_width", Arg.Unit (fun () -> default_width := Constant),
"use constant width (also in t-channel)";
"fudged_width", Arg.Set use_fudged_width,
"use fudge factor for charge particle width";
"custom_width", Arg.String (fun f -> default_width := Custom f),
"use custom width";
"cancel_widths", Arg.Unit (fun () -> default_width := Vanishing),
"use vanishing width"]
type f_aux_top = TTGG | TBWA | TBWZ | TTWW | BBWW | (*i top auxiliary field "flavors" *)
QGUG | QBUB | QW | DL | DR |
S1LL | S1RR | S1LR | S1RL | S8LL | S8RR | QQ38
type matter_field = L of int | N of int | U of int | D of int
type gauge_boson = Ga | Wp | Wm | Z | Gl
type other = Phip | Phim | Phi0 | H
| Aux_top of int*int*int*bool*f_aux_top (*i lorentz*color*charge*top-side*flavor *)
type flavor = M of matter_field | G of gauge_boson | O of other
let matter_field f = M f
let gauge_boson f = G f
let other f = O f
type field =
| Matter of matter_field
| Gauge of gauge_boson
| Other of other
let field = function
| M f -> Matter f
| G f -> Gauge f
| O f -> Other f
type gauge = unit
let gauge_symbol () =
failwith "Modellib.SM.gauge_symbol: internal error"
let family n = List.map matter_field [ L n; N n; U n; D n ]
let rec aux_top_flavors (f,l,co,ch) = List.append
( List.map other [ Aux_top(l,co,ch/2,true,f); Aux_top(l,co,ch/2,false,f) ] )
( if ch > 1 then List.append
( List.map other [ Aux_top(l,co,-ch/2,true,f); Aux_top(l,co,-ch/2,false,f) ] )
( aux_top_flavors (f,l,co,(ch-2)) )
else [] )
let external_flavors () =
[ "1st Generation", ThoList.flatmap family [1; -1];
"2nd Generation", ThoList.flatmap family [2; -2];
"3rd Generation", ThoList.flatmap family [3; -3];
"Gauge Bosons", List.map gauge_boson [Ga; Z; Wp; Wm; Gl];
"Higgs", List.map other [H];
"Goldstone Bosons", List.map other [Phip; Phim; Phi0] ]
let flavors () = List.append
( ThoList.flatmap snd (external_flavors ()) )
( ThoList.flatmap aux_top_flavors
[ (TTGG,2,1,1); (TBWA,2,0,2); (TBWZ,2,0,2); (TTWW,2,0,1); (BBWW,2,0,1);
(QGUG,1,1,1); (QBUB,1,0,1); (QW,1,0,3); (DL,0,0,3); (DR,0,0,3);
(S1LL,0,0,3); (S1RR,0,0,3); (S1LR,0,0,3); (S1RL,0,0,3);
(S8LL,0,1,3); (S8RR,0,1,3); (QQ38,1,1,3) ] )
let spinor n =
if n >= 0 then
Spinor
else
ConjSpinor
let lorentz_aux = function
| 2 -> Tensor_1
| 1 -> Vector
| 0 -> Scalar
| _ -> invalid_arg ("SM.lorentz_aux: wrong value")
let lorentz = function
| M f ->
begin match f with
| L n -> spinor n | N n -> spinor n
| U n -> spinor n | D n -> spinor n
end
| G f ->
begin match f with
| Ga | Gl -> Vector
| Wp | Wm | Z -> Massive_Vector
end
| O f ->
begin match f with
| Aux_top (l,_,_,_,_) -> lorentz_aux l
| _ -> Scalar
end
let color = function
| M (U n) -> Color.SUN (if n > 0 then 3 else -3)
| M (D n) -> Color.SUN (if n > 0 then 3 else -3)
| G Gl -> Color.AdjSUN 3
| O (Aux_top (_,co,_,_,_)) -> if co == 0 then Color.Singlet else Color.AdjSUN 3
| _ -> Color.Singlet
let prop_spinor n =
if n >= 0 then
Prop_Spinor
else
Prop_ConjSpinor
let prop_aux = function
| 2 -> Aux_Tensor_1
| 1 -> Aux_Vector
| 0 -> Aux_Scalar
| _ -> invalid_arg ("SM.prop_aux: wrong value")
let propagator = function
| M f ->
begin match f with
| L n -> prop_spinor n | N n -> prop_spinor n
| U n -> prop_spinor n | D n -> prop_spinor n
end
| G f ->
begin match f with
| Ga | Gl -> Prop_Feynman
| Wp | Wm | Z -> Prop_Unitarity
end
| O f ->
begin match f with
| Phip | Phim | Phi0 -> Only_Insertion
| H -> Prop_Scalar
| Aux_top (l,_,_,_,_) -> prop_aux l
end
(* Optionally, ask for the fudge factor treatment for the widths of
charged particles. Currently, this only applies to $W^\pm$ and top. *)
let width f =
if !use_fudged_width then
match f with
| G Wp | G Wm | M (U 3) | M (U (-3)) -> Fudged
| _ -> !default_width
else
!default_width
let goldstone = function
| G f ->
begin match f with
| Wp -> Some (O Phip, Coupling.Const 1)
| Wm -> Some (O Phim, Coupling.Const 1)
| Z -> Some (O Phi0, Coupling.Const 1)
| _ -> None
end
| _ -> None
let conjugate = function
| M f ->
M (begin match f with
| L n -> L (-n) | N n -> N (-n)
| U n -> U (-n) | D n -> D (-n)
end)
| G f ->
G (begin match f with
| Gl -> Gl | Ga -> Ga | Z -> Z
| Wp -> Wm | Wm -> Wp
end)
| O f ->
O (begin match f with
| Phip -> Phim | Phim -> Phip | Phi0 -> Phi0
| H -> H
| Aux_top (l,co,ch,n,f) -> Aux_top (l,co,(-ch),(not n),f)
end)
let fermion = function
| M f ->
begin match f with
| L n -> if n > 0 then 1 else -1
| N n -> if n > 0 then 1 else -1
| U n -> if n > 0 then 1 else -1
| D n -> if n > 0 then 1 else -1
end
| G f ->
begin match f with
| Gl | Ga | Z | Wp | Wm -> 0
end
| O _ -> 0
(* Electrical charge, lepton number, baryon number. We could avoid the
rationals altogether by multiplying the first and last by 3 \ldots *)
module Ch = Charges.QQ
let ( // ) = Algebra.Small_Rational.make
let generation' = function
| 1 -> [ 1//1; 0//1; 0//1]
| 2 -> [ 0//1; 1//1; 0//1]
| 3 -> [ 0//1; 0//1; 1//1]
| -1 -> [-1//1; 0//1; 0//1]
| -2 -> [ 0//1; -1//1; 0//1]
| -3 -> [ 0//1; 0//1; -1//1]
| n -> invalid_arg ("SM.generation': " ^ string_of_int n)
let generation f =
if Flags.ckm_present then
[]
else
match f with
| M (L n | N n | U n | D n) -> generation' n
| G _ | O _ -> [0//1; 0//1; 0//1]
let charge = function
| M f ->
begin match f with
| L n -> if n > 0 then -1//1 else 1//1
| N n -> 0//1
| U n -> if n > 0 then 2//3 else -2//3
| D n -> if n > 0 then -1//3 else 1//3
end
| G f ->
begin match f with
| Gl | Ga | Z -> 0//1
| Wp -> 1//1
| Wm -> -1//1
end
| O f ->
begin match f with
| H | Phi0 -> 0//1
| Phip -> 1//1
| Phim -> -1//1
| Aux_top (_,_,ch,_,_) -> ch//1
end
let lepton = function
| M f ->
begin match f with
| L n | N n -> if n > 0 then 1//1 else -1//1
| U _ | D _ -> 0//1
end
| G _ | O _ -> 0//1
let baryon = function
| M f ->
begin match f with
| L _ | N _ -> 0//1
| U n | D n -> if n > 0 then 1//1 else -1//1
end
| G _ | O _ -> 0//1
let charges f =
[ charge f; lepton f; baryon f] @ generation f
type constant =
| Unit | Half | Pi | Alpha_QED | Sin2thw
| Sinthw | Costhw | E | G_weak | I_G_weak | Vev
| Q_lepton | Q_up | Q_down | G_CC | G_CCQ of int*int
| G_NC_neutrino | G_NC_lepton | G_NC_up | G_NC_down
| G_TVA_ttA | G_TVA_bbA
| G_VLR_ttZ | G_TVA_ttZ | G_TVA_bbZ
| VA_ILC_ttA | VA_ILC_ttZ
| G_VLR_btW | G_VLR_tbW
| G_TLR_btW | G_TRL_tbW
| G_TLR_btWZ | G_TRL_tbWZ
| G_TLR_btWA | G_TRL_tbWA
| G_TVA_ttWW | G_TVA_bbWW
| G_TVA_ttG | G_TVA_ttGG
| G_SP_ttH
| G_VLR_qGuG | G_VLR_qBuB
| G_VLR_qBuB_u | G_VLR_qBuB_d | G_VLR_qBuB_e | G_VL_qBuB_n
| G_VL_qW | G_VL_qW_u | G_VL_qW_d
| G_SL_DttR | G_SR_DttR | G_SL_DttL | G_SLR_DbtR | G_SL_DbtL
| C_S1RR_bt | C_S1RR_tb | C_S1LL_bt | C_S1LL_tb
| C_S1RL_bt | C_S1RL_tb | C_S1LR_bt | C_S1LR_tb
| C_S8RR_bt | C_S8RR_tb | C_S8LL_bt | C_S8LL_tb
| C_qq38
| I_Q_W | I_G_ZWW
| G_WWWW | G_ZZWW | G_AZWW | G_AAWW
| I_G1_AWW | I_G1_ZWW
| I_G1_plus_kappa_plus_G4_AWW
| I_G1_plus_kappa_plus_G4_ZWW
| I_G1_plus_kappa_minus_G4_AWW
| I_G1_plus_kappa_minus_G4_ZWW
| I_G1_minus_kappa_plus_G4_AWW
| I_G1_minus_kappa_plus_G4_ZWW
| I_G1_minus_kappa_minus_G4_AWW
| I_G1_minus_kappa_minus_G4_ZWW
| I_lambda_AWW | I_lambda_ZWW
| G5_AWW | G5_ZWW
| I_kappa5_AWW | I_kappa5_ZWW
| I_lambda5_AWW | I_lambda5_ZWW
| Alpha_WWWW0 | Alpha_ZZWW1 | Alpha_WWWW2
| Alpha_ZZWW0 | Alpha_ZZZZ
| D_Alpha_ZZWW0_S | D_Alpha_ZZWW0_T | D_Alpha_ZZWW1_S
| D_Alpha_ZZWW1_T | D_Alpha_ZZWW1_U | D_Alpha_WWWW0_S
| D_Alpha_WWWW0_T | D_Alpha_WWWW0_U | D_Alpha_WWWW2_S
| D_Alpha_WWWW2_T | D_Alpha_ZZZZ_S | D_Alpha_ZZZZ_T
| G_HWW | G_HHWW | G_HZZ | G_HHZZ
| G_Htt | G_Hbb | G_Hcc | G_Hmm | G_Htautau | G_H3 | G_H4
| G_HGaZ | G_HGaGa | G_Hgg
| G_HGaZ_anom | G_HGaGa_anom | G_HZZ_anom | G_HWW_anom
| G_HGaZ_u | G_HZZ_u | G_HWW_u
| Gs | I_Gs | G2
| Mass of flavor | Width of flavor
| K_Matrix_Coeff of int | K_Matrix_Pole of int
(* \begin{dubious}
The current abstract syntax for parameter dependencies is admittedly
tedious. Later, there will be a parser for a convenient concrete syntax
as a part of a concrete syntax for models. But as these examples show,
it should include simple functions.
\end{dubious} *)
(* \begin{subequations}
\begin{align}
\alpha_{\text{QED}} &= \frac{1}{137.0359895} \\
\sin^2\theta_w &= 0.23124
\end{align}
\end{subequations} *)
let input_parameters =
[ Alpha_QED, 1. /. 137.0359895;
Sin2thw, 0.23124;
Mass (G Z), 91.187;
Mass (M (N 1)), 0.0; Mass (M (L 1)), 0.51099907e-3;
Mass (M (N 2)), 0.0; Mass (M (L 2)), 0.105658389;
Mass (M (N 3)), 0.0; Mass (M (L 3)), 1.77705;
Mass (M (U 1)), 5.0e-3; Mass (M (D 1)), 3.0e-3;
Mass (M (U 2)), 1.2; Mass (M (D 2)), 0.1;
Mass (M (U 3)), 174.0; Mass (M (D 3)), 4.2 ]
(* \begin{subequations}
\begin{align}
e &= \sqrt{4\pi\alpha} \\
\sin\theta_w &= \sqrt{\sin^2\theta_w} \\
\cos\theta_w &= \sqrt{1-\sin^2\theta_w} \\
g &= \frac{e}{\sin\theta_w} \\
m_W &= \cos\theta_w m_Z \\
v &= \frac{2m_W}{g} \\
g_{CC} =
-\frac{g}{2\sqrt2} &= -\frac{e}{2\sqrt2\sin\theta_w} \\
Q_{\text{lepton}} =
-q_{\text{lepton}}e &= e \\
Q_{\text{up}} =
-q_{\text{up}}e &= -\frac{2}{3}e \\
Q_{\text{down}} =
-q_{\text{down}}e &= \frac{1}{3}e \\
\ii q_We =
\ii g_{\gamma WW} &= \ii e \\
\ii g_{ZWW} &= \ii g \cos\theta_w \\
\ii g_{WWW} &= \ii g
\end{align}
\end{subequations} *)
(* \begin{dubious}
\ldots{} to be continued \ldots{}
The quartic couplings can't be correct, because the dimensions are wrong!
\begin{subequations}
\begin{align}
g_{HWW} &= g m_W = 2 \frac{m_W^2}{v}\\
g_{HHWW} &= 2 \frac{m_W^2}{v^2} = \frac{g^2}{2} \\
g_{HZZ} &= \frac{g}{\cos\theta_w}m_Z \\
g_{HHZZ} &= 2 \frac{m_Z^2}{v^2} = \frac{g^2}{2\cos\theta_w} \\
g_{Htt} &= \lambda_t \\
g_{Hbb} &= \lambda_b=\frac{m_b}{m_t}\lambda_t \\
g_{H^3} &= - \frac{3g}{2}\frac{m_H^2}{m_W} = - 3 \frac{m_H^2}{v}
g_{H^4} &= - \frac{3g^2}{4} \frac{m_W^2}{v^2} = -3 \frac{m_H^2}{v^2}
\end{align}
\end{subequations}
\end{dubious} *)
let derived_parameters =
[ Real E, Sqrt (Prod [Const 4; Atom Pi; Atom Alpha_QED]);
Real Sinthw, Sqrt (Atom Sin2thw);
Real Costhw, Sqrt (Diff (Const 1, Atom Sin2thw));
Real G_weak, Quot (Atom E, Atom Sinthw);
Real (Mass (G Wp)), Prod [Atom Costhw; Atom (Mass (G Z))];
Real Vev, Quot (Prod [Const 2; Atom (Mass (G Wp))], Atom G_weak);
Real Q_lepton, Atom E;
Real Q_up, Prod [Quot (Const (-2), Const 3); Atom E];
Real Q_down, Prod [Quot (Const 1, Const 3); Atom E];
Real G_CC, Neg (Quot (Atom G_weak, Prod [Const 2; Sqrt (Const 2)]));
Complex I_Q_W, Prod [I; Atom E];
Complex I_G_weak, Prod [I; Atom G_weak];
Complex I_G_ZWW, Prod [I; Atom G_weak; Atom Costhw] ]
(* \begin{equation}
- \frac{g}{2\cos\theta_w}
\end{equation} *)
let g_over_2_costh =
Quot (Neg (Atom G_weak), Prod [Const 2; Atom Costhw])
(* \begin{subequations}
\begin{align}
- \frac{g}{2\cos\theta_w} g_V
&= - \frac{g}{2\cos\theta_w} (T_3 - 2 q \sin^2\theta_w) \\
- \frac{g}{2\cos\theta_w} g_A
&= - \frac{g}{2\cos\theta_w} T_3
\end{align}
\end{subequations} *)
let nc_coupling c t3 q =
(Real_Array c,
[Prod [g_over_2_costh; Diff (t3, Prod [Const 2; q; Atom Sin2thw])];
Prod [g_over_2_costh; t3]])
let half = Quot (Const 1, Const 2)
let derived_parameter_arrays =
[ nc_coupling G_NC_neutrino half (Const 0);
nc_coupling G_NC_lepton (Neg half) (Const (-1));
nc_coupling G_NC_up half (Quot (Const 2, Const 3));
nc_coupling G_NC_down (Neg half) (Quot (Const (-1), Const 3)) ]
let parameters () =
{ input = input_parameters;
derived = derived_parameters;
derived_arrays = derived_parameter_arrays }
module F = Modeltools.Fusions (struct
type f = flavor
type c = constant
let compare = compare
let conjugate = conjugate
end)
(* \begin{equation}
\mathcal{L}_{\textrm{EM}} =
- e \sum_i q_i \bar\psi_i\fmslash{A}\psi_i
\end{equation} *)
let mgm ((m1, g, m2), fbf, c) = ((M m1, G g, M m2), fbf, c)
let mom ((m1, o, m2), fbf, c) = ((M m1, O o, M m2), fbf, c)
let electromagnetic_currents n =
List.map mgm
[ ((L (-n), Ga, L n), FBF (1, Psibar, V, Psi), Q_lepton);
((U (-n), Ga, U n), FBF (1, Psibar, V, Psi), Q_up);
((D (-n), Ga, D n), FBF (1, Psibar, V, Psi), Q_down) ]
let color_currents n =
List.map mgm
[ ((U (-n), Gl, U n), FBF ((-1), Psibar, V, Psi), Gs);
((D (-n), Gl, D n), FBF ((-1), Psibar, V, Psi), Gs) ]
(* \begin{equation}
\mathcal{L}_{\textrm{NC}} =
- \frac{g}{2\cos\theta_W}
\sum_i \bar\psi_i\fmslash{Z}(g_V^i-g_A^i\gamma_5)\psi_i
\end{equation} *)
let neutral_currents n =
List.map mgm
[ ((L (-n), Z, L n), FBF (1, Psibar, VA, Psi), G_NC_lepton);
((N (-n), Z, N n), FBF (1, Psibar, VA, Psi), G_NC_neutrino);
((U (-n), Z, U n), FBF (1, Psibar, VA, Psi), G_NC_up);
((D (-n), Z, D n), FBF (1, Psibar, VA, Psi), G_NC_down) ]
(* \begin{equation}
\mathcal{L}_{\textrm{CC}} =
- \frac{g}{2\sqrt2} \sum_i \bar\psi_i
(T^+\fmslash{W}^+ + T^-\fmslash{W}^-)(1-\gamma_5)\psi_i
\end{equation} *)
let charged_currents' n =
List.map mgm
[ ((L (-n), Wm, N n), FBF (1, Psibar, VL, Psi), G_CC);
((N (-n), Wp, L n), FBF (1, Psibar, VL, Psi), G_CC) ]
let charged_currents'' n =
List.map mgm
[ ((D (-n), Wm, U n), FBF (1, Psibar, VL, Psi), G_CC);
((U (-n), Wp, D n), FBF (1, Psibar, VL, Psi), G_CC) ]
let charged_currents_triv =
ThoList.flatmap charged_currents' [1;2;3] @
ThoList.flatmap charged_currents'' [1;2;3]
let charged_currents_ckm =
let charged_currents_2 n1 n2 =
List.map mgm
[ ((D (-n1), Wm, U n2), FBF (1, Psibar, VL, Psi), G_CCQ (n2,n1));
((U (-n1), Wp, D n2), FBF (1, Psibar, VL, Psi), G_CCQ (n1,n2)) ] in
ThoList.flatmap charged_currents' [1;2;3] @
List.flatten (Product.list2 charged_currents_2 [1;2;3] [1;2;3])
let yukawa =
[ ((M (U (-3)), O H, M (U 3)), FBF (1, Psibar, S, Psi), G_Htt);
((M (D (-3)), O H, M (D 3)), FBF (1, Psibar, S, Psi), G_Hbb);
((M (U (-2)), O H, M (U 2)), FBF (1, Psibar, S, Psi), G_Hcc);
((M (L (-3)), O H, M (L 3)), FBF (1, Psibar, S, Psi), G_Htautau) ] @
if Flags.higgs_hmm then
[ ((M (L (-2)), O H, M (L 2)), FBF (1, Psibar, S, Psi), G_Hmm)]
else
[]
(* \begin{equation}
\mathcal{L}_{\textrm{TGC}} =
- e \partial_\mu A_\nu W_+^\mu W_-^\nu + \ldots
- e \cot\theta_w \partial_\mu Z_\nu W_+^\mu W_-^\nu + \ldots
\end{equation} *)
let tgc ((g1, g2, g3), t, c) = ((G g1, G g2, G g3), t, c)
let standard_triple_gauge =
List.map tgc
[ ((Ga, Wm, Wp), Gauge_Gauge_Gauge 1, I_Q_W);
((Z, Wm, Wp), Gauge_Gauge_Gauge 1, I_G_ZWW);
((Gl, Gl, Gl), Gauge_Gauge_Gauge 1, I_Gs)]
(* \begin{multline}
\mathcal{L}_{\textrm{TGC}}(g_1,\kappa)
= g_1 \mathcal{L}_T(V,W^+,W^-) \\
+ \frac{\kappa+g_1}{2} \Bigl(\mathcal{L}_T(W^-,V,W^+)
- \mathcal{L}_T(W^+,V,W^-)\Bigr)\\
+ \frac{\kappa-g_1}{2} \Bigl(\mathcal{L}_L(W^-,V,W^+)
- \mathcal{L}_T(W^+,V,W^-)\Bigr)
\end{multline} *)
(* \begin{dubious}
The whole thing in the LEP2 workshop notation:
\begin{multline}
\ii\mathcal{L}_{\textrm{TGC},V} / g_{WWV} = \\
g_1^V V^\mu (W^-_{\mu\nu}W^{+,\nu}-W^+_{\mu\nu}W^{-,\nu})
+ \kappa_V W^+_\mu W^-_\nu V^{\mu\nu}
+ \frac{\lambda_V}{m_W^2} V_{\mu\nu}
W^-_{\rho\mu} W^{+,\hphantom{\nu}\rho}_{\hphantom{+,}\nu} \\
+ \ii g_5^V \epsilon_{\mu\nu\rho\sigma}
\left( (\partial^\rho W^{-,\mu}) W^{+,\nu}
- W^{-,\mu}(\partial^\rho W^{+,\nu}) \right) V^\sigma \\
+ \ii g_4^V W^-_\mu W^+_\nu (\partial^\mu V^\nu + \partial^\nu V^\mu)
- \frac{\tilde\kappa_V}{2} W^-_\mu W^+_\nu \epsilon^{\mu\nu\rho\sigma}
V_{\rho\sigma}
- \frac{\tilde\lambda_V}{2m_W^2}
W^-_{\rho\mu} W^{+,\mu}_{\hphantom{+,\mu}\nu} \epsilon^{\nu\rho\alpha\beta}
V_{\alpha\beta}
\end{multline}
using the conventions of Itzykson and Zuber with $\epsilon^{0123} = +1$.
\end{dubious} *)
(* \begin{dubious}
This is equivalent to the notation of Hagiwara et al.~\cite{HPZH87}, if we
remember that they have opposite signs for~$g_{WWV}$:
\begin{multline}
\mathcal{L}_{WWV} / (-g_{WWV}) = \\
\ii g_1^V \left( W^\dagger_{\mu\nu} W^\mu
- W^\dagger_\mu W^\mu_{\hphantom{\mu}\nu} \right) V^\nu
+ \ii \kappa_V W^\dagger_\mu W_\nu V^{\mu\nu}
+ \ii \frac{\lambda_V}{m_W^2}
W^\dagger_{\lambda\mu} W^\mu_{\hphantom{\mu}\nu} V^{\nu\lambda} \\
- g_4^V W^\dagger_\mu W_\nu
\left(\partial^\mu V^\nu + \partial^\nu V^\mu \right)
+ g_5^V \epsilon^{\mu\nu\lambda\sigma}
\left( W^\dagger_\mu \stackrel{\leftrightarrow}{\partial_\lambda}
W_\nu \right) V_\sigma\\
+ \ii \tilde\kappa_V W^\dagger_\mu W_\nu \tilde{V}^{\mu\nu}
+ \ii\frac{\tilde\lambda_V}{m_W^2}
W^\dagger_{\lambda\mu} W^\mu_{\hphantom{\mu}\nu} \tilde{V}^{\nu\lambda}
\end{multline}
Here $V^\mu$ stands for either the photon or the~$Z$ field, $W^\mu$ is the
$W^-$ field, $W_{\mu\nu} = \partial_\mu W_\nu - \partial_\nu W_\mu$,
$V_{\mu\nu} = \partial_\mu V_\nu - \partial_\nu V_\mu$, and
$\tilde{V}_{\mu\nu} = \frac{1}{2} \epsilon_{\mu\nu\lambda\sigma}
V^{\lambda\sigma}$.
\end{dubious} *)
let anomalous_triple_gauge =
List.map tgc
[ ((Ga, Wm, Wp), Dim4_Vector_Vector_Vector_T (-1),
I_G1_AWW);
((Z, Wm, Wp), Dim4_Vector_Vector_Vector_T (-1),
I_G1_ZWW);
((Wm, Ga, Wp), Dim4_Vector_Vector_Vector_T 1,
I_G1_plus_kappa_minus_G4_AWW);
((Wm, Z, Wp), Dim4_Vector_Vector_Vector_T 1,
I_G1_plus_kappa_minus_G4_ZWW);
((Wp, Ga, Wm), Dim4_Vector_Vector_Vector_T (-1),
I_G1_plus_kappa_plus_G4_AWW);
((Wp, Z, Wm), Dim4_Vector_Vector_Vector_T (-1),
I_G1_plus_kappa_plus_G4_ZWW);
((Wm, Ga, Wp), Dim4_Vector_Vector_Vector_L (-1),
I_G1_minus_kappa_plus_G4_AWW);
((Wm, Z, Wp), Dim4_Vector_Vector_Vector_L (-1),
I_G1_minus_kappa_plus_G4_ZWW);
((Wp, Ga, Wm), Dim4_Vector_Vector_Vector_L 1,
I_G1_minus_kappa_minus_G4_AWW);
((Wp, Z, Wm), Dim4_Vector_Vector_Vector_L 1,
I_G1_minus_kappa_minus_G4_ZWW);
((Ga, Wm, Wp), Dim4_Vector_Vector_Vector_L5 (-1),
I_kappa5_AWW);
((Z, Wm, Wp), Dim4_Vector_Vector_Vector_L5 (-1),
I_kappa5_ZWW);
((Ga, Wm, Wp), Dim4_Vector_Vector_Vector_T5 (-1),
G5_AWW);
((Z, Wm, Wp), Dim4_Vector_Vector_Vector_T5 (-1),
G5_ZWW);
((Ga, Wp, Wm), Dim6_Gauge_Gauge_Gauge (-1),
I_lambda_AWW);
((Z, Wp, Wm), Dim6_Gauge_Gauge_Gauge (-1),
I_lambda_ZWW);
((Ga, Wp, Wm), Dim6_Gauge_Gauge_Gauge_5 (-1),
I_lambda5_AWW);
((Z, Wp, Wm), Dim6_Gauge_Gauge_Gauge_5 (-1),
I_lambda5_ZWW) ]
let triple_gauge =
if Flags.triple_anom then
anomalous_triple_gauge
else
standard_triple_gauge
(* \begin{equation}
\mathcal{L}_{\textrm{QGC}} =
- g^2 W_{+,\mu} W_{-,\nu} W_+^\mu W_-^\nu + \ldots
\end{equation} *)
(* Actually, quartic gauge couplings are a little bit more straightforward
using auxiliary fields. Here we have to impose the antisymmetry manually:
\begin{subequations}
\begin{multline}
(W^{+,\mu}_1 W^{-,\nu}_2 - W^{+,\nu}_1 W^{-,\mu}_2)
(W^+_{3,\mu} W^-_{4,\nu} - W^+_{3,\nu} W^-_{4,\mu}) \\
= 2(W^+_1W^+_3)(W^-_2W^-_4) - 2(W^+_1W^-_4)(W^-_2W^+_3)
\end{multline}
also ($V$ can be $A$ or $Z$)
\begin{multline}
(W^{+,\mu}_1 V^\nu_2 - W^{+,\nu}_1 V^\mu_2)
(W^-_{3,\mu} V_{4,\nu} - W^-_{3,\nu} V_{4,\mu}) \\
= 2(W^+_1W^-_3)(V_2V_4) - 2(W^+_1V_4)(V_2W^-_3)
\end{multline}
\end{subequations} *)
(* \begin{subequations}
\begin{multline}
W^{+,\mu} W^{-,\nu} W^+_\mu W^-_\nu
\end{multline}
\end{subequations} *)
let qgc ((g1, g2, g3, g4), t, c) = ((G g1, G g2, G g3, G g4), t, c)
let gauge4 = Vector4 [(2, C_13_42); (-1, C_12_34); (-1, C_14_23)]
let minus_gauge4 = Vector4 [(-2, C_13_42); (1, C_12_34); (1, C_14_23)]
let standard_quartic_gauge =
List.map qgc
[ (Wm, Wp, Wm, Wp), gauge4, G_WWWW;
(Wm, Z, Wp, Z), minus_gauge4, G_ZZWW;
(Wm, Z, Wp, Ga), minus_gauge4, G_AZWW;
(Wm, Ga, Wp, Ga), minus_gauge4, G_AAWW;
(Gl, Gl, Gl, Gl), gauge4, G2 ]
(* \begin{subequations}
\begin{align}
\mathcal{L}_4
&= \alpha_4 \left( \frac{g^4}{2}\left( (W^+_\mu W^{-,\mu})^2
+ W^+_\mu W^{+,\mu} W^-_\mu W^{-,\mu}
\right)\right.\notag \\
&\qquad\qquad\qquad \left.
+ \frac{g^4}{\cos^2\theta_w} W^+_\mu Z^\mu W^-_\nu Z^\nu
+ \frac{g^4}{4\cos^4\theta_w} (Z_\mu Z^\mu)^2 \right) \\
\mathcal{L}_5
&= \alpha_5 \left( g^4 (W^+_\mu W^{-,\mu})^2
+ \frac{g^4}{\cos^2\theta_w} W^+_\mu W^{-,\mu} Z_\nu Z^\nu
+ \frac{g^4}{4\cos^4\theta_w} (Z_\mu Z^\mu)^2 \right)
\end{align}
\end{subequations}
or
\begin{multline}
\mathcal{L}_4 + \mathcal{L}_5
= (\alpha_4+2\alpha_5) g^4 \frac{1}{2} (W^+_\mu W^{-,\mu})^2 \\
+ 2\alpha_4 g^4 \frac{1}{4} W^+_\mu W^{+,\mu} W^-_\mu W^{-,\mu}
+ \alpha_4 \frac{g^4}{\cos^2\theta_w} W^+_\mu Z^\mu W^-_\nu Z^\nu \\
+ 2\alpha_5 \frac{g^4}{\cos^2\theta_w} \frac{1}{2} W^+_\mu W^{-,\mu} Z_\nu Z^\nu
+ (2\alpha_4 + 2\alpha_5) \frac{g^4}{\cos^4\theta_w} \frac{1}{8} (Z_\mu Z^\mu)^2
\end{multline}
and therefore
\begin{subequations}
\begin{align}
\alpha_{(WW)_0} &= (\alpha_4+2\alpha_5) g^4 \\
\alpha_{(WW)_2} &= 2\alpha_4 g^4 \\
\alpha_{(WZ)_0} &= 2\alpha_5 \frac{g^4}{\cos^2\theta_w} \\
\alpha_{(WZ)_1} &= \alpha_4 \frac{g^4}{\cos^2\theta_w} \\
\alpha_{ZZ} &= (2\alpha_4 + 2\alpha_5) \frac{g^4}{\cos^4\theta_w}
\end{align}
\end{subequations} *)
let anomalous_quartic_gauge =
if Flags.quartic_anom then
List.map qgc
[ ((Wm, Wm, Wp, Wp),
Vector4 [(1, C_13_42); (1, C_14_23)], Alpha_WWWW0);
((Wm, Wm, Wp, Wp),
Vector4 [1, C_12_34], Alpha_WWWW2);
((Wm, Wp, Z, Z),
Vector4 [1, C_12_34], Alpha_ZZWW0);
((Wm, Wp, Z, Z),
Vector4 [(1, C_13_42); (1, C_14_23)], Alpha_ZZWW1);
((Z, Z, Z, Z),
Vector4 [(1, C_12_34); (1, C_13_42); (1, C_14_23)], Alpha_ZZZZ) ]
else
[]
(* In any diagonal channel~$\chi$, the scattering amplitude~$a_\chi(s)$ is
unitary iff\footnote{%
Trivial proof:
\begin{equation}
-1 = \textrm{Im}\left(\frac{1}{a_\chi(s)}\right)
= \frac{\textrm{Im}(a_\chi^*(s))}{|a_\chi(s)|^2}
= - \frac{\textrm{Im}(a_\chi(s))}{|a_\chi(s)|^2}
\end{equation}
i.\,e.~$\textrm{Im}(a_\chi(s)) = |a_\chi(s)|^2$.}
\begin{equation}
\textrm{Im}\left(\frac{1}{a_\chi(s)}\right) = -1
\end{equation}
For a real perturbative scattering amplitude~$r_\chi(s)$ this can be
enforced easily--and arbitrarily--by
\begin{equation}
\frac{1}{a_\chi(s)} = \frac{1}{r_\chi(s)} - \mathrm{i}
\end{equation}
*)
let k_matrix_quartic_gauge =
if Flags.k_matrix then
List.map qgc
[ ((Wm, Wp, Wm, Wp), Vector4_K_Matrix_jr (0,
[(1, C_12_34)]), D_Alpha_WWWW0_S);
((Wm, Wp, Wm, Wp), Vector4_K_Matrix_jr (0,
[(1, C_14_23)]), D_Alpha_WWWW0_T);
((Wm, Wp, Wm, Wp), Vector4_K_Matrix_jr (0,
[(1, C_13_42)]), D_Alpha_WWWW0_U);
((Wp, Wm, Wp, Wm), Vector4_K_Matrix_jr (0,
[(1, C_12_34)]), D_Alpha_WWWW0_S);
((Wp, Wm, Wp, Wm), Vector4_K_Matrix_jr (0,
[(1, C_14_23)]), D_Alpha_WWWW0_T);
((Wp, Wm, Wp, Wm), Vector4_K_Matrix_jr (0,
[(1, C_13_42)]), D_Alpha_WWWW0_U);
((Wm, Wm, Wp, Wp), Vector4_K_Matrix_jr (0,
[(1, C_12_34)]), D_Alpha_WWWW2_S);
((Wm, Wm, Wp, Wp), Vector4_K_Matrix_jr (0,
[(1, C_13_42); (1, C_14_23)]), D_Alpha_WWWW2_T);
((Wm, Wp, Z, Z), Vector4_K_Matrix_jr (0,
[(1, C_12_34)]), D_Alpha_ZZWW0_S);
((Wm, Wp, Z, Z), Vector4_K_Matrix_jr (0,
[(1, C_13_42); (1, C_14_23)]), D_Alpha_ZZWW0_T);
((Wm, Z, Wp, Z), Vector4_K_Matrix_jr (0,
[(1, C_12_34)]), D_Alpha_ZZWW1_S);
((Wm, Z, Wp, Z), Vector4_K_Matrix_jr (0,
[(1, C_13_42)]), D_Alpha_ZZWW1_T);
((Wm, Z, Wp, Z), Vector4_K_Matrix_jr (0,
[(1, C_14_23)]), D_Alpha_ZZWW1_U);
((Wp, Z, Z, Wm), Vector4_K_Matrix_jr (1,
[(1, C_12_34)]), D_Alpha_ZZWW1_S);
((Wp, Z, Z, Wm), Vector4_K_Matrix_jr (1,
[(1, C_13_42)]), D_Alpha_ZZWW1_U);
((Wp, Z, Z, Wm), Vector4_K_Matrix_jr (1,
[(1, C_14_23)]), D_Alpha_ZZWW1_T);
((Z, Wp, Wm, Z), Vector4_K_Matrix_jr (2,
[(1, C_12_34)]), D_Alpha_ZZWW1_S);
((Z, Wp, Wm, Z), Vector4_K_Matrix_jr (2,
[(1, C_13_42)]), D_Alpha_ZZWW1_U);
((Z, Wp, Wm, Z), Vector4_K_Matrix_jr (2,
[(1, C_14_23)]), D_Alpha_ZZWW1_T);
((Z, Z, Z, Z), Vector4_K_Matrix_jr (0,
[(1, C_12_34)]), D_Alpha_ZZZZ_S);
((Z, Z, Z, Z), Vector4_K_Matrix_jr (0,
[(1, C_13_42); (1, C_14_23)]), D_Alpha_ZZZZ_T);
((Z, Z, Z, Z), Vector4_K_Matrix_jr (3,
[(1, C_14_23)]), D_Alpha_ZZZZ_S);
((Z, Z, Z, Z), Vector4_K_Matrix_jr (3,
[(1, C_13_42); (1, C_12_34)]), D_Alpha_ZZZZ_T)]
else
[]
(*i Thorsten's original implementation of the K matrix, which we keep since
it still might be usefull for the future.
let k_matrix_quartic_gauge =
if Flags.k_matrix then
List.map qgc
[ ((Wm, Wp, Wm, Wp), Vector4_K_Matrix_tho (0, [K_Matrix_Coeff 0,
K_Matrix_Pole 0]), Alpha_WWWW0);
((Wm, Wm, Wp, Wp), Vector4_K_Matrix_tho (0, [K_Matrix_Coeff 2,
K_Matrix_Pole 2]), Alpha_WWWW2);
((Wm, Wp, Z, Z), Vector4_K_Matrix_tho (0, [(K_Matrix_Coeff 0,
K_Matrix_Pole 0); (K_Matrix_Coeff 2,
K_Matrix_Pole 2)]), Alpha_ZZWW0);
((Wm, Z, Wp, Z), Vector4_K_Matrix_tho (0, [K_Matrix_Coeff 1,
K_Matrix_Pole 1]), Alpha_ZZWW1);
((Z, Z, Z, Z), Vector4_K_Matrix_tho (0, [K_Matrix_Coeff 0,
K_Matrix_Pole 0]), Alpha_ZZZZ) ]
else
[]
i*)
let quartic_gauge =
standard_quartic_gauge @ anomalous_quartic_gauge @ k_matrix_quartic_gauge
let standard_gauge_higgs =
[ ((O H, G Wp, G Wm), Scalar_Vector_Vector 1, G_HWW);
((O H, G Z, G Z), Scalar_Vector_Vector 1, G_HZZ) ]
let standard_gauge_higgs4 =
[ (O H, O H, G Wp, G Wm), Scalar2_Vector2 1, G_HHWW;
(O H, O H, G Z, G Z), Scalar2_Vector2 1, G_HHZZ ]
let standard_higgs =
[ (O H, O H, O H), Scalar_Scalar_Scalar 1, G_H3 ]
let standard_higgs4 =
[ (O H, O H, O H, O H), Scalar4 1, G_H4 ]
(* WK's couplings (apparently, he still intends to divide by
$\Lambda^2_{\text{EWSB}}=16\pi^2v_{\mathrm{F}}^2$):
\begin{subequations}
\begin{align}
\mathcal{L}^{\tau}_4 &=
\left\lbrack (\partial_{\mu}H)(\partial^{\mu}H)
+ \frac{g^2v_{\mathrm{F}}^2}{4} V_{\mu} V^{\mu} \right\rbrack^2 \\
\mathcal{L}^{\tau}_5 &=
\left\lbrack (\partial_{\mu}H)(\partial_{\nu}H)
+ \frac{g^2v_{\mathrm{F}}^2}{4} V_{\mu} V_{\nu} \right\rbrack^2
\end{align}
\end{subequations}
with
\begin{equation}
V_{\mu} V_{\nu} =
\frac{1}{2} \left( W^+_{\mu} W^-_{\nu} + W^+_{\nu} W^-_{\mu} \right)
+ \frac{1}{2\cos^2\theta_{w}} Z_{\mu} Z_{\nu}
\end{equation}
(note the symmetrization!), i.\,e.
\begin{subequations}
\begin{align}
\mathcal{L}_4 &= \alpha_4 \frac{g^4v_{\mathrm{F}}^4}{16} (V_{\mu} V_{\nu})^2 \\
\mathcal{L}_5 &= \alpha_5 \frac{g^4v_{\mathrm{F}}^4}{16} (V_{\mu} V^{\mu})^2
\end{align}
\end{subequations} *)
(* Breaking thinks up
\begin{subequations}
\begin{align}
\mathcal{L}^{\tau,H^4}_4 &=
\left\lbrack (\partial_{\mu}H)(\partial^{\mu}H) \right\rbrack^2 \\
\mathcal{L}^{\tau,H^4}_5 &=
\left\lbrack (\partial_{\mu}H)(\partial^{\mu}H) \right\rbrack^2
\end{align}
\end{subequations}
and
\begin{subequations}
\begin{align}
\mathcal{L}^{\tau,H^2V^2}_4 &= \frac{g^2v_{\mathrm{F}}^2}{2}
(\partial_{\mu}H)(\partial^{\mu}H) V_{\mu}V^{\mu} \\
\mathcal{L}^{\tau,H^2V^2}_5 &= \frac{g^2v_{\mathrm{F}}^2}{2}
(\partial_{\mu}H)(\partial_{\nu}H) V_{\mu}V_{\nu}
\end{align}
\end{subequations}
i.\,e.
\begin{subequations}
\begin{align}
\mathcal{L}^{\tau,H^2V^2}_4 &=
\frac{g^2v_{\mathrm{F}}^2}{2}
\left\lbrack
(\partial_{\mu}H)(\partial^{\mu}H) W^+_{\nu}W^{-,\nu}
+ \frac{1}{2\cos^2\theta_{w}} (\partial_{\mu}H)(\partial^{\mu}H) Z_{\nu} Z^{\nu}
\right\rbrack \\
\mathcal{L}^{\tau,H^2V^2}_5 &=
\frac{g^2v_{\mathrm{F}}^2}{2}
\left\lbrack
(W^{+,\mu}\partial_{\mu}H) (W^{-,\nu}\partial_{\nu}H)
+ \frac{1}{2\cos^2\theta_{w}} (Z^{\mu}\partial_{\mu}H)(Z^{\nu}\partial_{\nu}H)
\right\rbrack
\end{align}
\end{subequations} *)
(* \begin{multline}
\tau^4_8 \mathcal{L}^{\tau,H^2V^2}_4 + \tau^5_8 \mathcal{L}^{\tau,H^2V^2}_5 = \\
- \frac{g^2v_{\mathrm{F}}^2}{2} \Biggl\lbrack
2\tau^4_8
\frac{1}{2}(\ii\partial_{\mu}H)(\ii\partial^{\mu}H) W^+_{\nu}W^{-,\nu}
+ \tau^5_8
(W^{+,\mu}\ii\partial_{\mu}H) (W^{-,\nu}\ii\partial_{\nu}H) \\
+ \frac{2\tau^4_8}{\cos^2\theta_{w}}
\frac{1}{4} (\ii\partial_{\mu}H)(\ii\partial^{\mu}H) Z_{\nu} Z^{\nu}
+ \frac{\tau^5_8}{\cos^2\theta_{w}}
\frac{1}{2} (Z^{\mu}\ii\partial_{\mu}H)(Z^{\nu}\ii\partial_{\nu}H)
\Biggr\rbrack
\end{multline}
where the two powers of $\ii$ make the sign conveniently negative,
i.\,e.
\begin{subequations}
\begin{align}
\alpha_{(\partial H)^2W^2}^2 &= \tau^4_8 g^2v_{\mathrm{F}}^2\\
\alpha_{(\partial HW)^2}^2 &= \frac{\tau^5_8 g^2v_{\mathrm{F}}^2}{2} \\
\alpha_{(\partial H)^2Z^2}^2 &= \frac{\tau^4_8 g^2v_{\mathrm{F}}^2}{\cos^2\theta_{w}} \\
\alpha_{(\partial HZ)^2}^2 &=\frac{\tau^5_8 g^2v_{\mathrm{F}}^2}{2\cos^2\theta_{w}}
\end{align}
\end{subequations} *)
let anomalous_gauge_higgs =
[ (O H, G Ga, G Ga), Dim5_Scalar_Gauge2 1, G_HGaGa_anom;
(O H, G Ga, G Z), Dim5_Scalar_Gauge2 1, G_HGaZ_anom;
(O H, G Z, G Z), Dim5_Scalar_Gauge2 1, G_HZZ_anom;
(O H, G Wp, G Wm), Dim5_Scalar_Gauge2 1, G_HWW_anom;
(O H, G Ga, G Z), Dim5_Scalar_Vector_Vector_U 1, G_HGaZ_u;
(O H, G Z, G Z), Dim5_Scalar_Vector_Vector_U 1, G_HZZ_u;
(O H, G Wp, G Wm), Dim5_Scalar_Vector_Vector_U 1, G_HWW_u;
(O H, G Wm, G Wp), Dim5_Scalar_Vector_Vector_U 1, G_HWW_u
]
let anomalous_gauge_higgs4 =
[]
let anomalous_higgs =
[]
let higgs_triangle_vertices =
if Flags.higgs_triangle then
[ (O H, G Ga, G Ga), Dim5_Scalar_Gauge2 1, G_HGaGa;
(O H, G Ga, G Z), Dim5_Scalar_Gauge2 1, G_HGaZ;
(O H, G Gl, G Gl), Dim5_Scalar_Gauge2 1, G_Hgg ]
else
[]
let anomalous_higgs4 =
[]
let gauge_higgs =
if Flags.higgs_anom then
standard_gauge_higgs @ anomalous_gauge_higgs
else
standard_gauge_higgs
let gauge_higgs4 =
if Flags.higgs_anom then
standard_gauge_higgs4 @ anomalous_gauge_higgs4
else
standard_gauge_higgs4
let higgs =
if Flags.higgs_anom then
standard_higgs @ anomalous_higgs
else
standard_higgs
let higgs4 =
if Flags.higgs_anom then
standard_higgs4 @ anomalous_higgs4
else
standard_higgs4
let goldstone_vertices =
[ ((O Phi0, G Wm, G Wp), Scalar_Vector_Vector 1, I_G_ZWW);
((O Phip, G Ga, G Wm), Scalar_Vector_Vector 1, I_Q_W);
((O Phip, G Z, G Wm), Scalar_Vector_Vector 1, I_G_ZWW);
((O Phim, G Wp, G Ga), Scalar_Vector_Vector 1, I_Q_W);
((O Phim, G Wp, G Z), Scalar_Vector_Vector 1, I_G_ZWW) ]
(* Anomalous trilinear interactions $f_i f_j V$ and $ttH$:
\begin{equation}
\Delta\mathcal{L}_{tt\gamma} =
- e \frac{\upsilon}{\Lambda^2}
\bar{t} i\sigma^{\mu\nu} k_\nu (d_V(k^2) + i d_A(k^2) \gamma_5) t A_\mu
\end{equation} *)
let anomalous_ttA =
if Flags.top_anom then
[ ((M (U (-3)), G Ga, M (U 3)), FBF (1, Psibar, TVAM, Psi), G_TVA_ttA) ]
else
[]
- let ilc_nlo_ttA =
- [ ((M (U (-3)), G Ga, M (U 3)), FBF (1, Psibar, VAM, Psi), VA_ILC_ttA) ]
+ let tt_threshold_ttA =
+ if Flags.tt_threshold then
+ [ ((M (U (-3)), G Ga, M (U 3)), FBF (1, Psibar, VAM, Psi), VA_ILC_ttA) ]
+ else
+ []
(* \begin{equation}
\Delta\mathcal{L}_{bb\gamma} =
- e \frac{\upsilon}{\Lambda^2}
\bar{b} i\sigma^{\mu\nu} k_\nu (d_V(k^2) + i d_A(k^2) \gamma_5) b A_\mu
\end{equation} *)
let anomalous_bbA =
if Flags.top_anom then
[ ((M (D (-3)), G Ga, M (D 3)), FBF (1, Psibar, TVAM, Psi), G_TVA_bbA) ]
else
[]
(* \begin{equation}
\Delta\mathcal{L}_{ttg} =
- g_s \frac{\upsilon}{\Lambda^2}
\bar{t}\lambda^a i\sigma^{\mu\nu}k_\nu
(d_V(k^2)+id_A(k^2)\gamma_5)tG^a_\mu
\end{equation} *)
let anomalous_ttG =
if Flags.top_anom then
[ ((M (U (-3)), G Gl, M (U 3)), FBF (1, Psibar, TVAM, Psi), G_TVA_ttG) ]
else
[]
(* \begin{equation}
\Delta\mathcal{L}_{ttZ} =
- \frac{g}{2 c_W} \frac{\upsilon^2}{\Lambda^2}\left\lbrack
\bar{t} \fmslash{Z} (X_L(k^2) P_L + X_R(k^2) P_R) t
+ \bar{t}\frac{i\sigma^{\mu\nu}k_\nu}{m_Z}
(d_V(k^2)+id_A(k^2)\gamma_5)tZ_\mu\right\rbrack
\end{equation} *)
let anomalous_ttZ =
if Flags.top_anom then
[ ((M (U (-3)), G Z, M (U 3)), FBF (1, Psibar, VLRM, Psi), G_VLR_ttZ);
((M (U (-3)), G Z, M (U 3)), FBF (1, Psibar, TVAM, Psi), G_TVA_ttZ) ]
else
[]
- let ilc_nlo_ttZ =
- [ ((M (U (-3)), G Z, M (U 3)), FBF (1, Psibar, VAM, Psi), VA_ILC_ttZ) ]
+ let tt_threshold_ttZ =
+ if Flags.tt_threshold then
+ [ ((M (U (-3)), G Z, M (U 3)), FBF (1, Psibar, VAM, Psi), VA_ILC_ttZ) ]
+ else
+ []
(* \begin{equation}
\Delta\mathcal{L}_{bbZ} =
- \frac{g}{2 c_W} \frac{\upsilon^2}{\Lambda^2}
\bar{b}\frac{i\sigma^{\mu\nu}k_\nu}{m_Z}
(d_V(k^2)+id_A(k^2)\gamma_5)bZ_\mu
\end{equation} *)
let anomalous_bbZ =
if Flags.top_anom then
[ ((M (D (-3)), G Z, M (D 3)), FBF (1, Psibar, TVAM, Psi), G_TVA_bbZ) ]
else
[]
(* \begin{equation}
\Delta\mathcal{L}_{tbW} =
- \frac{g}{\sqrt{2}} \frac{\upsilon^2}{\Lambda^2}\left\lbrack
\bar{b}\fmslash{W}^-(V_L(k^2) P_L+V_R(k^2) P_R) t
+ \bar{b}\frac{i\sigma^{\mu\nu}k_\nu}{m_W}
(g_L(k^2)P_L+g_R(k^2)P_R)tW^-_\mu\right\rbrack
+ \textnormal{H.c.}
\end{equation} *)
let anomalous_tbW =
if Flags.top_anom then
[ ((M (D (-3)), G Wm, M (U 3)), FBF (1, Psibar, VLRM, Psi), G_VLR_btW);
((M (U (-3)), G Wp, M (D 3)), FBF (1, Psibar, VLRM, Psi), G_VLR_tbW);
((M (D (-3)), G Wm, M (U 3)), FBF (1, Psibar, TLRM, Psi), G_TLR_btW);
((M (U (-3)), G Wp, M (D 3)), FBF (1, Psibar, TRLM, Psi), G_TRL_tbW) ]
else
[]
(* \begin{equation}
\Delta\mathcal{L}_{ttH} =
- \frac{1}{\sqrt{2}} \bar{t} (Y_V(k^2)+iY_A(k^2)\gamma_5)t H
\end{equation} *)
let anomalous_ttH =
if Flags.top_anom then
[ ((M (U (-3)), O H, M (U 3)), FBF (1, Psibar, SPM, Psi), G_SP_ttH) ]
else
[]
(* quartic fermion-gauge interactions $f_i f_j V_1 V_2$ emerging from gauge-invariant
effective operators:
\begin{equation}
\Delta\mathcal{L}_{ttgg} =
- \frac{g_s^2}{2} f_{abc} \frac{\upsilon}{\Lambda^2}
\bar{t} \lambda^a \sigma^{\mu\nu}
(d_V(k^2)+id_A(k^2)\gamma_5)t G^b_\mu G^c_\nu
\end{equation} *)
let anomalous_ttGG =
if Flags.top_anom then
[ ((M (U (-3)), O (Aux_top (2,1,0,true,TTGG)), M (U 3)), FBF (1, Psibar, TVA, Psi), G_TVA_ttGG);
((O (Aux_top (2,1,0,false,TTGG)), G Gl, G Gl), Aux_Gauge_Gauge 1, I_Gs) ]
else
[]
(* \begin{equation}
\Delta\mathcal{L}_{tbWA} =
- i\sin\theta_w \frac{g^2}{2\sqrt{2}} \frac{\upsilon^2}{\Lambda^2}\left\lbrack
\bar{b}\frac{\sigma^{\mu\nu}}{m_W}
(g_L(k^2)P_L+g_R(k^2)P_R)t A_\mu W^-_\nu \right\rbrack
+ \textnormal{H.c.}
\end{equation} *)
let anomalous_tbWA =
if Flags.top_anom then
[ ((M (D (-3)), O (Aux_top (2,0,-1,true,TBWA)), M (U 3)), FBF (1, Psibar, TLR, Psi), G_TLR_btWA);
((O (Aux_top (2,0,1,false,TBWA)), G Ga, G Wm), Aux_Gauge_Gauge 1, I_G_weak);
((M (U (-3)), O (Aux_top (2,0,1,true,TBWA)), M (D 3)), FBF (1, Psibar, TRL, Psi), G_TRL_tbWA);
((O (Aux_top (2,0,-1,false,TBWA)), G Wp, G Ga), Aux_Gauge_Gauge 1, I_G_weak) ]
else
[]
(* \begin{equation}
\Delta\mathcal{L}_{tbWZ} =
- i\cos\theta_w \frac{g^2}{2\sqrt{2}} \frac{\upsilon^2}{\Lambda^2}\left\lbrack
\bar{b}\frac{\sigma^{\mu\nu}}{m_W}
(g_L(k^2)P_L+g_R(k^2)P_R)t Z_\mu W^-_\nu \right\rbrack
+ \textnormal{H.c.}
\end{equation} *)
let anomalous_tbWZ =
if Flags.top_anom then
[ ((M (D (-3)), O (Aux_top (2,0,-1,true,TBWZ)), M (U 3)), FBF (1, Psibar, TLR, Psi), G_TLR_btWZ);
((O (Aux_top (2,0,1,false,TBWZ)), G Z, G Wm), Aux_Gauge_Gauge 1, I_G_weak);
((M (U (-3)), O (Aux_top (2,0,1,true,TBWZ)), M (D 3)), FBF (1, Psibar, TRL, Psi), G_TRL_tbWZ);
((O (Aux_top (2,0,-1,false,TBWZ)), G Wp, G Z), Aux_Gauge_Gauge 1, I_G_weak) ]
else
[]
(* \begin{equation}
\Delta\mathcal{L}_{ttWW} =
- i \frac{g^2}{2} \frac{\upsilon^2}{\Lambda^2}
\bar{t} \frac{\sigma^{\mu\nu}}{m_W}
(d_V(k^2)+id_A(k^2)\gamma_5)t W^-_\mu W^+_\nu
\end{equation} *)
let anomalous_ttWW =
if Flags.top_anom then
[ ((M (U (-3)), O (Aux_top (2,0,0,true,TTWW)), M (U 3)), FBF (1, Psibar, TVA, Psi), G_TVA_ttWW);
((O (Aux_top (2,0,0,false,TTWW)), G Wm, G Wp), Aux_Gauge_Gauge 1, I_G_weak) ]
else
[]
(* \begin{equation}
\Delta\mathcal{L}_{bbWW} =
- i \frac{g^2}{2} \frac{\upsilon^2}{\Lambda^2}
\bar{b} \frac{\sigma^{\mu\nu}}{m_W}
(d_V(k^2)+id_A(k^2)\gamma_5)b W^-_\mu W^+_\nu
\end{equation} *)
let anomalous_bbWW =
if Flags.top_anom then
[ ((M (D (-3)), O (Aux_top (2,0,0,true,BBWW)), M (D 3)), FBF (1, Psibar, TVA, Psi), G_TVA_bbWW);
((O (Aux_top (2,0,0,false,BBWW)), G Wm, G Wp), Aux_Gauge_Gauge 1, I_G_weak) ]
else
[]
(* 4-fermion contact terms emerging from operator rewriting: *)
let anomalous_top_qGuG_tt =
[ ((M (U (-3)), O (Aux_top (1,1,0,true,QGUG)), M (U 3)), FBF (1, Psibar, VLR, Psi), G_VLR_qGuG) ]
let anomalous_top_qGuG_ff n =
List.map mom
[ ((U (-n), Aux_top (1,1,0,false,QGUG), U n), FBF (1, Psibar, V, Psi), Unit);
((D (-n), Aux_top (1,1,0,false,QGUG), D n), FBF (1, Psibar, V, Psi), Unit) ]
let anomalous_top_qGuG =
if Flags.top_anom_4f then
anomalous_top_qGuG_tt @ ThoList.flatmap anomalous_top_qGuG_ff [1;2;3]
else
[]
let anomalous_top_qBuB_tt =
[ ((M (U (-3)), O (Aux_top (1,0,0,true,QBUB)), M (U 3)), FBF (1, Psibar, VLR, Psi), G_VLR_qBuB) ]
let anomalous_top_qBuB_ff n =
List.map mom
[ ((U (-n), Aux_top (1,0,0,false,QBUB), U n), FBF (1, Psibar, VLR, Psi), G_VLR_qBuB_u);
((D (-n), Aux_top (1,0,0,false,QBUB), D n), FBF (1, Psibar, VLR, Psi), G_VLR_qBuB_d);
((L (-n), Aux_top (1,0,0,false,QBUB), L n), FBF (1, Psibar, VLR, Psi), G_VLR_qBuB_e);
((N (-n), Aux_top (1,0,0,false,QBUB), N n), FBF (1, Psibar, VL, Psi), G_VL_qBuB_n) ]
let anomalous_top_qBuB =
if Flags.top_anom_4f then
anomalous_top_qBuB_tt @ ThoList.flatmap anomalous_top_qBuB_ff [1;2;3]
else
[]
let anomalous_top_qW_tq =
[ ((M (U (-3)), O (Aux_top (1,0,0,true,QW)), M (U 3)), FBF (1, Psibar, VL, Psi), G_VL_qW);
((M (D (-3)), O (Aux_top (1,0,-1,true,QW)), M (U 3)), FBF (1, Psibar, VL, Psi), G_VL_qW);
((M (U (-3)), O (Aux_top (1,0,1,true,QW)), M (D 3)), FBF (1, Psibar, VL, Psi), G_VL_qW) ]
let anomalous_top_qW_ff n =
List.map mom
[ ((U (-n), Aux_top (1,0,0,false,QW), U n), FBF (1, Psibar, VL, Psi), G_VL_qW_u);
((D (-n), Aux_top (1,0,0,false,QW), D n), FBF (1, Psibar, VL, Psi), G_VL_qW_d);
((N (-n), Aux_top (1,0,0,false,QW), N n), FBF (1, Psibar, VL, Psi), G_VL_qW_u);
((L (-n), Aux_top (1,0,0,false,QW), L n), FBF (1, Psibar, VL, Psi), G_VL_qW_d);
((D (-n), Aux_top (1,0,-1,false,QW), U n), FBF (1, Psibar, VL, Psi), Half);
((U (-n), Aux_top (1,0,1,false,QW), D n), FBF (1, Psibar, VL, Psi), Half);
((L (-n), Aux_top (1,0,-1,false,QW), N n), FBF (1, Psibar, VL, Psi), Half);
((N (-n), Aux_top (1,0,1,false,QW), L n), FBF (1, Psibar, VL, Psi), Half) ]
let anomalous_top_qW =
if Flags.top_anom_4f then
anomalous_top_qW_tq @ ThoList.flatmap anomalous_top_qW_ff [1;2;3]
else
[]
let anomalous_top_DuDd =
if Flags.top_anom_4f then
[ ((M (U (-3)), O (Aux_top (0,0,0,true,DR)), M (U 3)), FBF (1, Psibar, SR, Psi), Half);
((M (U (-3)), O (Aux_top (0,0,0,false,DR)), M (U 3)), FBF (1, Psibar, SL, Psi), G_SL_DttR);
((M (D (-3)), O (Aux_top (0,0,0,false,DR)), M (D 3)), FBF (1, Psibar, SR, Psi), G_SR_DttR);
((M (U (-3)), O (Aux_top (0,0,0,true,DL)), M (U 3)), FBF (1, Psibar, SL, Psi), Half);
((M (D (-3)), O (Aux_top (0,0,0,false,DL)), M (D 3)), FBF (1, Psibar, SL, Psi), G_SL_DttL);
((M (D (-3)), O (Aux_top (0,0,-1,true,DR)), M (U 3)), FBF (1, Psibar, SR, Psi), Half);
((M (U (-3)), O (Aux_top (0,0,1,false,DR)), M (D 3)), FBF (1, Psibar, SLR, Psi), G_SLR_DbtR);
((M (D (-3)), O (Aux_top (0,0,-1,true,DL)), M (U 3)), FBF (1, Psibar, SL, Psi), Half);
((M (U (-3)), O (Aux_top (0,0,1,false,DL)), M (D 3)), FBF (1, Psibar, SL, Psi), G_SL_DbtL) ]
else
[]
let anomalous_top_quqd1_tq =
[ ((M (D (-3)), O (Aux_top (0,0,-1,true,S1RR)), M (U 3)), FBF (1, Psibar, SR, Psi), C_S1RR_bt);
((M (U (-3)), O (Aux_top (0,0, 1,true,S1RR)), M (D 3)), FBF (1, Psibar, SL, Psi), C_S1RR_tb);
((M (D (-3)), O (Aux_top (0,0,-1,true,S1LL)), M (U 3)), FBF (1, Psibar, SL, Psi), C_S1LL_bt);
((M (U (-3)), O (Aux_top (0,0, 1,true,S1LL)), M (D 3)), FBF (1, Psibar, SR, Psi), C_S1LL_tb);
((M (D (-3)), O (Aux_top (0,0,-1,true,S1RL)), M (U 3)), FBF (1, Psibar, SR, Psi), C_S1RL_bt);
((M (U (-3)), O (Aux_top (0,0, 1,true,S1RL)), M (D 3)), FBF (1, Psibar, SL, Psi), C_S1RL_tb);
((M (D (-3)), O (Aux_top (0,0,-1,true,S1LR)), M (U 3)), FBF (1, Psibar, SL, Psi), C_S1LR_bt);
((M (U (-3)), O (Aux_top (0,0, 1,true,S1LR)), M (D 3)), FBF (1, Psibar, SR, Psi), C_S1LR_tb) ]
let anomalous_top_quqd1_ff n =
List.map mom
[ ((U (-n), Aux_top (0,0, 1,false,S1RR), D n), FBF (1, Psibar, SR, Psi), Half);
((D (-n), Aux_top (0,0,-1,false,S1RR), U n), FBF (1, Psibar, SL, Psi), Half);
((U (-n), Aux_top (0,0, 1,false,S1LL), D n), FBF (1, Psibar, SL, Psi), Half);
((D (-n), Aux_top (0,0,-1,false,S1LL), U n), FBF (1, Psibar, SR, Psi), Half);
((U (-n), Aux_top (0,0, 1,false,S1RL), D n), FBF (1, Psibar, SL, Psi), Half);
((D (-n), Aux_top (0,0,-1,false,S1RL), U n), FBF (1, Psibar, SR, Psi), Half);
((U (-n), Aux_top (0,0, 1,false,S1LR), D n), FBF (1, Psibar, SR, Psi), Half);
((D (-n), Aux_top (0,0,-1,false,S1LR), U n), FBF (1, Psibar, SL, Psi), Half) ]
let anomalous_top_quqd1 =
if Flags.top_anom_4f then
anomalous_top_quqd1_tq @ ThoList.flatmap anomalous_top_quqd1_ff [1;2;3]
else
[]
let anomalous_top_quqd8_tq =
[ ((M (D (-3)), O (Aux_top (0,1,-1,true,S8RR)), M (U 3)), FBF (1, Psibar, SR, Psi), C_S8RR_bt);
((M (U (-3)), O (Aux_top (0,1, 1,true,S8RR)), M (D 3)), FBF (1, Psibar, SL, Psi), C_S8RR_tb);
((M (D (-3)), O (Aux_top (0,1,-1,true,S8LL)), M (U 3)), FBF (1, Psibar, SL, Psi), C_S8LL_bt);
((M (U (-3)), O (Aux_top (0,1, 1,true,S8LL)), M (D 3)), FBF (1, Psibar, SR, Psi), C_S8LL_tb) ]
let anomalous_top_quqd8_ff n =
List.map mom
[ ((U (-n), Aux_top (0,1, 1,false,S8RR), D n), FBF (1, Psibar, SR, Psi), Half);
((D (-n), Aux_top (0,1,-1,false,S8RR), U n), FBF (1, Psibar, SL, Psi), Half);
((U (-n), Aux_top (0,1, 1,false,S8LL), D n), FBF (1, Psibar, SL, Psi), Half);
((D (-n), Aux_top (0,1,-1,false,S8LL), U n), FBF (1, Psibar, SR, Psi), Half) ]
let anomalous_top_quqd8 =
if Flags.top_anom_4f then
anomalous_top_quqd8_tq @ ThoList.flatmap anomalous_top_quqd8_ff [1;2;3]
else
[]
let anomalous_top_qq38_tq =
[ ((M (D (-3)), O (Aux_top (1,1,-1,true,QQ38)), M (U 3)), FBF (1, Psibar, VL, Psi), C_qq38);
((M (U (-3)), O (Aux_top (1,1,1,true,QQ38)), M (D 3)), FBF (1, Psibar, VL, Psi), C_qq38) ]
let anomalous_top_qq38_ff n =
List.map mom
[ ((D (-n), Aux_top (1,1,-1,false,QQ38), U n), FBF (1, Psibar, VL, Psi), Half);
((U (-n), Aux_top (1,1,1,false,QQ38), D n), FBF (1, Psibar, VL, Psi), Half) ]
let anomalous_top_qq38 =
if Flags.top_anom_4f then
anomalous_top_qq38_tq @ ThoList.flatmap anomalous_top_qq38_ff [1;2;3]
else
[]
let vertices3 =
(ThoList.flatmap electromagnetic_currents [1;2;3] @
ThoList.flatmap color_currents [1;2;3] @
ThoList.flatmap neutral_currents [1;2;3] @
(if Flags.ckm_present then
charged_currents_ckm
else
charged_currents_triv) @
yukawa @ triple_gauge @
gauge_higgs @ higgs @ higgs_triangle_vertices
@ goldstone_vertices @
- ilc_nlo_ttA @ ilc_nlo_ttZ @
+ tt_threshold_ttA @ tt_threshold_ttZ @
anomalous_ttA @ anomalous_bbA @
anomalous_ttZ @ anomalous_bbZ @
anomalous_tbW @ anomalous_tbWA @ anomalous_tbWZ @
anomalous_ttWW @ anomalous_bbWW @
anomalous_ttG @ anomalous_ttGG @
anomalous_ttH @
anomalous_top_qGuG @ anomalous_top_qBuB @
anomalous_top_qW @ anomalous_top_DuDd @
anomalous_top_quqd1 @ anomalous_top_quqd8 @
anomalous_top_qq38)
let vertices4 =
quartic_gauge @ gauge_higgs4 @ higgs4
let vertices () = (vertices3, vertices4, [])
(* For efficiency, make sure that [F.of_vertices vertices] is
evaluated only once. *)
let table = F.of_vertices (vertices ())
let fuse2 = F.fuse2 table
let fuse3 = F.fuse3 table
let fuse = F.fuse table
let max_degree () = 4
let flavor_of_string = function
| "e-" -> M (L 1) | "e+" -> M (L (-1))
| "mu-" -> M (L 2) | "mu+" -> M (L (-2))
| "tau-" -> M (L 3) | "tau+" -> M (L (-3))
| "nue" -> M (N 1) | "nuebar" -> M (N (-1))
| "numu" -> M (N 2) | "numubar" -> M (N (-2))
| "nutau" -> M (N 3) | "nutaubar" -> M (N (-3))
| "u" -> M (U 1) | "ubar" -> M (U (-1))
| "c" -> M (U 2) | "cbar" -> M (U (-2))
| "t" -> M (U 3) | "tbar" -> M (U (-3))
| "d" -> M (D 1) | "dbar" -> M (D (-1))
| "s" -> M (D 2) | "sbar" -> M (D (-2))
| "b" -> M (D 3) | "bbar" -> M (D (-3))
| "g" | "gl" -> G Gl
| "A" -> G Ga | "Z" | "Z0" -> G Z
| "W+" -> G Wp | "W-" -> G Wm
| "H" -> O H
| "Aux_t_ttGG0" -> O (Aux_top (2,1, 0,true,TTGG)) | "Aux_ttGG0" -> O (Aux_top (2,1, 0,false,TTGG))
| "Aux_t_tbWA+" -> O (Aux_top (2,0, 1,true,TBWA)) | "Aux_tbWA+" -> O (Aux_top (2,0, 1,false,TBWA))
| "Aux_t_tbWA-" -> O (Aux_top (2,0,-1,true,TBWA)) | "Aux_tbWA-" -> O (Aux_top (2,0,-1,false,TBWA))
| "Aux_t_tbWZ+" -> O (Aux_top (2,0, 1,true,TBWZ)) | "Aux_tbWZ+" -> O (Aux_top (2,0, 1,false,TBWZ))
| "Aux_t_tbWZ-" -> O (Aux_top (2,0,-1,true,TBWZ)) | "Aux_tbWZ-" -> O (Aux_top (2,0,-1,false,TBWZ))
| "Aux_t_ttWW0" -> O (Aux_top (2,0, 0,true,TTWW)) | "Aux_ttWW0" -> O (Aux_top (2,0, 0,false,TTWW))
| "Aux_t_bbWW0" -> O (Aux_top (2,0, 0,true,BBWW)) | "Aux_bbWW0" -> O (Aux_top (2,0, 0,false,BBWW))
| "Aux_t_qGuG0" -> O (Aux_top (1,1, 0,true,QGUG)) | "Aux_qGuG0" -> O (Aux_top (1,1, 0,false,QGUG))
| "Aux_t_qBuB0" -> O (Aux_top (1,0, 0,true,QBUB)) | "Aux_qBuB0" -> O (Aux_top (1,0, 0,false,QBUB))
| "Aux_t_qW0" -> O (Aux_top (1,0, 0,true,QW)) | "Aux_qW0" -> O (Aux_top (1,0, 0,false,QW))
| "Aux_t_qW+" -> O (Aux_top (1,0, 1,true,QW)) | "Aux_qW+" -> O (Aux_top (1,0, 1,false,QW))
| "Aux_t_qW-" -> O (Aux_top (1,0,-1,true,QW)) | "Aux_qW-" -> O (Aux_top (1,0,-1,false,QW))
| "Aux_t_dL0" -> O (Aux_top (0,0, 0,true,DL)) | "Aux_dL0" -> O (Aux_top (0,0, 0,false,DL))
| "Aux_t_dL+" -> O (Aux_top (0,0, 1,true,DL)) | "Aux_dL+" -> O (Aux_top (0,0, 1,false,DL))
| "Aux_t_dL-" -> O (Aux_top (0,0,-1,true,DL)) | "Aux_dL-" -> O (Aux_top (0,0,-1,false,DL))
| "Aux_t_dR0" -> O (Aux_top (0,0, 0,true,DR)) | "Aux_dR0" -> O (Aux_top (0,0, 0,false,DR))
| "Aux_t_dR+" -> O (Aux_top (0,0, 1,true,DR)) | "Aux_dR+" -> O (Aux_top (0,0, 1,false,DR))
| "Aux_t_dR-" -> O (Aux_top (0,0,-1,true,DR)) | "Aux_dR-" -> O (Aux_top (0,0,-1,false,DR))
| "Aux_t_S1LL+" -> O (Aux_top (0,0, 1,true,S1LL)) | "Aux_S1LL+" -> O (Aux_top (0,0, 1,false,S1LL))
| "Aux_t_S1LL-" -> O (Aux_top (0,0,-1,true,S1LL)) | "Aux_S1LL-" -> O (Aux_top (0,0,-1,false,S1LL))
| "Aux_t_S1RR+" -> O (Aux_top (0,0, 1,true,S1RR)) | "Aux_S1RR+" -> O (Aux_top (0,0, 1,false,S1RR))
| "Aux_t_S1RR-" -> O (Aux_top (0,0,-1,true,S1RR)) | "Aux_S1RR-" -> O (Aux_top (0,0,-1,false,S1RR))
| "Aux_t_S1LR+" -> O (Aux_top (0,0, 1,true,S1LR)) | "Aux_S1LR+" -> O (Aux_top (0,0, 1,false,S1LR))
| "Aux_t_S1LR-" -> O (Aux_top (0,0,-1,true,S1LR)) | "Aux_S1LR-" -> O (Aux_top (0,0,-1,false,S1LR))
| "Aux_t_S1RL+" -> O (Aux_top (0,0, 1,true,S1RL)) | "Aux_S1RL+" -> O (Aux_top (0,0, 1,false,S1RL))
| "Aux_t_S1RL-" -> O (Aux_top (0,0,-1,true,S1RL)) | "Aux_S1RL-" -> O (Aux_top (0,0,-1,false,S1RL))
| "Aux_t_S8LL+" -> O (Aux_top (0,1, 1,true,S8LL)) | "Aux_S8LL+" -> O (Aux_top (0,1, 1,false,S8LL))
| "Aux_t_S8LL-" -> O (Aux_top (0,1,-1,true,S8LL)) | "Aux_S8LL-" -> O (Aux_top (0,1,-1,false,S8LL))
| "Aux_t_S8RR+" -> O (Aux_top (0,1, 1,true,S8RR)) | "Aux_S8RR+" -> O (Aux_top (0,1, 1,false,S8RR))
| "Aux_t_S8RR-" -> O (Aux_top (0,1,-1,true,S8RR)) | "Aux_S8RR-" -> O (Aux_top (0,1,-1,false,S8RR))
| "Aux_t_qq38+" -> O (Aux_top (1,1, 1,true,QQ38)) | "Aux_qq38+" -> O (Aux_top (1,1, 1,false,QQ38))
| "Aux_t_qq38-" -> O (Aux_top (1,1,-1,true,QQ38)) | "Aux_qq38-" -> O (Aux_top (1,1,-1,false,QQ38))
| _ -> invalid_arg "Modellib.SM.flavor_of_string"
let flavor_to_string = function
| M f ->
begin match f with
| L 1 -> "e-" | L (-1) -> "e+"
| L 2 -> "mu-" | L (-2) -> "mu+"
| L 3 -> "tau-" | L (-3) -> "tau+"
| L _ -> invalid_arg
"Modellib.SM.flavor_to_string: invalid lepton"
| N 1 -> "nue" | N (-1) -> "nuebar"
| N 2 -> "numu" | N (-2) -> "numubar"
| N 3 -> "nutau" | N (-3) -> "nutaubar"
| N _ -> invalid_arg
"Modellib.SM.flavor_to_string: invalid neutrino"
| U 1 -> "u" | U (-1) -> "ubar"
| U 2 -> "c" | U (-2) -> "cbar"
| U 3 -> "t" | U (-3) -> "tbar"
| U _ -> invalid_arg
"Modellib.SM.flavor_to_string: invalid up type quark"
| D 1 -> "d" | D (-1) -> "dbar"
| D 2 -> "s" | D (-2) -> "sbar"
| D 3 -> "b" | D (-3) -> "bbar"
| D _ -> invalid_arg
"Modellib.SM.flavor_to_string: invalid down type quark"
end
| G f ->
begin match f with
| Gl -> "gl"
| Ga -> "A" | Z -> "Z"
| Wp -> "W+" | Wm -> "W-"
end
| O f ->
begin match f with
| Phip -> "phi+" | Phim -> "phi-" | Phi0 -> "phi0"
| H -> "H"
| Aux_top (_,_,ch,n,v) -> "Aux_" ^ (if n then "t_" else "") ^ (
begin match v with
| TTGG -> "ttGG" | TBWA -> "tbWA" | TBWZ -> "tbWZ"
| TTWW -> "ttWW" | BBWW -> "bbWW"
| QGUG -> "qGuG" | QBUB -> "qBuB"
| QW -> "qW" | DL -> "dL" | DR -> "dR"
| S1LL -> "S1LL" | S1RR -> "S1RR"
| S1LR -> "S1LR" | S1RL -> "S1RL"
| S8LL -> "S8LL" | S8RR -> "S8RR"
| QQ38 -> "qq38"
end ) ^ ( if ch > 0 then "+" else if ch < 0 then "-" else "0" )
end
let flavor_to_TeX = function
| M f ->
begin match f with
| L 1 -> "e^-" | L (-1) -> "e^+"
| L 2 -> "\\mu^-" | L (-2) -> "\\mu^+"
| L 3 -> "\\tau^-" | L (-3) -> "\\tau^+"
| L _ -> invalid_arg
"Modellib.SM.flavor_to_TeX: invalid lepton"
| N 1 -> "\\nu_e" | N (-1) -> "\\bar{\\nu}_e"
| N 2 -> "\\nu_\\mu" | N (-2) -> "\\bar{\\nu}_\\mu"
| N 3 -> "\\nu_\\tau" | N (-3) -> "\\bar{\\nu}_\\tau"
| N _ -> invalid_arg
"Modellib.SM.flavor_to_TeX: invalid neutrino"
| U 1 -> "u" | U (-1) -> "\\bar{u}"
| U 2 -> "c" | U (-2) -> "\\bar{c}"
| U 3 -> "t" | U (-3) -> "\\bar{t}"
| U _ -> invalid_arg
"Modellib.SM.flavor_to_TeX: invalid up type quark"
| D 1 -> "d" | D (-1) -> "\\bar{d}"
| D 2 -> "s" | D (-2) -> "\\bar{s}"
| D 3 -> "b" | D (-3) -> "\\bar{b}"
| D _ -> invalid_arg
"Modellib.SM.flavor_to_TeX: invalid down type quark"
end
| G f ->
begin match f with
| Gl -> "g"
| Ga -> "\\gamma" | Z -> "Z"
| Wp -> "W^+" | Wm -> "W^-"
end
| O f ->
begin match f with
| Phip -> "\\phi^+" | Phim -> "\\phi^-" | Phi0 -> "\\phi^0"
| H -> "H"
| Aux_top (_,_,ch,n,v) -> "\\textnormal{Aux_" ^ (if n then "t_" else "") ^ (
begin match v with
| TTGG -> "ttGG" | TBWA -> "tbWA" | TBWZ -> "tbWZ"
| TTWW -> "ttWW" | BBWW -> "bbWW"
| QGUG -> "qGuG" | QBUB -> "qBuB"
| QW -> "qW" | DL -> "dL" | DR -> "dR"
| S1LL -> "S1LL" | S1RR -> "S1RR"
| S1LR -> "S1LR" | S1RL -> "S1RL"
| S8LL -> "S8LL" | S8RR -> "S8RR"
| QQ38 -> "qq38"
end ) ^ ( if ch > 0 then "^+" else if ch < 0 then "^-" else "^0" ) ^ "}"
end
let flavor_symbol = function
| M f ->
begin match f with
| L n when n > 0 -> "l" ^ string_of_int n
| L n -> "l" ^ string_of_int (abs n) ^ "b"
| N n when n > 0 -> "n" ^ string_of_int n
| N n -> "n" ^ string_of_int (abs n) ^ "b"
| U n when n > 0 -> "u" ^ string_of_int n
| U n -> "u" ^ string_of_int (abs n) ^ "b"
| D n when n > 0 -> "d" ^ string_of_int n
| D n -> "d" ^ string_of_int (abs n) ^ "b"
end
| G f ->
begin match f with
| Gl -> "gl"
| Ga -> "a" | Z -> "z"
| Wp -> "wp" | Wm -> "wm"
end
| O f ->
begin match f with
| Phip -> "pp" | Phim -> "pm" | Phi0 -> "p0"
| H -> "h"
| Aux_top (_,_,ch,n,v) -> "aux_" ^ (if n then "t_" else "") ^ (
begin match v with
| TTGG -> "ttgg" | TBWA -> "tbwa" | TBWZ -> "tbwz"
| TTWW -> "ttww" | BBWW -> "bbww"
| QGUG -> "qgug" | QBUB -> "qbub"
| QW -> "qw" | DL -> "dl" | DR -> "dr"
| S1LL -> "s1ll" | S1RR -> "s1rr"
| S1LR -> "s1lr" | S1RL -> "s1rl"
| S8LL -> "s8ll" | S8RR -> "s8rr"
| QQ38 -> "qq38"
end ) ^ "_" ^ ( if ch > 0 then "p" else if ch < 0 then "m" else "0" )
end
let pdg = function
| M f ->
begin match f with
| L n when n > 0 -> 9 + 2*n
| L n -> - 9 + 2*n
| N n when n > 0 -> 10 + 2*n
| N n -> - 10 + 2*n
| U n when n > 0 -> 2*n
| U n -> 2*n
| D n when n > 0 -> - 1 + 2*n
| D n -> 1 + 2*n
end
| G f ->
begin match f with
| Gl -> 21
| Ga -> 22 | Z -> 23
| Wp -> 24 | Wm -> (-24)
end
| O f ->
begin match f with
| Phip | Phim -> 27 | Phi0 -> 26
| H -> 25
| Aux_top (_,_,ch,t,f) -> let n =
begin match f with
| QW -> 0
| S1RR -> 1 | S1LL -> 2
| S1RL -> 6 | S1LR -> 7
| S8RR -> 3 | S8LL -> 4
| QQ38 -> 5
| _ -> 8
end
in (602 + 3*n - ch) * ( if t then (1) else (-1) )
end
let mass_symbol f =
"mass(" ^ string_of_int (abs (pdg f)) ^ ")"
let width_symbol f =
"width(" ^ string_of_int (abs (pdg f)) ^ ")"
let constant_symbol = function
| Unit -> "unit" | Half -> "half" | Pi -> "PI"
| Alpha_QED -> "alpha" | E -> "e" | G_weak -> "g" | Vev -> "vev"
| I_G_weak -> "ig"
| Sin2thw -> "sin2thw" | Sinthw -> "sinthw" | Costhw -> "costhw"
| Q_lepton -> "qlep" | Q_up -> "qup" | Q_down -> "qdwn"
| G_NC_lepton -> "gnclep" | G_NC_neutrino -> "gncneu"
| G_NC_up -> "gncup" | G_NC_down -> "gncdwn"
| G_TVA_ttA -> "gtva_tta" | G_TVA_bbA -> "gtva_bba"
| G_VLR_ttZ -> "gvlr_ttz" | G_TVA_ttZ -> "gtva_ttz" | G_TVA_bbZ -> "gtva_bbz"
| VA_ILC_ttA -> "va_ilc_tta" | VA_ILC_ttZ -> "va_ilc_ttz"
| G_VLR_btW -> "gvlr_btw" | G_VLR_tbW -> "gvlr_tbw"
| G_TLR_btW -> "gtlr_btw" | G_TRL_tbW -> "gtrl_tbw"
| G_TLR_btWA -> "gtlr_btwa" | G_TRL_tbWA -> "gtrl_tbwa"
| G_TLR_btWZ -> "gtlr_btwz" | G_TRL_tbWZ -> "gtrl_tbwz"
| G_TVA_ttWW -> "gtva_ttww" | G_TVA_bbWW -> "gtva_bbww"
| G_TVA_ttG -> "gtva_ttg" | G_TVA_ttGG -> "gtva_ttgg"
| G_SP_ttH -> "gsp_tth"
| G_VLR_qGuG -> "gvlr_qgug"
| G_VLR_qBuB -> "gvlr_qbub"
| G_VLR_qBuB_u -> "gvlr_qbub_u" | G_VLR_qBuB_d -> "gvlr_qbub_d"
| G_VLR_qBuB_e -> "gvlr_qbub_e" | G_VL_qBuB_n -> "gvl_qbub_n"
| G_VL_qW -> "gvl_qw"
| G_VL_qW_u -> "gvl_qw_u" | G_VL_qW_d -> "gvl_qw_d"
| G_SL_DttR -> "gsl_dttr" | G_SR_DttR -> "gsr_dttr" | G_SL_DttL -> "gsl_dttl"
| G_SLR_DbtR -> "gslr_dbtr" | G_SL_DbtL -> "gsl_dbtl"
| C_S1RR_bt -> "c_quqd1_1" | C_S1RR_tb -> "conjg(c_quqd1_1)"
| C_S1LL_bt -> "conjg(c_quqd1_2)" | C_S1LL_tb -> "c_quqd1_2"
| C_S1RL_bt -> "c_qu1" | C_S1RL_tb -> "conjg(c_qu1)"
| C_S1LR_bt -> "conjg(c_qd1)" | C_S1LR_tb -> "c_qd1"
| C_S8RR_bt -> "c_quqd8_1" | C_S8RR_tb -> "conjg(c_quqd8_1)"
| C_S8LL_bt -> "conjg(c_quqd8_2)" | C_S8LL_tb -> "c_quqd8_2"
| C_qq38 -> "c_qq38"
| G_CC -> "gcc"
| G_CCQ (n1,n2) -> "gccq" ^ string_of_int n1 ^ string_of_int n2
| I_Q_W -> "iqw" | I_G_ZWW -> "igzww"
| G_WWWW -> "gw4" | G_ZZWW -> "gzzww"
| G_AZWW -> "gazww" | G_AAWW -> "gaaww"
| I_G1_AWW -> "ig1a" | I_G1_ZWW -> "ig1z"
| I_G1_plus_kappa_plus_G4_AWW -> "ig1pkpg4a"
| I_G1_plus_kappa_plus_G4_ZWW -> "ig1pkpg4z"
| I_G1_plus_kappa_minus_G4_AWW -> "ig1pkmg4a"
| I_G1_plus_kappa_minus_G4_ZWW -> "ig1pkmg4z"
| I_G1_minus_kappa_plus_G4_AWW -> "ig1mkpg4a"
| I_G1_minus_kappa_plus_G4_ZWW -> "ig1mkpg4z"
| I_G1_minus_kappa_minus_G4_AWW -> "ig1mkmg4a"
| I_G1_minus_kappa_minus_G4_ZWW -> "ig1mkmg4z"
| I_lambda_AWW -> "ila"
| I_lambda_ZWW -> "ilz"
| G5_AWW -> "rg5a"
| G5_ZWW -> "rg5z"
| I_kappa5_AWW -> "ik5a"
| I_kappa5_ZWW -> "ik5z"
| I_lambda5_AWW -> "il5a" | I_lambda5_ZWW -> "il5z"
| Alpha_WWWW0 -> "alww0" | Alpha_WWWW2 -> "alww2"
| Alpha_ZZWW0 -> "alzw0" | Alpha_ZZWW1 -> "alzw1"
| Alpha_ZZZZ -> "alzz"
| D_Alpha_ZZWW0_S -> "dalzz0_s(gkm,mkm,"
| D_Alpha_ZZWW0_T -> "dalzz0_t(gkm,mkm,"
| D_Alpha_ZZWW1_S -> "dalzz1_s(gkm,mkm,"
| D_Alpha_ZZWW1_T -> "dalzz1_t(gkm,mkm,"
| D_Alpha_ZZWW1_U -> "dalzz1_u(gkm,mkm,"
| D_Alpha_WWWW0_S -> "dalww0_s(gkm,mkm,"
| D_Alpha_WWWW0_T -> "dalww0_t(gkm,mkm,"
| D_Alpha_WWWW0_U -> "dalww0_u(gkm,mkm,"
| D_Alpha_WWWW2_S -> "dalww2_s(gkm,mkm,"
| D_Alpha_WWWW2_T -> "dalww2_t(gkm,mkm,"
| D_Alpha_ZZZZ_S -> "dalz4_s(gkm,mkm,"
| D_Alpha_ZZZZ_T -> "dalz4_t(gkm,mkm,"
| G_HWW -> "ghww" | G_HZZ -> "ghzz"
| G_HHWW -> "ghhww" | G_HHZZ -> "ghhzz"
| G_Htt -> "ghtt" | G_Hbb -> "ghbb"
| G_Htautau -> "ghtautau" | G_Hcc -> "ghcc" | G_Hmm -> "ghmm"
| G_HGaZ -> "ghgaz" | G_HGaGa -> "ghgaga" | G_Hgg -> "ghgg"
| G_HGaGa_anom -> "ghgaga_ac" | G_HGaZ_anom -> "ghgaz_ac"
| G_HZZ_anom -> "ghzz_ac" | G_HWW_anom -> "ghww_ac"
| G_HGaZ_u -> "ghgaz_u" | G_HZZ_u -> "ghzz_u"
| G_HWW_u -> "ghww_u"
| G_H3 -> "gh3" | G_H4 -> "gh4"
| Gs -> "gs" | I_Gs -> "igs" | G2 -> "gs**2"
| Mass f -> "mass" ^ flavor_symbol f
| Width f -> "width" ^ flavor_symbol f
| K_Matrix_Coeff i -> "kc" ^ string_of_int i
| K_Matrix_Pole i -> "kp" ^ string_of_int i
end
(* \thocwmodulesection{Incomplete Standard Model in $R_\xi$ Gauge} *)
(* \begin{dubious}
At the end of the day, we want a functor mapping from gauge models
in unitarity gauge to $R_\xi$ gauge and vice versa. For this, we
will need a more abstract implementation of (spontaneously broken)
gauge theories.
\end{dubious} *)
module SM_Rxi =
struct
let rcs = RCS.rename rcs_file "Modellib.SM_Rxi"
[ "minimal electroweak standard model in R-xi gauge";
"NB: very incomplete still!, no CKM matrix" ]
open Coupling
module SM = SM(SM_no_anomalous)
let options = SM.options
type flavor = SM.flavor
let flavors = SM.flavors
let external_flavors = SM.external_flavors
type constant = SM.constant
let lorentz = SM.lorentz
let color = SM.color
let goldstone = SM.goldstone
let conjugate = SM.conjugate
let fermion = SM.fermion
(* \begin{dubious}
Check if it makes sense to have separate gauge fixing parameters
for each vector boson. There's probably only one independent
parameter for each group factor.
\end{dubious} *)
type gauge =
| XiA | XiZ | XiW
let gauge_symbol = function
| XiA -> "xia" | XiZ -> "xi0" | XiW -> "xipm"
(* Change the gauge boson propagators and make the Goldstone bosons
propagating. *)
let propagator = function
| SM.G SM.Ga -> Prop_Gauge XiA
| SM.G SM.Z -> Prop_Rxi XiZ
| SM.G SM.Wp | SM.G SM.Wm -> Prop_Rxi XiW
| SM.O SM.Phip | SM.O SM.Phim | SM.O SM.Phi0 -> Prop_Scalar
| f -> SM.propagator f
let width = SM.width
module Ch = Charges.QQ
let charges = SM.charges
module F = Modeltools.Fusions (struct
type f = flavor
type c = constant
let compare = compare
let conjugate = conjugate
end)
let vertices = SM.vertices
let table = F.of_vertices (vertices ())
let fuse2 = F.fuse2 table
let fuse3 = F.fuse3 table
let fuse = F.fuse table
let max_degree () = 3
let parameters = SM.parameters
let flavor_of_string = SM.flavor_of_string
let flavor_to_string = SM.flavor_to_string
let flavor_to_TeX = SM.flavor_to_TeX
let flavor_symbol = SM.flavor_symbol
let pdg = SM.pdg
let mass_symbol = SM.mass_symbol
let width_symbol = SM.width_symbol
let constant_symbol = SM.constant_symbol
end
(* \thocwmodulesection{QCD with electroweak insertions.} *)
module SM_QCD =
struct
let rcs = RCS.rename rcs_file "Modellib.SM_QCD"
[ "QCD with electroweak insertions"]
open Coupling
let default_width = ref Timelike
let use_fudged_width = ref false
let options = Options.create
[ "constant_width", Arg.Unit (fun () -> default_width := Constant),
"use constant width (also in t-channel)";
"fudged_width", Arg.Set use_fudged_width,
"use fudge factor for charge particle width";
"custom_width", Arg.String (fun f -> default_width := Custom f),
"use custom width";
"cancel_widths", Arg.Unit (fun () -> default_width := Vanishing),
"use vanishing width"]
type matter_field = L of int | N of int | U of int | D of int
type gauge_boson = Ga | GaX | Wp | Wm | Z | Gl
type other = H
type flavor = M of matter_field | G of gauge_boson | O of other
let matter_field f = M f
let gauge_boson f = G f
let other f = O f
type field =
| Matter of matter_field
| Gauge of gauge_boson
| Other of other
let field = function
| M f -> Matter f
| G f -> Gauge f
| O f -> Other f
type gauge = unit
let gauge_symbol () =
failwith "Modellib.SM_QCD.gauge_symbol: internal error"
let family n = List.map matter_field [ L n; N n; U n; D n ]
let external_flavors () =
[ "1st Generation", ThoList.flatmap family [1; -1];
"2nd Generation", ThoList.flatmap family [2; -2];
"3rd Generation", ThoList.flatmap family [3; -3];
"Gauge Bosons", List.map gauge_boson [Ga; GaX; Z; Wp; Wm; Gl];
"Higgs", List.map other [H] ]
let flavors () = ThoList.flatmap snd (external_flavors ())
let spinor n =
if n >= 0 then
Spinor
else
ConjSpinor
let lorentz_aux = function
| 2 -> Tensor_1
| 1 -> Vector
| 0 -> Scalar
| _ -> invalid_arg ("SM_QCD.lorentz_aux: wrong value")
let lorentz = function
| M f ->
begin match f with
| L n -> spinor n | N n -> spinor n
| U n -> spinor n | D n -> spinor n
end
| G f ->
begin match f with
| Ga | GaX | Gl -> Vector
| Wp | Wm | Z -> Massive_Vector
end
| O f ->
begin match f with
| _ -> Scalar
end
let color = function
| M (U n) -> Color.SUN (if n > 0 then 3 else -3)
| M (D n) -> Color.SUN (if n > 0 then 3 else -3)
| G Gl -> Color.AdjSUN 3
| _ -> Color.Singlet
let prop_spinor n =
if n >= 0 then
Prop_Spinor
else
Prop_ConjSpinor
let prop_aux = function
| 2 -> Aux_Tensor_1
| 1 -> Aux_Vector
| 0 -> Aux_Scalar
| _ -> invalid_arg ("SM_QCD.prop_aux: wrong value")
let propagator = function
| M f ->
begin match f with
| L n -> prop_spinor n | N n -> prop_spinor n
| U n -> prop_spinor n | D n -> prop_spinor n
end
| G f ->
begin match f with
| Ga | GaX | Gl -> Prop_Feynman
| Wp | Wm | Z -> Prop_Unitarity
end
| O f ->
begin match f with
| H -> Prop_Scalar
end
(* Optionally, ask for the fudge factor treatment for the widths of
charged particles. Currently, this only applies to $W^\pm$ and top. *)
let width f =
if !use_fudged_width then
match f with
| G Wp | G Wm | M (U 3) | M (U (-3)) -> Fudged
| _ -> !default_width
else
!default_width
let goldstone _ = None
let conjugate = function
| M f ->
M (begin match f with
| L n -> L (-n) | N n -> N (-n)
| U n -> U (-n) | D n -> D (-n)
end)
| G f ->
G (begin match f with
| Gl -> Gl | Ga -> GaX | Z -> Z
| GaX -> Ga | Wp -> Wm | Wm -> Wp
end)
| O f ->
O (begin match f with
| H -> H
end)
let fermion = function
| M f ->
begin match f with
| L n -> if n > 0 then 1 else -1
| N n -> if n > 0 then 1 else -1
| U n -> if n > 0 then 1 else -1
| D n -> if n > 0 then 1 else -1
end
| G f ->
begin match f with
| Gl | Ga | GaX | Z | Wp | Wm -> 0
end
| O _ -> 0
(* Electrical charge, lepton number, baryon number. We could avoid the
rationals altogether by multiplying the first and last by 3 \ldots *)
module Ch = Charges.QQ
let ( // ) = Algebra.Small_Rational.make
let generation' = function
| 1 -> [ 1//1; 0//1; 0//1]
| 2 -> [ 0//1; 1//1; 0//1]
| 3 -> [ 0//1; 0//1; 1//1]
| -1 -> [-1//1; 0//1; 0//1]
| -2 -> [ 0//1; -1//1; 0//1]
| -3 -> [ 0//1; 0//1; -1//1]
| n -> invalid_arg ("SM_QCD.generation': " ^ string_of_int n)
let generation f =
match f with
| M (L n | N n | U n | D n) -> generation' n
| G _ | O _ -> [0//1; 0//1; 0//1]
let charge = function
| M f ->
begin match f with
| L n -> if n > 0 then -1//1 else 1//1
| N n -> 0//1
| U n -> if n > 0 then 2//3 else -2//3
| D n -> if n > 0 then -1//3 else 1//3
end
| G f ->
begin match f with
| Gl | Ga | GaX | Z -> 0//1
| Wp -> 1//1
| Wm -> -1//1
end
| O f ->
begin match f with
| H -> 0//1
end
let lepton = function
| M f ->
begin match f with
| L n | N n -> if n > 0 then 1//1 else -1//1
| U _ | D _ -> 0//1
end
| G _ | O _ -> 0//1
let baryon = function
| M f ->
begin match f with
| L _ | N _ -> 0//1
| U n | D n -> if n > 0 then 1//1 else -1//1
end
| G _ | O _ -> 0//1
let charges f =
[ charge f; lepton f; baryon f] @ generation f
type constant =
| Unit | Half | Pi | Alpha_QED | Sin2thw
| Sinthw | Costhw | E | G_weak | I_G_weak | Vev
| Q_lepton | Q_up | Q_down | G_CC | G_CCQ of int*int
| G_NC_neutrino | G_NC_lepton | G_NC_up | G_NC_down
| I_Q_W | G_Htt | G_Hbb | G_Hcc | G_Hmm | G_Htautau
| Gs | I_Gs | G2
| Mass of flavor | Width of flavor
(* \begin{dubious}
The current abstract syntax for parameter dependencies is admittedly
tedious. Later, there will be a parser for a convenient concrete syntax
as a part of a concrete syntax for models. But as these examples show,
it should include simple functions.
\end{dubious} *)
(* \begin{subequations}
\begin{align}
\alpha_{\text{QED}} &= \frac{1}{137.0359895} \\
\sin^2\theta_w &= 0.23124
\end{align}
\end{subequations} *)
let input_parameters =
[ Alpha_QED, 1. /. 137.0359895;
Sin2thw, 0.23124;
Mass (G Z), 91.187;
Mass (M (N 1)), 0.0; Mass (M (L 1)), 0.51099907e-3;
Mass (M (N 2)), 0.0; Mass (M (L 2)), 0.105658389;
Mass (M (N 3)), 0.0; Mass (M (L 3)), 1.77705;
Mass (M (U 1)), 5.0e-3; Mass (M (D 1)), 3.0e-3;
Mass (M (U 2)), 1.2; Mass (M (D 2)), 0.1;
Mass (M (U 3)), 174.0; Mass (M (D 3)), 4.2 ]
let derived_parameters =
[ Real E, Sqrt (Prod [Const 4; Atom Pi; Atom Alpha_QED]);
Real Sinthw, Sqrt (Atom Sin2thw);
Real Costhw, Sqrt (Diff (Const 1, Atom Sin2thw));
Real G_weak, Quot (Atom E, Atom Sinthw);
Real (Mass (G Wp)), Prod [Atom Costhw; Atom (Mass (G Z))];
Real Vev, Quot (Prod [Const 2; Atom (Mass (G Wp))], Atom G_weak);
Real Q_lepton, Atom E;
Real Q_up, Prod [Quot (Const (-2), Const 3); Atom E];
Real Q_down, Prod [Quot (Const 1, Const 3); Atom E];
Real G_CC, Neg (Quot (Atom G_weak, Prod [Const 2; Sqrt (Const 2)]));
Complex I_Q_W, Prod [I; Atom E]]
let g_over_2_costh =
Quot (Neg (Atom G_weak), Prod [Const 2; Atom Costhw])
let nc_coupling c t3 q =
(Real_Array c,
[Prod [g_over_2_costh; Diff (t3, Prod [Const 2; q; Atom Sin2thw])];
Prod [g_over_2_costh; t3]])
let half = Quot (Const 1, Const 2)
let derived_parameter_arrays =
[ nc_coupling G_NC_neutrino half (Const 0);
nc_coupling G_NC_lepton (Neg half) (Const (-1));
nc_coupling G_NC_up half (Quot (Const 2, Const 3));
nc_coupling G_NC_down (Neg half) (Quot (Const (-1), Const 3)) ]
let parameters () =
{ input = input_parameters;
derived = derived_parameters;
derived_arrays = derived_parameter_arrays }
module F = Modeltools.Fusions (struct
type f = flavor
type c = constant
let compare = compare
let conjugate = conjugate
end)
let mgm ((m1, g, m2), fbf, c) = ((M m1, G g, M m2), fbf, c)
let mom ((m1, o, m2), fbf, c) = ((M m1, O o, M m2), fbf, c)
let electromagnetic_currents n =
List.map mgm
[ ((L (-n), GaX, L n), FBF (1, Psibar, V, Psi), Q_lepton);
((U (-n), Ga, U n), FBF (1, Psibar, V, Psi), Q_up);
((D (-n), Ga, D n), FBF (1, Psibar, V, Psi), Q_down) ]
let color_currents n =
List.map mgm
[ ((U (-n), Gl, U n), FBF ((-1), Psibar, V, Psi), Gs);
((D (-n), Gl, D n), FBF ((-1), Psibar, V, Psi), Gs) ]
(* \begin{equation}
\mathcal{L}_{\textrm{NC}} =
- \frac{g}{2\cos\theta_W}
\sum_i \bar\psi_i\fmslash{Z}(g_V^i-g_A^i\gamma_5)\psi_i
\end{equation} *)
let neutral_currents n =
List.map mgm
[ ((L (-n), Z, L n), FBF (1, Psibar, VA, Psi), G_NC_lepton);
((N (-n), Z, N n), FBF (1, Psibar, VA, Psi), G_NC_neutrino);
((U (-n), Z, U n), FBF (1, Psibar, VA, Psi), G_NC_up);
((D (-n), Z, D n), FBF (1, Psibar, VA, Psi), G_NC_down) ]
(* \begin{equation}
\mathcal{L}_{\textrm{CC}} =
- \frac{g}{2\sqrt2} \sum_i \bar\psi_i
(T^+\fmslash{W}^+ + T^-\fmslash{W}^-)(1-\gamma_5)\psi_i
\end{equation} *)
let charged_currents' n =
List.map mgm
[ ((L (-n), Wm, N n), FBF (1, Psibar, VL, Psi), G_CC);
((N (-n), Wp, L n), FBF (1, Psibar, VL, Psi), G_CC) ]
let charged_currents'' n =
List.map mgm
[ ((D (-n), Wm, U n), FBF (1, Psibar, VL, Psi), G_CC);
((U (-n), Wp, D n), FBF (1, Psibar, VL, Psi), G_CC) ]
let charged_currents_triv =
ThoList.flatmap charged_currents' [1;2;3] @
ThoList.flatmap charged_currents'' [1;2;3]
let charged_currents_ckm =
let charged_currents_2 n1 n2 =
List.map mgm
[ ((D (-n1), Wm, U n2), FBF (1, Psibar, VL, Psi), G_CCQ (n2,n1));
((U (-n1), Wp, D n2), FBF (1, Psibar, VL, Psi), G_CCQ (n1,n2)) ] in
ThoList.flatmap charged_currents' [1;2;3] @
List.flatten (Product.list2 charged_currents_2 [1;2;3] [1;2;3])
let yukawa =
[ ((M (U (-3)), O H, M (U 3)), FBF (1, Psibar, S, Psi), G_Htt);
((M (D (-3)), O H, M (D 3)), FBF (1, Psibar, S, Psi), G_Hbb);
((M (U (-2)), O H, M (U 2)), FBF (1, Psibar, S, Psi), G_Hcc);
((M (L (-2)), O H, M (L 2)), FBF (1, Psibar, S, Psi), G_Hmm);
((M (L (-3)), O H, M (L 3)), FBF (1, Psibar, S, Psi), G_Htautau) ]
(* \begin{equation}
\mathcal{L}_{\textrm{TGC}} =
- e \partial_\mu A_\nu W_+^\mu W_-^\nu + \ldots
- e \cot\theta_w \partial_\mu Z_\nu W_+^\mu W_-^\nu + \ldots
\end{equation} *)
let tgc ((g1, g2, g3), t, c) = ((G g1, G g2, G g3), t, c)
let triple_gauge =
List.map tgc
[ ((Gl, Gl, Gl), Gauge_Gauge_Gauge 1, I_Gs)]
let qgc ((g1, g2, g3, g4), t, c) = ((G g1, G g2, G g3, G g4), t, c)
let gauge4 = Vector4 [(2, C_13_42); (-1, C_12_34); (-1, C_14_23)]
let minus_gauge4 = Vector4 [(-2, C_13_42); (1, C_12_34); (1, C_14_23)]
let quartic_gauge =
List.map qgc
[ (Gl, Gl, Gl, Gl), gauge4, G2 ]
let vertices3 =
(ThoList.flatmap electromagnetic_currents [1;2;3] @
ThoList.flatmap color_currents [1;2;3] @
ThoList.flatmap neutral_currents [1;2;3] @
charged_currents_triv @
yukawa @ triple_gauge)
let vertices4 =
quartic_gauge
let vertices () = (vertices3, vertices4, [])
(* For efficiency, make sure that [F.of_vertices vertices] is
evaluated only once. *)
let table = F.of_vertices (vertices ())
let fuse2 = F.fuse2 table
let fuse3 = F.fuse3 table
let fuse = F.fuse table
let max_degree () = 4
let flavor_of_string = function
| "e-" -> M (L 1) | "e+" -> M (L (-1))
| "mu-" -> M (L 2) | "mu+" -> M (L (-2))
| "tau-" -> M (L 3) | "tau+" -> M (L (-3))
| "nue" -> M (N 1) | "nuebar" -> M (N (-1))
| "numu" -> M (N 2) | "numubar" -> M (N (-2))
| "nutau" -> M (N 3) | "nutaubar" -> M (N (-3))
| "u" -> M (U 1) | "ubar" -> M (U (-1))
| "c" -> M (U 2) | "cbar" -> M (U (-2))
| "t" -> M (U 3) | "tbar" -> M (U (-3))
| "d" -> M (D 1) | "dbar" -> M (D (-1))
| "s" -> M (D 2) | "sbar" -> M (D (-2))
| "b" -> M (D 3) | "bbar" -> M (D (-3))
| "g" | "gl" -> G Gl
| "A" -> G Ga | "Z" | "Z0" -> G Z
| "W+" -> G Wp | "W-" -> G Wm
| "H" -> O H
| _ -> invalid_arg "Modellib.SM_QCD.flavor_of_string"
let flavor_to_string = function
| M f ->
begin match f with
| L 1 -> "e-" | L (-1) -> "e+"
| L 2 -> "mu-" | L (-2) -> "mu+"
| L 3 -> "tau-" | L (-3) -> "tau+"
| L _ -> invalid_arg
"Modellib.SM_QCD.flavor_to_string: invalid lepton"
| N 1 -> "nue" | N (-1) -> "nuebar"
| N 2 -> "numu" | N (-2) -> "numubar"
| N 3 -> "nutau" | N (-3) -> "nutaubar"
| N _ -> invalid_arg
"Modellib.SM_QCD.flavor_to_string: invalid neutrino"
| U 1 -> "u" | U (-1) -> "ubar"
| U 2 -> "c" | U (-2) -> "cbar"
| U 3 -> "t" | U (-3) -> "tbar"
| U _ -> invalid_arg
"Modellib.SM_QCD.flavor_to_string: invalid up type quark"
| D 1 -> "d" | D (-1) -> "dbar"
| D 2 -> "s" | D (-2) -> "sbar"
| D 3 -> "b" | D (-3) -> "bbar"
| D _ -> invalid_arg
"Modellib.SM_QCD.flavor_to_string: invalid down type quark"
end
| G f ->
begin match f with
| Gl -> "gl"
| Ga | GaX -> "A" | Z -> "Z"
| Wp -> "W+" | Wm -> "W-"
end
| O f ->
begin match f with
| H -> "H"
end
let flavor_to_TeX = function
| M f ->
begin match f with
| L 1 -> "e^-" | L (-1) -> "e^+"
| L 2 -> "\\mu^-" | L (-2) -> "\\mu^+"
| L 3 -> "\\tau^-" | L (-3) -> "\\tau^+"
| L _ -> invalid_arg
"Modellib.SM_QCD.flavor_to_TeX: invalid lepton"
| N 1 -> "\\nu_e" | N (-1) -> "\\bar{\\nu}_e"
| N 2 -> "\\nu_\\mu" | N (-2) -> "\\bar{\\nu}_\\mu"
| N 3 -> "\\nu_\\tau" | N (-3) -> "\\bar{\\nu}_\\tau"
| N _ -> invalid_arg
"Modellib.SM_QCD.flavor_to_TeX: invalid neutrino"
| U 1 -> "u" | U (-1) -> "\\bar{u}"
| U 2 -> "c" | U (-2) -> "\\bar{c}"
| U 3 -> "t" | U (-3) -> "\\bar{t}"
| U _ -> invalid_arg
"Modellib.SM_QCD.flavor_to_TeX: invalid up type quark"
| D 1 -> "d" | D (-1) -> "\\bar{d}"
| D 2 -> "s" | D (-2) -> "\\bar{s}"
| D 3 -> "b" | D (-3) -> "\\bar{b}"
| D _ -> invalid_arg
"Modellib.SM_QCD.flavor_to_TeX: invalid down type quark"
end
| G f ->
begin match f with
| Gl -> "g"
| Ga | GaX -> "\\gamma" | Z -> "Z"
| Wp -> "W^+" | Wm -> "W^-"
end
| O f ->
begin match f with
| H -> "H"
end
let flavor_symbol = function
| M f ->
begin match f with
| L n when n > 0 -> "l" ^ string_of_int n
| L n -> "l" ^ string_of_int (abs n) ^ "b"
| N n when n > 0 -> "n" ^ string_of_int n
| N n -> "n" ^ string_of_int (abs n) ^ "b"
| U n when n > 0 -> "u" ^ string_of_int n
| U n -> "u" ^ string_of_int (abs n) ^ "b"
| D n when n > 0 -> "d" ^ string_of_int n
| D n -> "d" ^ string_of_int (abs n) ^ "b"
end
| G f ->
begin match f with
| Gl -> "gl"
| Ga -> "a" | Z -> "z"
| GaX -> "gax"
| Wp -> "wp" | Wm -> "wm"
end
| O f ->
begin match f with
| H -> "h"
end
let pdg = function
| M f ->
begin match f with
| L n when n > 0 -> 9 + 2*n
| L n -> - 9 + 2*n
| N n when n > 0 -> 10 + 2*n
| N n -> - 10 + 2*n
| U n when n > 0 -> 2*n
| U n -> 2*n
| D n when n > 0 -> - 1 + 2*n
| D n -> 1 + 2*n
end
| G f ->
begin match f with
| Gl -> 21
| Ga | GaX -> 22 | Z -> 23
| Wp -> 24 | Wm -> (-24)
end
| O f ->
begin match f with
| H -> 25
end
let mass_symbol f =
"mass(" ^ string_of_int (abs (pdg f)) ^ ")"
let width_symbol f =
"width(" ^ string_of_int (abs (pdg f)) ^ ")"
let constant_symbol = function
| Unit -> "unit" | Half -> "half" | Pi -> "PI"
| Alpha_QED -> "alpha" | E -> "e" | G_weak -> "g" | Vev -> "vev"
| I_G_weak -> "ig"
| Sin2thw -> "sin2thw" | Sinthw -> "sinthw" | Costhw -> "costhw"
| Q_lepton -> "qlep" | Q_up -> "qup" | Q_down -> "qdwn"
| G_NC_lepton -> "gnclep" | G_NC_neutrino -> "gncneu"
| G_NC_up -> "gncup" | G_NC_down -> "gncdwn"
| G_CC -> "gcc"
| G_CCQ (n1,n2) -> "gccq" ^ string_of_int n1 ^ string_of_int n2
| I_Q_W -> "iqw"
| G_Htt -> "ghtt" | G_Hbb -> "ghbb"
| G_Htautau -> "ghtautau" | G_Hcc -> "ghcc" | G_Hmm -> "ghmm"
| Gs -> "gs" | I_Gs -> "igs" | G2 -> "gs**2"
| Mass f -> "mass" ^ flavor_symbol f
| Width f -> "width" ^ flavor_symbol f
end
(* \thocwmodulesection{Groves} *)
module Groves (M : Model.Gauge) : Model.Gauge with module Ch = M.Ch =
struct
let max_generations = 5
let rcs = RCS.rename M.rcs
("Modellib.Groves(" ^ (RCS.name M.rcs) ^ ")")
([ "experimental Groves functor";
Printf.sprintf "for maximally %d flavored legs"
(2 * max_generations) ] @
RCS.description M.rcs)
let options = M.options
type matter_field = M.matter_field * int
type gauge_boson = M.gauge_boson
type other = M.other
type field =
| Matter of matter_field
| Gauge of gauge_boson
| Other of other
type flavor = M of matter_field | G of gauge_boson | O of other
let matter_field (f, g) = M (f, g)
let gauge_boson f = G f
let other f = O f
let field = function
| M f -> Matter f
| G f -> Gauge f
| O f -> Other f
let project = function
| M (f, _) -> M.matter_field f
| G f -> M.gauge_boson f
| O f -> M.other f
let inject g f =
match M.field f with
| M.Matter f -> M (f, g)
| M.Gauge f -> G f
| M.Other f -> O f
type gauge = M.gauge
let gauge_symbol = M.gauge_symbol
let color f = M.color (project f)
let pdg f = M.pdg (project f)
let lorentz f = M.lorentz (project f)
let propagator f = M.propagator (project f)
let fermion f = M.fermion (project f)
let width f = M.width (project f)
let mass_symbol f = M.mass_symbol (project f)
let width_symbol f = M.width_symbol (project f)
let flavor_symbol f = M.flavor_symbol (project f)
type constant = M.constant
let constant_symbol = M.constant_symbol
let max_degree = M.max_degree
let parameters = M.parameters
let conjugate = function
| M (_, g) as f -> inject g (M.conjugate (project f))
| f -> inject 0 (M.conjugate (project f))
let read_generation s =
try
let offset = String.index s '/' in
(int_of_string
(String.sub s (succ offset) (String.length s - offset - 1)),
String.sub s 0 offset)
with
| Not_found -> (1, s)
let format_generation c s =
s ^ "/" ^ string_of_int c
let flavor_of_string s =
let g, s = read_generation s in
inject g (M.flavor_of_string s)
let flavor_to_string = function
| M (_, g) as f -> format_generation g (M.flavor_to_string (project f))
| f -> M.flavor_to_string (project f)
let flavor_to_TeX = function
| M (_, g) as f -> format_generation g (M.flavor_to_TeX (project f))
| f -> M.flavor_to_TeX (project f)
let goldstone = function
| G _ as f ->
begin match M.goldstone (project f) with
| None -> None
| Some (f, c) -> Some (inject 0 f, c)
end
| M _ | O _ -> None
let clone generations flavor =
match M.field flavor with
| M.Matter f -> List.map (fun g -> M (f, g)) generations
| M.Gauge f -> [G f]
| M.Other f -> [O f]
let generations = ThoList.range 1 max_generations
let flavors () =
ThoList.flatmap (clone generations) (M.flavors ())
let external_flavors () =
List.map (fun (s, fl) -> (s, ThoList.flatmap (clone generations) fl))
(M.external_flavors ())
module Ch = M.Ch
let charges f = M.charges (project f)
module F = Modeltools.Fusions (struct
type f = flavor
type c = constant
let compare = compare
let conjugate = conjugate
end)
(* In the following functions, we might replace [_] by [(M.Gauge _ | M.Other _)],
in order to allow the compiler to check completeness. However, this
makes the code much less readable. *)
let clone3 ((f1, f2, f3), v, c) =
match M.field f1, M.field f2, M.field f3 with
| M.Matter _, M.Matter _, M.Matter _ ->
invalid_arg "Modellib.Groves().vertices: three matter fields!"
| M.Matter f1', M.Matter f2', _ ->
List.map (fun g -> ((M (f1', g), M (f2', g), inject 0 f3), v, c))
generations
| M.Matter f1', _, M.Matter f3' ->
List.map (fun g -> ((M (f1', g), inject 0 f2, M (f3', g)), v, c))
generations
| _, M.Matter f2', M.Matter f3' ->
List.map (fun g -> ((inject 0 f1, M (f2', g), M (f3', g)), v, c))
generations
| M.Matter _, _, _ | _, M.Matter _, _ | _, _, M.Matter _ ->
invalid_arg "Modellib.Groves().vertices: lone matter field!"
| _, _, _ ->
[(inject 0 f1, inject 0 f2, inject 0 f3), v, c]
let clone4 ((f1, f2, f3, f4), v, c) =
match M.field f1, M.field f2, M.field f3, M.field f4 with
| M.Matter _, M.Matter _, M.Matter _, M.Matter _ ->
invalid_arg "Modellib.Groves().vertices: four matter fields!"
| M.Matter _, M.Matter _, M.Matter _, _
| M.Matter _, M.Matter _, _, M.Matter _
| M.Matter _, _, M.Matter _, M.Matter _
| _, M.Matter _, M.Matter _, M.Matter _ ->
invalid_arg "Modellib.Groves().vertices: three matter fields!"
| M.Matter f1', M.Matter f2', _, _ ->
List.map (fun g ->
((M (f1', g), M (f2', g), inject 0 f3, inject 0 f4), v, c))
generations
| M.Matter f1', _, M.Matter f3', _ ->
List.map (fun g ->
((M (f1', g), inject 0 f2, M (f3', g), inject 0 f4), v, c))
generations
| M.Matter f1', _, _, M.Matter f4' ->
List.map (fun g ->
((M (f1', g), inject 0 f2, inject 0 f3, M (f4', g)), v, c))
generations
| _, M.Matter f2', M.Matter f3', _ ->
List.map (fun g ->
((inject 0 f1, M (f2', g), M (f3', g), inject 0 f4), v, c))
generations
| _, M.Matter f2', _, M.Matter f4' ->
List.map (fun g ->
((inject 0 f1, M (f2', g), inject 0 f3, M (f4', g)), v, c))
generations
| _, _, M.Matter f3', M.Matter f4' ->
List.map (fun g ->
((inject 0 f1, inject 0 f2, M (f3', g), M (f4', g)), v, c))
generations
| M.Matter _, _, _, _ | _, M.Matter _, _, _
| _, _, M.Matter _, _ | _, _, _, M.Matter _ ->
invalid_arg "Modellib.Groves().vertices: lone matter field!"
| _, _, _, _ ->
[(inject 0 f1, inject 0 f2, inject 0 f3, inject 0 f4), v, c]
let clonen (fl, v, c) =
match List.map M.field fl with
| _ -> failwith "Modellib.Groves().vertices: incomplete"
let vertices () =
let vertices3, vertices4, verticesn = M.vertices () in
(ThoList.flatmap clone3 vertices3,
ThoList.flatmap clone4 vertices4,
ThoList.flatmap clonen verticesn)
let table = F.of_vertices (vertices ())
let fuse2 = F.fuse2 table
let fuse3 = F.fuse3 table
let fuse = F.fuse table
(* \begin{dubious}
The following (incomplete) alternative implementations are
included for illustrative purposes only:
\end{dubious} *)
let injectl g fcl =
List.map (fun (f, c) -> (inject g f, c)) fcl
let alt_fuse2 f1 f2 =
match f1, f2 with
| M (f1', g1'), M (f2', g2') ->
if g1' = g2' then
injectl 0 (M.fuse2 (M.matter_field f1') (M.matter_field f2'))
else
[]
| M (f1', g'), _ -> injectl g' (M.fuse2 (M.matter_field f1') (project f2))
| _, M (f2', g') -> injectl g' (M.fuse2 (project f1) (M.matter_field f2'))
| _, _ -> injectl 0 (M.fuse2 (project f1) (project f2))
let alt_fuse3 f1 f2 f3 =
match f1, f2, f3 with
| M (f1', g1'), M (f2', g2'), M (f3', g3') ->
invalid_arg "Modellib.Groves().fuse3: three matter fields!"
| M (f1', g1'), M (f2', g2'), _ ->
if g1' = g2' then
injectl 0
(M.fuse3 (M.matter_field f1') (M.matter_field f2') (project f3))
else
[]
| M (f1', g1'), _, M (f3', g3') ->
if g1' = g3' then
injectl 0
(M.fuse3 (M.matter_field f1') (project f2) (M.matter_field f3'))
else
[]
| _, M (f2', g2'), M (f3', g3') ->
if g2' = g3' then
injectl 0
(M.fuse3 (project f1) (M.matter_field f2') (M.matter_field f3'))
else
[]
| M (f1', g'), _, _ ->
injectl g' (M.fuse3 (M.matter_field f1') (project f2) (project f3))
| _, M (f2', g'), _ ->
injectl g' (M.fuse3 (project f1) (M.matter_field f2') (project f3))
| _, _, M (f3', g') ->
injectl g' (M.fuse3 (project f1) (project f2) (M.matter_field f3'))
| _, _, _ -> injectl 0 (M.fuse3 (project f1) (project f2) (project f3))
end
(* \thocwmodulesection{MSM With Cloned Families} *)
module SM_clones = Groves(SM(SM_no_anomalous))
(*i
* Local Variables:
* mode:caml
* indent-tabs-mode:nil
* page-delimiter:"^(\\* .*\n"
* End:
i*)
Index: branches/bach/release_2.1.1_hoppet_top_features/src/omega/src/omega_SM_tt_threshold.ml
===================================================================
--- branches/bach/release_2.1.1_hoppet_top_features/src/omega/src/omega_SM_tt_threshold.ml (revision 0)
+++ branches/bach/release_2.1.1_hoppet_top_features/src/omega/src/omega_SM_tt_threshold.ml (revision 5349)
@@ -0,0 +1,35 @@
+(* $Id: omega_SM_tt_threshold.ml 1340 2009-12-02 23:45:04Z ohl $
+
+ Copyright (C) 1999-2012 by
+
+ Wolfgang Kilian <kilian@physik.uni-siegen.de>
+ Thorsten Ohl <ohl@physik.uni-wuerzburg.de>
+ Juergen Reuter <juergen.reuter@physik.uni-freiburg.de>
+ Christian Speckner <christian.speckner@physik.uni-freiburg.de>
+ Fabian Bach <fabian.bach@cern.ch> (only this file)
+
+ WHIZARD is free software; you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ WHIZARD is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *)
+
+module O = Omega.Make(Fusion.Mixed23)(Targets.Fortran)
+ (Modellib_SM.SM(Modellib_SM.SM_tt_threshold))
+let _ = O.main ()
+
+(*i
+ * Local Variables:
+ * mode:caml
+ * indent-tabs-mode:nil
+ * page-delimiter:"^(\\* .*\n"
+ * End:
+i*)
Index: branches/bach/release_2.1.1_hoppet_top_features/src/misc/ilc_tt_threshold.f90
===================================================================
--- branches/bach/release_2.1.1_hoppet_top_features/src/misc/ilc_tt_threshold.f90 (revision 5348)
+++ branches/bach/release_2.1.1_hoppet_top_features/src/misc/ilc_tt_threshold.f90 (revision 5349)
@@ -1,469 +1,461 @@
! WHIZARD <<Version>> <<Date>>
! Copyright (C) 1999-2013 by
! Wolfgang Kilian <kilian@physik.uni-siegen.de>
! Thorsten Ohl <ohl@physik.uni-wuerzburg.de>
! Juergen Reuter <juergen.reuter@desy.de>
! Christian Speckner <christian.speckner@physik.uni-freiburg.de>
! Fabian Bach <fabian.bach@desy.de> (only this file)
!
! WHIZARD is free software; you can redistribute it and/or modify it
! under the terms of the GNU General Public License as published by
! the Free Software Foundation; either version 2, or (at your option)
! any later version.
!
! WHIZARD is distributed in the hope that it will be useful, but
! WITHOUT ANY WARRANTY; without even the implied warranty of
! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
! GNU General Public License for more details.
!
! You should have received a copy of the GNU General Public License
! along with this program; if not, write to the Free Software
! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
module ilc_tt_threshold
use kinds
use constants, only: CF, imago
use file_utils, only: free_unit
use iso_varying_string, string_t => varying_string !NODEP!
use sm_physics !NODEP!
use interp !NODEP!
use nr_hypgeo_interface !NODEP!
use system_dependencies !NODEP!
implicit none
save
private
integer, parameter :: data_num = 100
real(default), parameter :: dm = 30.0_default
integer :: init = 0
integer :: nloop = -1
integer :: data_num_va(2)
real(default) :: vsoft = 0.
real(single) :: en_ref = -1.E9
real(single) :: switch = 1.
! real(default) :: switch = sqrt( 0.64_default )
real(default) :: asoft, mtpole, gam, ptmax, intv(2)
! real(default), allocatable, dimension ( :, : ) :: k_data, r_data
real(default) :: k_data(2,data_num), r_data(2,data_num)
public :: ilc_tt_init, ilc_tt_formfactor
contains
- subroutine ilc_tt_init (mpole, width, m1s, vs, vmax, nl, init_in)
+ subroutine ilc_tt_init (mpole, width, vs, vmax, nl, init_in)
real(default), intent(inout) :: mpole
real(default), intent(in) :: width
real(default), intent(in) :: m1s
real(default), intent(in) :: vs
real(default), intent(in) :: vmax
integer, intent(in) :: nl
integer, intent(in), optional :: init_in
if ( init==0 ) print *, "Initialize vector/axial ttbar threshold production resummation:"
if ( .not.present(init_in) ) then
- call ilc_tt_init_semi (mpole, width, m1s, vs, vmax, nl)
+ call ilc_tt_init_semi (mpole, width, vs, vmax, nl)
else
select case (init_in)
case (1)
- call ilc_tt_init_interp (mpole, width, m1s, vs, vmax, nl)
+ call ilc_tt_init_interp (mpole, width, vs, vmax, nl)
case (2)
- call ilc_tt_init_analytic (mpole, width, m1s, vs, vmax, nl)
+ call ilc_tt_init_analytic (mpole, width, vs, vmax, nl)
case (3)
- call ilc_tt_init_semi (mpole, width, m1s, vs, vmax, nl)
+ call ilc_tt_init_semi (mpole, width, vs, vmax, nl)
case default
print *, " ERROR: invalid form factor approach!"
print *, " ERROR: rv/ra => LO!"
init = 0
end select
end if
+ if ( init==1 ) print *, " bound state mass m1S = ", mpole_to_m1s (mtpole, asoft)
end subroutine ilc_tt_init
- subroutine ilc_tt_init_interp (mpole, width, m1s, vs, vmax, nl)
+ subroutine ilc_tt_init_interp (mpole, width, vs, vmax, nl)
real(default), intent(inout) :: mpole
real(default), intent(in) :: width
- real(default), intent(in) :: m1s
real (default), intent(in) :: vs
real (default), intent(in) :: vmax
integer, intent(in) :: nl
integer :: i, j
integer :: io_error
real(default) :: k
real(default) :: r
type(string_t), dimension(2) :: rva
type(string_t), dimension(2) :: scanfile
type(string_t) :: mprefix
character(len=1) :: nloop_s
character(len=3) :: vsoft_s
integer :: u
if ( init==1 ) then
if ( (nl==nloop) .and. (vs==vsoft) ) then
return
else
init = 0
! if ( allocated(k_data) ) deallocate ( k_data )
! if ( allocated(r_data) ) deallocate ( r_data )
end if
end if
- call init_parameters (mpole, width, m1s, vs, vmax, nl)
+ call init_parameters (mpole, width, vs, vmax, nl)
! data_num = 0
rva = (/ "rv", "ra" /)
! mprefix = PKGDATADIR // "/ilc_tt_threshold/scan_"
mprefix = PREFIX // "/share/whizard/ilc_tt_threshold/scan_"
write (nloop_s, '(i1)') nloop
write (vsoft_s, '(f3.1)') vsoft
print *, " Use numeric threshold shape interpolation (no interference)"
if ( nloop > 2 ) then
print *, " WARNING: numeric ", ("N",I=1,nloop), "LL not supported yet!"
print *, " rv/ra => LO"
return
end if
print *, " rv => ", ("N",i=1,nloop), "LL (v=", vsoft_s, ")"
if ( nloop==2 ) then
print *, " ra => LL (v=", vsoft_s, ")"
else
print *, " ra => LO"
end if
print *, " threshold shapes from Hoang et al. [arXiv:hep-ph/0107144]"
do i = 1, 2
data_num_va(i) = 2
intv(i) = 0.0_default
if ( i==2 .and. nloop<2 ) exit
scanfile(i) = mprefix // rva(i) // "_n" // nloop_s // "_v" // vsoft_s // ".dat"
u = free_unit ()
open(unit=u, file=char(scanfile(i)), status='old', action='read', iostat=io_error)
if ( io_error == 0) then
do
read(u,*, iostat=io_error)
data_num_va(i) = data_num_va(i) + 1
if (io_error == -1) exit
end do
else
print *, " ERROR (", io_error, ") while opening file ", char(scanfile(i))
cycle
end if
close(u)
end do
! if ( data_num_va(1) > 2 ) data_num = data_num_va(1)
! if ( data_num_va(2) > data_num_va(1) ) data_num = data_num_va(2)
! if ( data_num==0 ) then
if ( (data_num_va(1)==2) .and. (data_num_va(2)==2) ) then
print *, " WARNING: rv/ra => LO (no scan points)!"
return
end if
if ( (data_num_va(1)>data_num) .or. (data_num_va(2)>data_num) ) then
print *, " ERROR: insufficient memory allocated for scan size!"
print *, " ERROR: rv/ra => LO (no scan points)!"
return
end if
init = 1
! allocate ( k_data(2,data_num) )
! allocate ( r_data(2,data_num) )
do i = 1, 2
k_data(i,:) = (/ (0.,I=1,data_num) /)
r_data(i,:) = (/ (0.,I=1,data_num) /)
if ( i==2 .and. nloop<2 ) exit
if ( data_num_va(i)==2 ) then
print *, " WARNING: ", char(rva(i)), " => LO (no scan points)!"
cycle
end if
u = free_unit ()
open(unit=u, file=char(scanfile(i)), status='old', action='read')
do j = 2, data_num_va(i)-1
read(u,*) k, r
k_data(i,j) = k
!!! subtract LO contribution (r=1) contained in the SM piece
if ( r>1. ) r_data(i,j) = r - 1.
end do
close(u)
intv(i) = ( k_data(i,data_num_va(i)-1) - k_data(i,2) )
k_data(i,1) = k_data(i,2) - intv(i) / 2.
k_data(i,data_num_va(i)) = k_data(i,data_num_va(i)-1) + intv(i) / 2.
if ( intv(i)==0.0_default ) then
print *, " WARNING: ", char(rva(i)), " => LO (interpolation range vanishes)!"
cycle
end if
print *, " ", char(rva(i)), " initialized (", data_num_va(i)-2, " scan points)."
end do
end subroutine ilc_tt_init_interp
- subroutine ilc_tt_init_analytic (mpole, width, m1s, vs, vmax, nl)
+ subroutine ilc_tt_init_analytic (mpole, width, vs, vmax, nl)
real(default), intent(inout) :: mpole
real(default), intent(in) :: width
- real(default), intent(in) :: m1s
real(default), intent(in) :: vs
real(default), intent(in) :: vmax
integer, intent(in) :: nl
integer :: i
- call init_parameters (mpole, width, m1s, vs, vmax, nl)
+ call init_parameters (mpole, width, vs, vmax, nl)
if ( init==2 ) return
print *, " Use analytic form factor for ttA/ttZ couplings at threshold"
if ( nloop > 0 ) then
print *, " WARNING: analytic ", ("N",i=1,nloop), "LL not supported yet!"
print *, " rv/ra => LO"
return
end if
print *, " rv => ", ("N",I=1,nloop), "LL (v=", vsoft, ")"
if ( nloop==2 ) then
print *, " ra => LL (v=", vsoft, ")"
else
print *, " ra => LO"
end if
print *, " threshold shapes from Hoang, Stahlhofen [arXiv:1309.6323]"
init = 2
end subroutine ilc_tt_init_analytic
- subroutine ilc_tt_init_semi (mpole, width, m1s, vs, vmax, nl)
+ subroutine ilc_tt_init_semi (mpole, width, vs, vmax, nl)
real(default), intent(inout) :: mpole
real(default), intent(in) :: width
- real(default), intent(in) :: m1s
real(default), intent(in) :: vs
real(default), intent(in) :: vmax
integer, intent(in) :: nl
integer :: i
call init_parameters (mpole, width, m1s, vs, vmax, nl)
if ( init==3 ) then
! if ( allocated(k_data) .and. allocated(r_data) ) then
return
! else
! init = 0
! if ( allocated(k_data) ) deallocate ( k_data )
! if ( allocated(r_data) ) deallocate ( r_data )
! end if
end if
print *, " Use semi-analytic form factor for ttA/ttZ couplings at threshold"
print *, " (scan for constant sqrts and interpolate for top 3-momentum)"
if ( nloop > 0 ) then
print *, " WARNING: analytic ", ("N",i=1,nloop), "LL not supported yet!"
print *, " rv/ra => LO"
return
end if
print *, " rv => ", ("N",I=1,nloop), "LL (v=", vsoft, ")"
if ( nloop==2 ) then
print *, " ra => LL (v=", vsoft, ")"
else
print *, " ra => LO"
end if
print *, " threshold shapes from Hoang, Stahlhofen [arXiv:1309.6323]"
init = 3
! data_num = 100
! allocate ( k_data(1,data_num) )
! allocate ( r_data(2,data_num) )
end subroutine ilc_tt_init_semi
function ilc_tt_formfactor (pt, sqrts, i) result (c)
real(default), intent(in) :: pt
real(default), intent(in) :: sqrts
integer, intent(in) :: i
complex(default) :: c
real(default) :: en
c = 0.0_default
en = sqrts - 2.*mtpole
! if ( en < -2.*dm ) return
! if ( en > 2.*dm ) then
! c = sqrt( 1.37_default ) - 1.0_default
! return
! end if
if ( pt > ptmax ) return
! if ( pt > ptmax .or. en > 2.*dm ) return
! print *, "asoft = ", asoft
! print *, "mtpole = ", mtpole
! print *, "p = ", pt
! print *, "sqrts = ", sqrts
! print *, "gam = ", gam
! print *, "en = ", en
select case (init)
case (1)
c = ilc_tt_interp (en, i)
case (2)
c = ilc_tt_analytic (pt, en, i)
! c = ilc_tt_analytic (min(pt,ptmax), en, i)
case (3)
c = ilc_tt_semi (pt, en, i)
! c = ilc_tt_semi (min(pt,ptmax), en, i)
case default
return
end select
end function ilc_tt_formfactor
function ilc_tt_interp (en, i) result (c)
real(default), intent(in) :: en
integer, intent(in) :: i
real(default) :: c
real(default) :: t_data(data_num_va(i))
real(default) :: p_data(1,data_num_va(i))
real(default) :: t_interp(1)
real(default) :: p_interp(2,1)
c = 0.0_default
if ( abs(en) > intv(i) ) return
t_data(:) = k_data(i,1:data_num_va(i))
p_data(1,:) = r_data(i,1:data_num_va(i))
t_interp(1) = en / gam
p_interp(1,1) = 0.
!!! INTERP routine
! call interp_lagrange ( &
call interp_linear ( &
! call interp_nearest ( &
1, data_num_va(i), t_data, p_data, 1, t_interp, p_interp )
c = p_interp(1,1)
end function ilc_tt_interp
!!! analytic form factor, normalizing to and subtracting the LO
function ilc_tt_analytic (pt, en, i) result (c)
real(default), intent(in) :: pt
real(default), intent(in) :: en
integer, intent(in) :: i
complex(default) :: c
real(default) :: edge
c = 0.0_default
if ( i==2 ) return
!!! smooth transition to c = 0 between
! if ( abs(en) > dm ) then
! edge = 2.
! en_abs = abs(en)
! ! switch = 1. - (en_abs-dm) / dm !!! linear
! switch = ( 1. - atan( 2.*edge*(en_abs-1.5*dm)/dm ) / atan(edge) )/2. !!! arctan
! ! switch = ( 1. - erf ( 2.*edge*(en_abs-1.5*dm)/dm ) / erf (edge) )/2. !!! erf
! ! print *, "switch = ", switch
! end if
c = switch * ( G0p ( CF * asoft, mtpole, pt, en, gam) &
/ G0p (0.0_default, mtpole, pt, en, gam) &
! - 1.0_default )
) - 1.0_default
end function ilc_tt_analytic
!!! semi-analytic form factor: scan for constant sqrts, interpolate pt values
function ilc_tt_semi (pt, en, i) result (c)
real(default), intent(in) :: pt
real(default), intent(in) :: en
integer, intent(in) :: i
complex(default) :: c
real(default) :: t_data(data_num)
real(default) :: p_data(2,data_num)
real(default) :: t_interp(1)
real(default) :: p_interp(2,1)
integer :: data_it
! real(default) :: dt1, dt2, dt3
! real(default) :: tres=0., tref=0.
! call cpu_time(tres)
! tref=tres
c = 0.0_default
if ( i==2 ) return
!!! refill scan arrays if energy has changed
if ( real(en,kind=single) /= en_ref ) then
do data_it=1, data_num
k_data(1,data_it) = real(data_it) / real(data_num) * ptmax
c = ilc_tt_analytic (k_data(1,data_it), en, i)
r_data(1,data_it) = real(c)
r_data(2,data_it) = aimag(c)
end do
en_ref = en
end if
! call cpu_time(tres)
! dt1 = tres-tref
! tref=tres
t_data(:) = k_data(1,1:data_num)
p_data(:,:) = r_data(:,1:data_num)
t_interp(1) = pt
p_interp(1,1) = 0.
p_interp(2,1) = 0.
! call cpu_time(tres)
! dt2 = tres-tref
! tref=tres
!!! INTERP routine
call interp_linear ( &
2, data_num, t_data, p_data, 1, t_interp, p_interp )
c = p_interp(1,1) + imago*p_interp(2,1)
! call cpu_time(tres)
! dt3 = tres-tref
! print *, " DT ", dt1, " ", dt2, " ", dt3
end function ilc_tt_semi
!!! Max's LL nonrelativistic threshold Green's function
function G0p (a, m, p, en, w) result (c)
real(default), intent(in) :: a
real(default), intent(in) :: m
real(default), intent(in) :: p
real(default), intent(in) :: en
real(default), intent(in) :: w
complex(default) :: c
complex(default) :: k, ipk, la, z1, z2
complex(default) :: one, two, cc, dd
k = sqrt( -m*en -imago*m*w )
ipk = imago * p / k
la = a * m / 2. / k
one = 1.
two = 2.
cc = 2. - la
dd = ( 1. + ipk ) / 2.
z1 = nr_hypgeo (two, one, cc, dd)
dd = ( 1. - ipk ) / 2.
z2 = nr_hypgeo (two, one, cc, dd)
c = - imago * m / (4.*p*k) / (1.-la) * ( z1 - z2 )
end function G0p
function m1s_to_mpole (m1s, as) result (mpole)
real(default), intent(in) :: m1s
real(default), intent(in) :: as
real(default) :: mpole
mpole = m1s * ( 1. + deltaLL(as) )
end function m1s_to_mpole
function mpole_to_m1s (mpole, as) result (m1s)
real(default), intent(in) :: mpole
real(default), intent(in) :: as
real(default) :: m1s
m1s = mpole * ( 1. - deltaLL(as) )
end function mpole_to_m1s
function deltaLL (as) result (del)
real(default), intent(in) :: as
real(default) :: del
del = 2.0_default / 9.0_default * as**2
end function deltaLL
- subroutine init_parameters (mpole, width, m1s, vs, vmax, nl)
+ subroutine init_parameters (mpole, width, vs, vmax, nl)
real(default), intent(inout) :: mpole
real(default), intent(in) :: width
- real(default), intent(in) :: m1s
real (default), intent(in) :: vs
real (default), intent(in) :: vmax
integer, intent(in) :: nl
vsoft = vs
nloop = nl
gam = width
- if ( m1s > 0. ) then
- asoft = running_as (m1s/2.*vsoft)
- mpole = m1s_to_mpole (m1s, asoft)
- else
- asoft = running_as (mpole/2.*vsoft)
- end if
mtpole = mpole
ptmax = mtpole * vmax
! ptmax = sqrt( 2.*mtpole*dm )
+ asoft = running_as (mtpole/2.*vsoft)
end subroutine init_parameters
end module ilc_tt_threshold
Index: branches/bach/release_2.1.1_hoppet_top_features/share/models/SM_tt_threshold.mdl
===================================================================
--- branches/bach/release_2.1.1_hoppet_top_features/share/models/SM_tt_threshold.mdl (revision 0)
+++ branches/bach/release_2.1.1_hoppet_top_features/share/models/SM_tt_threshold.mdl (revision 5349)
@@ -0,0 +1,247 @@
+########################################################################
+# Standard Model with trivial CKM matrix
+model "SM"
+
+# Independent parameters
+### DO NOT CHANGE THE ORDER OF THESE PARAMETERS
+parameter GF = 1.16639E-5 # Fermi constant
+parameter mZ = 91.1882 # Z-boson mass
+parameter mW = 80.419 # W-boson mass
+parameter mH = 125 # Higgs mass
+parameter alphas = 0.1178 # Strong coupling constant (Z point)
+parameter me = 0.000510997 # electron mass
+parameter mmu = 0.105658389 # muon mass
+parameter mtau = 1.77705 # tau-lepton mass
+parameter ms = 0.095 # s-quark mass
+parameter mc = 1.2 # c-quark mass
+parameter mb = 4.2 # b-quark mass
+parameter mtop = 173.1 # t-quark mass
+parameter wtop = 1.523 # t-quark width
+parameter wZ = 2.443 # Z-boson width
+parameter wW = 2.049 # W-boson width
+parameter wH = 0.004143 # Higgs width
+parameter khgaz = 0.000 # anomaly Higgs couplings K factors
+parameter khgaga = 0.000 # anomaly Higgs couplings K factors
+parameter khgg = 0.000 # anomaly Higgs couplings K factors
+parameter xi0 = 0.000 # R_xi parameter for Z-boson
+parameter xipm = 0.000 # R_xi parameter for W-boson
+
+# ttbar threshold resummation (mtop above is taken as pole mass):
+parameter vsoft = 0.2 # set soft renorm. velocity
+parameter vmax = 0.3 # set max. resummation top velocity
+parameter nloop = 0 # set order (0-2: LL, NLL, NNLL)
+
+# Dependent parameters
+derived v = 1 / sqrt (sqrt (2.) * GF) # v (Higgs vev)
+derived cw = mW / mZ # cos(theta-W)
+derived sw = sqrt (1-cw**2) # sin(theta-W)
+derived ee = 2 * sw * mW / v # em-coupling (GF scheme)
+derived alpha_em_i = 4 * pi / ee**2 # inverse fine structure const
+
+########################################################################
+# Particle content
+
+# The quarks
+particle D_QUARK 1 parton
+ spin 1/2 charge -1/3 isospin -1/2 color 3
+ name d down
+ anti dbar D "d~"
+ tex_anti "\bar{d}"
+particle U_QUARK 2 parton
+ spin 1/2 charge 2/3 isospin 1/2 color 3
+ name u up
+ anti ubar U "u~"
+ tex_anti "\bar{u}"
+particle S_QUARK 3 like D_QUARK
+ name s strange
+ anti sbar S "s~"
+ tex_anti "\bar{s}"
+ mass ms
+particle C_QUARK 4 like U_QUARK
+ name c charm
+ anti cbar C "c~"
+ tex_anti "\bar{c}"
+ mass mc
+particle B_QUARK 5 like D_QUARK
+ name b bottom
+ anti bbar B "b~"
+ tex_anti "\bar{b}"
+ mass mb
+particle T_QUARK 6 like U_QUARK
+ name t top
+ anti tbar T "t~"
+ tex_anti "\bar{t}"
+ mass mtop width wtop
+
+# The leptons
+particle E_LEPTON 11
+ spin 1/2 charge -1 isospin -1/2
+ name "e-" e1 electron e
+ anti "e+" E1 positron
+ tex_name "e^-"
+ tex_anti "e^+"
+ mass me
+particle E_NEUTRINO 12 left
+ spin 1/2 isospin 1/2
+ name nue n1 "nu_e" ve "e-neutrino"
+ anti nuebar N1 "ve~"
+ tex_name "\nu_e"
+ tex_anti "\bar\nu_e"
+particle MU_LEPTON 13 like E_LEPTON
+ name "mu-" e2 mu muon
+ anti "mu+" E2
+ tex_name "\mu^-"
+ tex_anti "\mu^+"
+ mass mmu
+particle MU_NEUTRINO 14 like E_NEUTRINO
+ name numu "nu_mu" n2 vm "mu-neutrino"
+ anti numubar N2 "vm~"
+ tex_name "\nu_\mu"
+ tex_anti "\bar\nu_\mu"
+particle TAU_LEPTON 15 like E_LEPTON
+ name "tau-" e3 tau "ta-" tauon
+ anti "tau+" E3 "ta+"
+ tex_name "\tau^-"
+ tex_anti "\tau^+"
+ mass mtau
+particle TAU_NEUTRINO 16 like E_NEUTRINO
+ name nutau "nu_tau" n3 vt "tau_neutrino"
+ anti nutaubar N3 "vt~"
+ tex_name "\nu_\tau"
+ tex_anti "\bar\nu_\tau"
+
+# The vector bosons
+particle GLUON 21 parton gauge
+ spin 1 color 8
+ name gl g G gluon
+particle PHOTON 22 gauge
+ spin 1
+ name A gamma photon
+ tex_name "\gamma"
+particle Z_BOSON 23 gauge
+ spin 1
+ name Z
+ mass mZ width wZ
+particle W_BOSON 24 gauge
+ spin 1 charge 1
+ name "W+" Wp
+ anti "W-" Wm
+ tex_name "W^+"
+ tex_anti "W^-"
+ mass mW width wW
+
+# The Higgs
+particle HIGGS 25
+ spin 0
+ name H h Higgs
+ mass mH width wH
+
+# Hadrons
+particle PROTON 2212
+ spin 1/2 charge 1
+ name p "p+"
+ anti pbar "p-"
+
+particle HADRON_REMNANT 90
+
+particle HADRON_REMNANT_SINGLET 91
+
+particle HADRON_REMNANT_TRIPLET 92
+ color 3
+
+particle HADRON_REMNANT_OCTET 93
+ color 8
+
+########################################################################
+# Vertices of the Standard model
+# In graphs with identical structure the first vertex is kept for phase space
+# therefore, lighter particles come before heavier ones.
+
+# QED
+vertex D d A
+vertex U u A
+vertex S s A
+vertex C c A
+vertex B b A
+vertex T t A
+
+vertex E1 e1 A
+vertex E2 e2 A
+vertex E3 e3 A
+
+# QCD
+vertex G G G
+vertex G G G G
+
+vertex D d G
+vertex U u G
+vertex S s G
+vertex C c G
+vertex B b G
+vertex T t G
+
+# Neutral currents
+vertex D d Z
+vertex U u Z
+vertex S s Z
+vertex C c Z
+vertex B b Z
+vertex T t Z
+
+vertex E1 e1 Z
+vertex E2 e2 Z
+vertex E3 e3 Z
+vertex N1 n1 Z
+vertex N2 n2 Z
+vertex N3 n3 Z
+
+
+# Charged currents
+vertex U d Wp
+vertex C s Wp
+vertex T b Wp
+vertex D u Wm
+vertex S c Wm
+vertex B t Wm
+
+vertex N1 e1 Wp
+vertex N2 e2 Wp
+vertex N3 e3 Wp
+vertex E1 n1 Wm
+vertex E2 n2 Wm
+vertex E3 n3 Wm
+
+# Yukawa
+### keeping only 3rd generation for the moment
+# vertex S s H
+# vertex C c H
+vertex B b H
+vertex T t H
+# vertex E2 e2 H
+vertex E3 e3 H
+
+# Vector-boson self-interactions
+vertex Wp Wm A
+vertex Wp Wm Z
+
+vertex Wp Wm Z Z
+vertex Wp Wp Wm Wm
+vertex Wp Wm Z A
+vertex Wp Wm A A
+
+
+# Higgs - vector boson
+#vertex H Z A
+#vertex H A A
+#vertex H g g
+
+vertex H Wp Wm
+vertex H Z Z
+vertex H H Wp Wm
+vertex H H Z Z
+
+# Higgs self-interactions
+vertex H H H
+vertex H H H H
+
+
Index: branches/bach/release_2.1.1_hoppet_top_features/share/models/SM.mdl
===================================================================
--- branches/bach/release_2.1.1_hoppet_top_features/share/models/SM.mdl (revision 5348)
+++ branches/bach/release_2.1.1_hoppet_top_features/share/models/SM.mdl (revision 5349)
@@ -1,249 +1,242 @@
########################################################################
# Standard Model with trivial CKM matrix
model "SM"
# Independent parameters
### DO NOT CHANGE THE ORDER OF THESE PARAMETERS
parameter GF = 1.16639E-5 # Fermi constant
parameter mZ = 91.1882 # Z-boson mass
parameter mW = 80.419 # W-boson mass
parameter mH = 125 # Higgs mass
parameter alphas = 0.1178 # Strong coupling constant (Z point)
parameter me = 0.000510997 # electron mass
parameter mmu = 0.105658389 # muon mass
parameter mtau = 1.77705 # tau-lepton mass
parameter ms = 0.095 # s-quark mass
parameter mc = 1.2 # c-quark mass
parameter mb = 4.2 # b-quark mass
parameter mtop = 173.1 # t-quark mass
parameter wtop = 1.523 # t-quark width
parameter wZ = 2.443 # Z-boson width
parameter wW = 2.049 # W-boson width
parameter wH = 0.004143 # Higgs width
parameter khgaz = 0.000 # anomaly Higgs couplings K factors
parameter khgaga = 0.000 # anomaly Higgs couplings K factors
parameter khgg = 0.000 # anomaly Higgs couplings K factors
parameter xi0 = 0.000 # R_xi parameter for Z-boson
parameter xipm = 0.000 # R_xi parameter for W-boson
-# ILC ttbar threshold correction
-parameter ILC_ttbar_threshold = -1 # enable with positive value
-parameter m1S = -172 # bound top mass: > 0 OVERRIDES mtop
-parameter vsoft = 0.2 # set soft renorm. velocity
-parameter vmax = 0.3 # set max. resummation top velocity
-parameter nloop = 0 # set exp. order (0-2: LL, NLL, NNLL)
-
# Dependent parameters
derived v = 1 / sqrt (sqrt (2.) * GF) # v (Higgs vev)
derived cw = mW / mZ # cos(theta-W)
derived sw = sqrt (1-cw**2) # sin(theta-W)
derived ee = 2 * sw * mW / v # em-coupling (GF scheme)
derived alpha_em_i = 4 * pi / ee**2 # inverse fine structure const
########################################################################
# Particle content
# The quarks
particle D_QUARK 1 parton
spin 1/2 charge -1/3 isospin -1/2 color 3
name d down
anti dbar D "d~"
tex_anti "\bar{d}"
particle U_QUARK 2 parton
spin 1/2 charge 2/3 isospin 1/2 color 3
name u up
anti ubar U "u~"
tex_anti "\bar{u}"
particle S_QUARK 3 like D_QUARK
name s strange
anti sbar S "s~"
tex_anti "\bar{s}"
mass ms
particle C_QUARK 4 like U_QUARK
name c charm
anti cbar C "c~"
tex_anti "\bar{c}"
mass mc
particle B_QUARK 5 like D_QUARK
name b bottom
anti bbar B "b~"
tex_anti "\bar{b}"
mass mb
particle T_QUARK 6 like U_QUARK
name t top
anti tbar T "t~"
tex_anti "\bar{t}"
mass mtop width wtop
# The leptons
particle E_LEPTON 11
spin 1/2 charge -1 isospin -1/2
name "e-" e1 electron e
anti "e+" E1 positron
tex_name "e^-"
tex_anti "e^+"
mass me
particle E_NEUTRINO 12 left
spin 1/2 isospin 1/2
name nue n1 "nu_e" ve "e-neutrino"
anti nuebar N1 "ve~"
tex_name "\nu_e"
tex_anti "\bar\nu_e"
particle MU_LEPTON 13 like E_LEPTON
name "mu-" e2 mu muon
anti "mu+" E2
tex_name "\mu^-"
tex_anti "\mu^+"
mass mmu
particle MU_NEUTRINO 14 like E_NEUTRINO
name numu "nu_mu" n2 vm "mu-neutrino"
anti numubar N2 "vm~"
tex_name "\nu_\mu"
tex_anti "\bar\nu_\mu"
particle TAU_LEPTON 15 like E_LEPTON
name "tau-" e3 tau "ta-" tauon
anti "tau+" E3 "ta+"
tex_name "\tau^-"
tex_anti "\tau^+"
mass mtau
particle TAU_NEUTRINO 16 like E_NEUTRINO
name nutau "nu_tau" n3 vt "tau_neutrino"
anti nutaubar N3 "vt~"
tex_name "\nu_\tau"
tex_anti "\bar\nu_\tau"
# The vector bosons
particle GLUON 21 parton gauge
spin 1 color 8
name gl g G gluon
particle PHOTON 22 gauge
spin 1
name A gamma photon
tex_name "\gamma"
particle Z_BOSON 23 gauge
spin 1
name Z
mass mZ width wZ
particle W_BOSON 24 gauge
spin 1 charge 1
name "W+" Wp
anti "W-" Wm
tex_name "W^+"
tex_anti "W^-"
mass mW width wW
# The Higgs
particle HIGGS 25
spin 0
name H h Higgs
mass mH width wH
# Hadrons
particle PROTON 2212
spin 1/2 charge 1
name p "p+"
anti pbar "p-"
particle HADRON_REMNANT 90
particle HADRON_REMNANT_SINGLET 91
particle HADRON_REMNANT_TRIPLET 92
color 3
particle HADRON_REMNANT_OCTET 93
color 8
########################################################################
# Vertices of the Standard model
# In graphs with identical structure the first vertex is kept for phase space
# therefore, lighter particles come before heavier ones.
# QED
vertex D d A
vertex U u A
vertex S s A
vertex C c A
vertex B b A
vertex T t A
vertex E1 e1 A
vertex E2 e2 A
vertex E3 e3 A
# QCD
vertex G G G
vertex G G G G
vertex D d G
vertex U u G
vertex S s G
vertex C c G
vertex B b G
vertex T t G
# Neutral currents
vertex D d Z
vertex U u Z
vertex S s Z
vertex C c Z
vertex B b Z
vertex T t Z
vertex E1 e1 Z
vertex E2 e2 Z
vertex E3 e3 Z
vertex N1 n1 Z
vertex N2 n2 Z
vertex N3 n3 Z
# Charged currents
vertex U d Wp
vertex C s Wp
vertex T b Wp
vertex D u Wm
vertex S c Wm
vertex B t Wm
vertex N1 e1 Wp
vertex N2 e2 Wp
vertex N3 e3 Wp
vertex E1 n1 Wm
vertex E2 n2 Wm
vertex E3 n3 Wm
# Yukawa
### keeping only 3rd generation for the moment
# vertex S s H
# vertex C c H
vertex B b H
vertex T t H
# vertex E2 e2 H
vertex E3 e3 H
# Vector-boson self-interactions
vertex Wp Wm A
vertex Wp Wm Z
vertex Wp Wm Z Z
vertex Wp Wp Wm Wm
vertex Wp Wm Z A
vertex Wp Wm A A
# Higgs - vector boson
#vertex H Z A
#vertex H A A
#vertex H g g
vertex H Wp Wm
vertex H Z Z
vertex H H Wp Wm
vertex H H Z Z
# Higgs self-interactions
vertex H H H
vertex H H H H
Index: branches/bach/release_2.1.1_hoppet_top_features/share/Makefile.am
===================================================================
--- branches/bach/release_2.1.1_hoppet_top_features/share/Makefile.am (revision 5348)
+++ branches/bach/release_2.1.1_hoppet_top_features/share/Makefile.am (revision 5349)
@@ -1,150 +1,151 @@
## Makefile.am -- Makefile for WHIZARD data files
##
## Process this file with automake to produce Makefile.in
#
# Copyright (C) 1999-2012 by
# Wolfgang Kilian <kilian@physik.uni-siegen.de>
# Thorsten Ohl <ohl@physik.uni-wuerzburg.de>
# Juergen Reuter <juergen.reuter@desy.de>
# Christian Speckner <christian.speckner@physik.uni-freiburg.de>
#
# WHIZARD is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# WHIZARD is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
########################################################################
## Subdirectories to configure
SUBDIRS = doc susy models cuts beam-sim test examples muli ilc_tt_threshold
## Data files needed for running WHIZARD
## to be installed with the 'models' prefix kept
modelsdir = $(pkgdatadir)/models
dist_models_DATA = \
models/2HDM.mdl \
models/GravTest.mdl \
models/Littlest_Eta.mdl \
models/Littlest_Tpar.mdl \
models/Littlest.mdl \
models/MSSM.mdl \
models/MSSM_CKM.mdl \
models/MSSM_Grav.mdl \
models/MSSM_Hgg.mdl \
models/NMSSM.mdl \
models/NMSSM_CKM.mdl \
models/NMSSM_Hgg.mdl \
models/PSSSM.mdl \
models/QCD.mdl \
models/QED.mdl \
models/Simplest.mdl \
models/Simplest_univ.mdl \
models/SM_ac_CKM.mdl \
models/SM_ac.mdl \
models/SM_CKM.mdl \
models/SM_km.mdl \
models/SM_QCD.mdl \
models/SM_top.mdl \
models/SM_top_anom.mdl \
+ models/SM_tt_threshold.mdl \
models/SM.mdl \
models/SM_Higgs.mdl \
models/SM_hadrons.mdl \
models/Template.mdl \
models/UED.mdl \
models/Xdim.mdl \
models/Zprime.mdl \
models/Threeshl.mdl \
models/Threeshl_nohf.mdl \
models/Test.mdl
## SLHA parameter input files
## to be installed with the 'susy' prefix kept
susydir = $(pkgdatadir)/susy
dist_susy_DATA = \
susy/sps1a.slha \
susy/sps1ap_decays.slha \
susy/nmssm.slha
## Files containing predefined cut sets
## to be installed with the 'cuts' prefix kept
cutsdir = $(pkgdatadir)/cuts
dist_cuts_DATA = \
cuts/default_cuts.sin
## Files containing predefined beam simulation files
## to be installed with the 'beam-sim' prefix kept
beamsimdir = $(pkgdatadir)/beam-sim
dist_beamsim_DATA = \
beam-sim/uniform_spread_2.5%.dat
## Files containing complete examples
examplesdir = $(pkgdatadir)/examples
dist_examples_DATA = \
examples/Z-lineshape.sin \
examples/W-endpoint.sin \
examples/casc_dec.sin \
examples/Zprime.sin \
examples/LEP_higgs.sin \
examples/LEP_cc10.sin \
examples/eeww_polarized.sin \
examples/HERA_DIS.sin \
examples/DrellYanMatchingP.sin \
examples/DrellYanMatchingW.sin \
examples/DrellYanNoMatchingP.sin \
examples/DrellYanNoMatchingW.sin \
examples/EEMatching2P.sin \
examples/EEMatching2W.sin \
examples/EEMatching3P.sin \
examples/EEMatching3W.sin \
examples/EEMatching4P.sin \
examples/EEMatching4W.sin \
examples/EEMatching5P.sin \
examples/EEMatching5W.sin \
examples/EENoMatchingP.sin \
examples/EENoMatchingW.sin
## The data files for the included PDF sets
pdfdir = $(pkgdatadir)/pdf_builtin
dist_pdf_DATA = \
pdf_builtin/cteq6l.tbl \
pdf_builtin/cteq6l1.tbl \
pdf_builtin/cteq6m.tbl \
pdf_builtin/cteq6d.tbl \
pdf_builtin/qed6-10gridp.dat \
pdf_builtin/qed6-10gridn.dat \
pdf_builtin/mstw2008lo.00.dat \
pdf_builtin/mstw2008nlo.00.dat \
pdf_builtin/mstw2008nnlo.00.dat \
pdf_builtin/ct10.00.pds
## Files containing precompiled cross sections for muli
## to be installed with the 'muli' prefix kept
mulidir = $(pkgdatadir)/muli
dist_muli_DATA = \
muli/dsigma_cteq6ll.LHpdf.xml \
muli/pdf_norm_cteq6ll.LHpdf.xml
## Files containing the higher order ILC ttbar threshold scans
ilcttthresholddir = $(pkgdatadir)/ilc_tt_threshold
dist_ilcttthreshold_DATA = \
ilc_tt_threshold/scan_rv_n0_v0.1.dat \
ilc_tt_threshold/scan_rv_n0_v0.2.dat \
ilc_tt_threshold/scan_rv_n0_v0.4.dat \
ilc_tt_threshold/scan_rv_n1_v0.1.dat \
ilc_tt_threshold/scan_rv_n1_v0.2.dat \
ilc_tt_threshold/scan_rv_n1_v0.4.dat \
ilc_tt_threshold/scan_rv_n2_v0.1.dat \
ilc_tt_threshold/scan_rv_n2_v0.2.dat \
ilc_tt_threshold/scan_rv_n2_v0.4.dat \
ilc_tt_threshold/scan_ra_n2_v0.1.dat \
ilc_tt_threshold/scan_ra_n2_v0.2.dat \
ilc_tt_threshold/scan_ra_n2_v0.4.dat

File Metadata

Mime Type
text/x-diff
Expires
Tue, Nov 19, 7:40 PM (1 d, 6 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3805879
Default Alt Text
(175 KB)

Event Timeline