Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions madgraph/iolibs/export_v4.py
Original file line number Diff line number Diff line change
Expand Up @@ -12600,9 +12600,11 @@ def create_param_card(self, write_special=True):
write_special=write_special)

# Output formats with a loop backend for a loop-induced ([noborn=]) process
# coming through the tree-level do_output. Test membership EXACTLY: 'standalone'
# is a prefix of standalone_cpp / _mg7 / _msP / _msF / _rw, which have none.
LOOP_INDUCED_FORMATS = ['madevent', 'plugin', 'standalone']
# coming through the tree-level do_output. Test membership EXACTLY: it is the
# Fortran standalone that has the MadLoop backend, and 'standalone' -- which
# now names the MadMatrix (C++) output -- is a prefix of it, as it is of
# standalone_msP / _msF / _rw. None of those has a loop backend.
LOOP_INDUCED_FORMATS = ['madevent', 'plugin', 'standalone_fortran']

def loop_induced_not_supported_msg(format, process=None):
"""Refusal text for a format that cannot write a LoopHelasMatrixElement."""
Expand Down Expand Up @@ -12773,8 +12775,8 @@ def ExportV4Factory(cmd, noclean, output_type='default', group_subprocesses=True
if format == 'matrix' or format.startswith('standalone'):
if cmd._curr_amps and isinstance(
cmd._curr_amps[0], loop_diagram_generation.LoopAmplitude):
# of the formats sharing this branch only 'standalone' has a
# MadLoop backend; ProcessExporterFortranSA has none
# of the formats sharing this branch only 'standalone_fortran'
# has a MadLoop backend; ProcessExporterFortranSA has none
if format not in LOOP_INDUCED_FORMATS:
raise InvalidCmd(
loop_induced_not_supported_msg(format, curr_proc))
Expand Down
2 changes: 1 addition & 1 deletion tests/acceptance_tests/test_cmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -5134,7 +5134,7 @@ def testIO_FDgauge_standalone_fortran(self):
# different spins (VVV1_VVS1_VSV2_VSS1_0 and
# VVV1_VSV2_VSS2_SVV2_SVS2_SSV3_0), which only exist because a
# massive vector and its Goldstone are the same wavefunction here.
self.generate_fd('standalone', pjoin(self.IOpath, 'FD_fortran'))
self.generate_fd('standalone_fortran', pjoin(self.IOpath, 'FD_fortran'))

@IOTests.createIOTest()
def testIO_FDgauge_madmatrix(self):
Expand Down
2 changes: 1 addition & 1 deletion tests/acceptance_tests/test_cmd_madloop.py
Original file line number Diff line number Diff line change
Expand Up @@ -1373,7 +1373,7 @@ def testIO_loop_induced_standalone_output(self):
# no 'import model': validate_model must bootstrap sm -> loop_sm itself
interface.exec_cmd('generate g g > h [noborn=QCD]', errorhandling=False,
printcmd=False, precmd=True, postcmd=True)
interface.onecmd('output standalone %s -f' %
interface.onecmd('output standalone_fortran %s -f' %
str(pjoin(self.IOpath,'gghLI_IOTest')))


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
C This File is Automatically generated by ALOHA
C The process calculated in this file is:
C Gamma(3,2,-1)*ProjP(-1,1)
C
SUBROUTINE FFV6M_3(F1, F2, MCOUP, M3, W3,V3)
USE ALOHA_OBJECT
USE MODEL_OBJECT
IMPLICIT NONE
COMPLEX*16 CI
PARAMETER (CI=(0D0,1D0))
COMPLEX*16 CZERO
PARAMETER (CZERO=(0D0,0D0))
TYPE(FLV_COUPLING) MCOUP
DOUBLE COMPLEX COUP
INTEGER FLV_INDEX
TYPE(ALOHA) F1
INTEGER FLV_INDEX1
TYPE(ALOHA) F2
INTEGER FLV_INDEX2
COMPLEX*16 FDJS1
COMPLEX*16 FDJS2
REAL*8 FDN(0:4)
REAL*8 FDNQ
COMPLEX*16 FDQ(0:4)
REAL*8 M3
REAL*8 P3(0:3)
TYPE(ALOHA) V3
REAL*8 W3
COMPLEX*16 DENOM
INTEGER*4 I
V3%P(:) = +F1%P(:)+F2%P(:)
P3(:) = -V3 % P (:)
V3 % W(:) = CZERO
FDQ(0:3) = -V3 % P(:)
FDQ(4) = -CI*M3
CALL DEFINE_GAUGE_DIR(FDQ, FDN)
FDNQ = FDN(0)*DBLE(FDQ(0))-FDN(1)*DBLE(FDQ(1))-FDN(2)*DBLE(FDQ(2)
$ )-FDN(3)*DBLE(FDQ(3))
FLV_INDEX1 = F1 %FLV_INDEX
FLV_INDEX2 = F2 %FLV_INDEX
IF(FLV_INDEX1.EQ.0.OR.FLV_INDEX2.EQ.0)THEN
V3%W(:) = (0D0,0D0)
RETURN
ENDIF
IF(MCOUP % PARTNER(FLV_INDEX1).NE.FLV_INDEX2)THEN
V3%W(:) = (0D0,0D0)
RETURN
ENDIF
COUP = MCOUP % VAL(FLV_INDEX1) % P
DENOM = COUP/(P3(0)**2-P3(1)**2-P3(2)**2-P3(3)**2 - M3 * (M3 -CI
$ * W3))
V3%W(1)= DENOM*(-CI)*(F2 % W(1)*F1 % W(3)+F2 % W(2)*F1 % W(4))
V3%W(2)= DENOM*(-CI)*(F2 % W(2)*F1 % W(3)+F2 % W(1)*F1 % W(4))
V3%W(3)= DENOM*(-CI)*(+CI*(F2 % W(2)*F1 % W(3))-CI*(F2 % W(1)*F1
$ % W(4)))
V3%W(4)= DENOM*(-CI)*(F2 % W(1)*F1 % W(3)-F2 % W(2)*F1 % W(4))
FDJS1 = (FDN(0)*V3%W(1)-FDN(1)*V3%W(2)-FDN(2)*V3%W(3)-FDN(3)
$ *V3%W(4))/FDNQ
FDJS2 = (FDQ(0)*V3%W(1)-FDQ(1)*V3%W(2)-FDQ(2)*V3%W(3)-FDQ(3)
$ *V3%W(4)-DCONJG(FDQ(4))*V3%W(5))/FDNQ
V3%W(1) = V3%W(1)-FDQ(0)*FDJS1-FDN(0)*FDJS2
V3%W(2) = V3%W(2)-FDQ(1)*FDJS1-FDN(1)*FDJS2
V3%W(3) = V3%W(3)-FDQ(2)*FDJS1-FDN(2)*FDJS2
V3%W(4) = V3%W(4)-FDQ(3)*FDJS1-FDN(3)*FDJS2
V3%W(5) = V3%W(5)-FDQ(4)*FDJS1-FDN(4)*FDJS2
END


C This File is Automatically generated by ALOHA
C The process calculated in this file is:
C Coup(1) * (Gamma(3,2,-1)*ProjP(-1,1)) + Coup(2) *
C (Gamma(3,2,-1)*ProjM(-1,1))
C
SUBROUTINE FFV6_2M_3(F1, F2, MCOUP1, MCOUP2, M3, W3,V3)
USE ALOHA_OBJECT
USE MODEL_OBJECT
IMPLICIT NONE
COMPLEX*16 CI
PARAMETER (CI=(0D0,1D0))
COMPLEX*16 CZERO
PARAMETER (CZERO=(0D0,0D0))
TYPE(FLV_COUPLING) MCOUP1
DOUBLE COMPLEX COUP1
INTEGER FLV_INDEX
TYPE(FLV_COUPLING) MCOUP2
DOUBLE COMPLEX COUP2
TYPE(ALOHA) F1
INTEGER FLV_INDEX1
TYPE(ALOHA) F2
INTEGER FLV_INDEX2
COMPLEX*16 FDJS1
COMPLEX*16 FDJS2
REAL*8 FDN(0:4)
REAL*8 FDNQ
COMPLEX*16 FDQ(0:4)
REAL*8 M3
REAL*8 P3(0:3)
TYPE(ALOHA) V3
REAL*8 W3
COMPLEX*16 DENOM
INTEGER*4 I
V3%P(:) = +F1%P(:)+F2%P(:)
P3(:) = -V3 % P (:)
V3 % W(:) = CZERO
FDQ(0:3) = -V3 % P(:)
FDQ(4) = -CI*M3
CALL DEFINE_GAUGE_DIR(FDQ, FDN)
FDNQ = FDN(0)*DBLE(FDQ(0))-FDN(1)*DBLE(FDQ(1))-FDN(2)*DBLE(FDQ(2)
$ )-FDN(3)*DBLE(FDQ(3))
FLV_INDEX1 = F1 %FLV_INDEX
FLV_INDEX2 = F2 %FLV_INDEX
IF(FLV_INDEX1.EQ.0.OR.FLV_INDEX2.EQ.0)THEN
V3%W(:) = (0D0,0D0)
RETURN
ENDIF
IF(MCOUP1 % PARTNER(FLV_INDEX1).NE.FLV_INDEX2.AND.MCOUP2 %
$ PARTNER(FLV_INDEX1).NE.FLV_INDEX2)THEN
V3%W(:) = (0D0,0D0)
RETURN
ENDIF
COUP1 = MCOUP1 % VAL(FLV_INDEX1) % P
COUP2 = (0D0,0D0)
IF(MCOUP2 % PARTNER(FLV_INDEX1).EQ.FLV_INDEX2) COUP2 = MCOUP2 %
$ VAL(FLV_INDEX1) % P
DENOM = 1D0/(P3(0)**2-P3(1)**2-P3(2)**2-P3(3)**2 - M3 * (M3 -CI*
$ W3))
V3%W(1)= DENOM*(-CI)*(COUP1*(F2 % W(1)*F1 % W(3)+F2 % W(2)*F1 %
$ W(4))+COUP2*(F2 % W(3)*F1 % W(1)+F2 % W(4)*F1 % W(2)))
V3%W(2)= DENOM*(-CI)*(COUP1*(F2 % W(2)*F1 % W(3)+F2 % W(1)*F1 %
$ W(4))-COUP2*(F2 % W(4)*F1 % W(1)+F2 % W(3)*F1 % W(2)))
V3%W(3)= DENOM*(-CI)*(COUP1*(+CI*(F2 % W(2)*F1 % W(3))-CI*(F2 %
$ W(1)*F1 % W(4)))+COUP2*(-CI*(F2 % W(4)*F1 % W(1))+CI*(F2 % W(3)
$ *F1 % W(2))))
V3%W(4)= DENOM*(-CI)*(COUP1*(F2 % W(1)*F1 % W(3)-F2 % W(2)*F1 %
$ W(4))+COUP2*(-F2 % W(3)*F1 % W(1)+F2 % W(4)*F1 % W(2)))
FDJS1 = (FDN(0)*V3%W(1)-FDN(1)*V3%W(2)-FDN(2)*V3%W(3)-FDN(3)
$ *V3%W(4))/FDNQ
FDJS2 = (FDQ(0)*V3%W(1)-FDQ(1)*V3%W(2)-FDQ(2)*V3%W(3)-FDQ(3)
$ *V3%W(4)-DCONJG(FDQ(4))*V3%W(5))/FDNQ
V3%W(1) = V3%W(1)-FDQ(0)*FDJS1-FDN(0)*FDJS2
V3%W(2) = V3%W(2)-FDQ(1)*FDJS1-FDN(1)*FDJS2
V3%W(3) = V3%W(3)-FDQ(2)*FDJS1-FDN(2)*FDJS2
V3%W(4) = V3%W(4)-FDQ(3)*FDJS1-FDN(3)*FDJS2
V3%W(5) = V3%W(5)-FDQ(4)*FDJS1-FDN(4)*FDJS2
END



Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
C This File is Automatically generated by ALOHA
C The process calculated in this file is:
C P(3,1)*Metric(1,2) - P(3,2)*Metric(1,2) - P(2,1)*Metric(1,3) +
C P(2,3)*Metric(1,3) + P(1,2)*Metric(2,3) - P(1,3)*Metric(2,3)
C
SUBROUTINE VVV1_0(V1, V2, V3, COUP,VERTEX)
USE ALOHA_OBJECT
IMPLICIT NONE
COMPLEX*16 CI
PARAMETER (CI=(0D0,1D0))
COMPLEX*16 CZERO
PARAMETER (CZERO=(0D0,0D0))
COMPLEX*16 COUP
REAL*8 P1(0:3)
REAL*8 P2(0:3)
REAL*8 P3(0:3)
COMPLEX*16 TMP1
COMPLEX*16 TMP2
COMPLEX*16 TMP3
COMPLEX*16 TMP4
COMPLEX*16 TMP5
COMPLEX*16 TMP6
COMPLEX*16 TMP7
COMPLEX*16 TMP8
COMPLEX*16 TMP9
TYPE(ALOHA) V1
TYPE(ALOHA) V2
TYPE(ALOHA) V3
INTEGER*4 I
COMPLEX*16 VERTEX
P1(:) = V1 % P (:)
P2(:) = V2 % P (:)
P3(:) = V3 % P (:)
TMP1 = (V2 % W(1)*V1 % W(1)-V2 % W(2)*V1 % W(2)-V2 % W(3)*V1 %
$ W(3)-V2 % W(4)*V1 % W(4))
TMP2 = (V3 % W(1)*P1(0)-V3 % W(2)*P1(1)-V3 % W(3)*P1(2)-V3 % W(4)
$ *P1(3))
TMP3 = (V3 % W(1)*P2(0)-V3 % W(2)*P2(1)-V3 % W(3)*P2(2)-V3 % W(4)
$ *P2(3))
TMP4 = (V2 % W(1)*P1(0)-V2 % W(2)*P1(1)-V2 % W(3)*P1(2)-V2 % W(4)
$ *P1(3))
TMP5 = (V3 % W(1)*V1 % W(1)-V3 % W(2)*V1 % W(2)-V3 % W(3)*V1 %
$ W(3)-V3 % W(4)*V1 % W(4))
TMP6 = (V2 % W(1)*P3(0)-V2 % W(2)*P3(1)-V2 % W(3)*P3(2)-V2 % W(4)
$ *P3(3))
TMP7 = (V3 % W(1)*V2 % W(1)-V3 % W(2)*V2 % W(2)-V3 % W(3)*V2 %
$ W(3)-V3 % W(4)*V2 % W(4))
TMP8 = (P2(0)*V1 % W(1)-P2(1)*V1 % W(2)-P2(2)*V1 % W(3)-P2(3)*V1
$ % W(4))
TMP9 = (V1 % W(1)*P3(0)-V1 % W(2)*P3(1)-V1 % W(3)*P3(2)-V1 % W(4)
$ *P3(3))
VERTEX = COUP*(TMP1*(-CI*(TMP2)+CI*(TMP3))+(TMP5*(+CI*(TMP4)-CI
$ *(TMP6))+TMP7*(-CI*(TMP8)+CI*(TMP9))))
END


C This File is Automatically generated by ALOHA
C The process calculated in this file is:
C Coup(1) * (P(3,1)*Metric(1,2) - P(3,2)*Metric(1,2) -
C P(2,1)*Metric(1,3) + P(2,3)*Metric(1,3) + P(1,2)*Metric(2,3) -
C P(1,3)*Metric(2,3))
C Coup(2) * (Metric(1,2))
C Coup(3) * (Metric(1,3))
C Coup(4) * (P(1,2) - P(1,3))
C
SUBROUTINE VVV1_VVS1_VSV2_VSS1_0(V1, V2, V3, COUP1, COUP2, COUP3
$ , COUP4,VERTEX)
USE ALOHA_OBJECT
IMPLICIT NONE
COMPLEX*16 CI
PARAMETER (CI=(0D0,1D0))
COMPLEX*16 CZERO
PARAMETER (CZERO=(0D0,0D0))
COMPLEX*16 COUP1
COMPLEX*16 COUP2
COMPLEX*16 COUP3
COMPLEX*16 COUP4
REAL*8 P1(0:3)
REAL*8 P2(0:3)
REAL*8 P3(0:3)
COMPLEX*16 TMP1
COMPLEX*16 TMP2
COMPLEX*16 TMP3
COMPLEX*16 TMP4
COMPLEX*16 TMP5
COMPLEX*16 TMP6
COMPLEX*16 TMP7
COMPLEX*16 TMP8
COMPLEX*16 TMP9
TYPE(ALOHA) V1
TYPE(ALOHA) V2
TYPE(ALOHA) V3
INTEGER*4 I
COMPLEX*16 VERTEX
P1(:) = V1 % P (:)
P2(:) = V2 % P (:)
P3(:) = V3 % P (:)
VERTEX = (0D0,0D0)
TMP1 = (V2 % W(1)*V1 % W(1)-V2 % W(2)*V1 % W(2)-V2 % W(3)*V1 %
$ W(3)-V2 % W(4)*V1 % W(4))
TMP2 = (V3 % W(1)*P1(0)-V3 % W(2)*P1(1)-V3 % W(3)*P1(2)-V3 % W(4)
$ *P1(3))
TMP3 = (V3 % W(1)*P2(0)-V3 % W(2)*P2(1)-V3 % W(3)*P2(2)-V3 % W(4)
$ *P2(3))
TMP4 = (V2 % W(1)*P1(0)-V2 % W(2)*P1(1)-V2 % W(3)*P1(2)-V2 % W(4)
$ *P1(3))
TMP5 = (V3 % W(1)*V1 % W(1)-V3 % W(2)*V1 % W(2)-V3 % W(3)*V1 %
$ W(3)-V3 % W(4)*V1 % W(4))
TMP6 = (V2 % W(1)*P3(0)-V2 % W(2)*P3(1)-V2 % W(3)*P3(2)-V2 % W(4)
$ *P3(3))
TMP7 = (V3 % W(1)*V2 % W(1)-V3 % W(2)*V2 % W(2)-V3 % W(3)*V2 %
$ W(3)-V3 % W(4)*V2 % W(4))
TMP8 = (P2(0)*V1 % W(1)-P2(1)*V1 % W(2)-P2(2)*V1 % W(3)-P2(3)*V1
$ % W(4))
TMP9 = (V1 % W(1)*P3(0)-V1 % W(2)*P3(1)-V1 % W(3)*P3(2)-V1 % W(4)
$ *P3(3))
VERTEX = VERTEX + COUP1*(TMP1*(-CI*(TMP2)+CI*(TMP3))+(TMP5*(+CI
$ *(TMP4)-CI*(TMP6))+TMP7*(-CI*(TMP8)+CI*(TMP9))))
VERTEX = VERTEX + COUP2*(-CI * TMP1*V3 % W(5))
VERTEX = VERTEX + COUP3*(-CI * TMP5*V2 % W(5))
VERTEX = VERTEX + COUP4*V2 % W(5)*V3 % W(5)*(-CI*(TMP8)+CI*(TMP9)
$ )
END


C This File is Automatically generated by ALOHA
C The process calculated in this file is:
C Coup(1) * (P(3,1)*Metric(1,2) - P(3,2)*Metric(1,2) -
C P(2,1)*Metric(1,3) + P(2,3)*Metric(1,3) + P(1,2)*Metric(2,3) -
C P(1,3)*Metric(2,3))
C Coup(2) * (Metric(1,3))
C Coup(3) * (P(1,3) - P(1,2))
C Coup(4) * (Metric(2,3))
C Coup(5) * (P(2,3) - P(2,1))
C Coup(6) * (P(3,1) - P(3,2))
C
SUBROUTINE VVV1_VSV2_VSS2_SVV2_SVS2_SSV3_0(V1, V2, V3, COUP1,
$ COUP2, COUP3, COUP4, COUP5, COUP6,VERTEX)
USE ALOHA_OBJECT
IMPLICIT NONE
COMPLEX*16 CI
PARAMETER (CI=(0D0,1D0))
COMPLEX*16 CZERO
PARAMETER (CZERO=(0D0,0D0))
COMPLEX*16 COUP1
COMPLEX*16 COUP2
COMPLEX*16 COUP3
COMPLEX*16 COUP4
COMPLEX*16 COUP5
COMPLEX*16 COUP6
REAL*8 P1(0:3)
REAL*8 P2(0:3)
REAL*8 P3(0:3)
COMPLEX*16 TMP1
COMPLEX*16 TMP2
COMPLEX*16 TMP3
COMPLEX*16 TMP4
COMPLEX*16 TMP5
COMPLEX*16 TMP6
COMPLEX*16 TMP7
COMPLEX*16 TMP8
COMPLEX*16 TMP9
TYPE(ALOHA) V1
TYPE(ALOHA) V2
TYPE(ALOHA) V3
INTEGER*4 I
COMPLEX*16 VERTEX
P1(:) = V1 % P (:)
P2(:) = V2 % P (:)
P3(:) = V3 % P (:)
VERTEX = (0D0,0D0)
TMP1 = (V2 % W(1)*V1 % W(1)-V2 % W(2)*V1 % W(2)-V2 % W(3)*V1 %
$ W(3)-V2 % W(4)*V1 % W(4))
TMP2 = (V3 % W(1)*P1(0)-V3 % W(2)*P1(1)-V3 % W(3)*P1(2)-V3 % W(4)
$ *P1(3))
TMP3 = (V3 % W(1)*P2(0)-V3 % W(2)*P2(1)-V3 % W(3)*P2(2)-V3 % W(4)
$ *P2(3))
TMP4 = (V2 % W(1)*P1(0)-V2 % W(2)*P1(1)-V2 % W(3)*P1(2)-V2 % W(4)
$ *P1(3))
TMP5 = (V3 % W(1)*V1 % W(1)-V3 % W(2)*V1 % W(2)-V3 % W(3)*V1 %
$ W(3)-V3 % W(4)*V1 % W(4))
TMP6 = (V2 % W(1)*P3(0)-V2 % W(2)*P3(1)-V2 % W(3)*P3(2)-V2 % W(4)
$ *P3(3))
TMP7 = (V3 % W(1)*V2 % W(1)-V3 % W(2)*V2 % W(2)-V3 % W(3)*V2 %
$ W(3)-V3 % W(4)*V2 % W(4))
TMP8 = (P2(0)*V1 % W(1)-P2(1)*V1 % W(2)-P2(2)*V1 % W(3)-P2(3)*V1
$ % W(4))
TMP9 = (V1 % W(1)*P3(0)-V1 % W(2)*P3(1)-V1 % W(3)*P3(2)-V1 % W(4)
$ *P3(3))
VERTEX = VERTEX + COUP1*(TMP1*(-CI*(TMP2)+CI*(TMP3))+(TMP5*(+CI
$ *(TMP4)-CI*(TMP6))+TMP7*(-CI*(TMP8)+CI*(TMP9))))
VERTEX = VERTEX + COUP2*(-CI * TMP5*V2 % W(5))
VERTEX = VERTEX + COUP3*V2 % W(5)*V3 % W(5)*(-CI*(TMP9)+CI*(TMP8)
$ )
VERTEX = VERTEX + COUP4*(-CI * TMP7*V1 % W(5))
VERTEX = VERTEX + COUP5*V1 % W(5)*V3 % W(5)*(-CI*(TMP6)+CI*(TMP4)
$ )
VERTEX = VERTEX + COUP6*V1 % W(5)*V2 % W(5)*(-CI*(TMP2)+CI*(TMP3)
$ )
END


Loading
Loading