1
SUBROUTINE SMATRIX_4(P,ANS)
1
SUBROUTINE SMATRIX4(P,ANS_SUMMED)
3
C Generated by MadGraph5_aMC@NLO v. %(version)s, %(date)s
4
C By the MadGraph5_aMC@NLO Development Team
5
C Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
8
C Return the sum of the split orders which are required in
9
C orders.inc (NLO_ORDERS)
12
C Process: g d~ > t t~ d~ [ real = QED QCD ] QCD^2<=6 QED^2<=0
13
C Process: g s~ > t t~ s~ [ real = QED QCD ] QCD^2<=6 QED^2<=0
14
C Process: g u~ > t t~ u~ [ real = QED QCD ] QCD^2<=6 QED^2<=0
15
C Process: g c~ > t t~ c~ [ real = QED QCD ] QCD^2<=6 QED^2<=0
22
PARAMETER (NEXTERNAL=5)
24
PARAMETER (NSQAMPSO=1)
28
REAL*8 P(0:3,NEXTERNAL), ANS_SUMMED
33
REAL*8 ANS(0:NSQAMPSO)
34
LOGICAL KEEP_ORDER(NSQAMPSO), FIRSTTIME
36
DATA KEEP_ORDER / NSQAMPSO*.TRUE. /
37
DATA FIRSTTIME / .TRUE. /
38
INTEGER AMP_ORDERS(NSPLITORDERS)
39
DOUBLE PRECISION ANS_MAX, TINY
40
PARAMETER (TINY = 1D-12)
41
DOUBLE PRECISION WGT_ME_BORN,WGT_ME_REAL
42
COMMON /C_WGT_ME_TREE/ WGT_ME_BORN,WGT_ME_REAL
46
INTEGER GETORDPOWFROMINDEX4
47
INTEGER ORDERS_TO_AMP_SPLIT_POS
52
C look for orders which match the nlo order constraint
56
DO J = 1, NSPLITORDERS
57
IF(GETORDPOWFROMINDEX4(J, I) .GT. NLO_ORDERS(J)) THEN
58
KEEP_ORDER(I) = .FALSE.
62
IF (KEEP_ORDER(I)) THEN
63
WRITE(*,*) 'REAL 4: keeping split order ', I
65
WRITE(*,*) 'REAL 4: not keeping split order ', I
71
CALL SMATRIX4_SPLITORDERS(P,ANS)
75
C reset the amp_split array
76
AMP_SPLIT(1:AMP_SPLIT_SIZE) = 0D0
79
ANS_MAX = MAX(DABS(ANS(I)),ANS_MAX)
83
IF (KEEP_ORDER(I)) THEN
84
ANS_SUMMED = ANS_SUMMED + ANS(I)
85
C keep track of the separate pieces correspoinding to
86
C different coupling combinations
87
DO J = 1, NSPLITORDERS
88
AMP_ORDERS(J) = GETORDPOWFROMINDEX4(J, I)
90
IF (ABS(ANS(I)).GT.ANS_MAX*TINY)
91
$ AMP_SPLIT(ORDERS_TO_AMP_SPLIT_POS(AMP_ORDERS)) = ANS(I)
95
C avoid fake non-zeros
96
IF (DABS(ANS_SUMMED).LT.TINY*ANS_MAX) ANS_SUMMED=0D0
98
WGT_ME_REAL = ANS_SUMMED
104
SUBROUTINE SMATRIX4_SPLITORDERS(P,ANS)
3
106
C Generated by MadGraph5_aMC@NLO v. %(version)s, %(date)s
4
107
C By the MadGraph5_aMC@NLO Development Team
20
123
INCLUDE 'nexternal.inc'
22
125
PARAMETER ( NCOMB=32)
127
PARAMETER (NSQAMPSO=1)
26
REAL*8 P(0:3,NEXTERNAL),ANS
27
DOUBLE PRECISION WGT_ME_BORN,WGT_ME_REAL
28
COMMON /C_WGT_ME_TREE/ WGT_ME_BORN,WGT_ME_REAL
131
REAL*8 P(0:3,NEXTERNAL),ANS(0:NSQAMPSO)
32
INTEGER IHEL,IDEN,I,T_IDENT(NCOMB)
34
REAL*8 T,T_SAVE(NCOMB)
135
INTEGER IHEL,IDEN,I,J,T_IDENT(NCOMB)
136
REAL*8 T(0:NSQAMPSO),T_SAVE(NCOMB,0:NSQAMPSO)
35
137
SAVE T_SAVE,T_IDENT
36
138
INTEGER NHEL(NEXTERNAL,NCOMB)
37
139
DATA (NHEL(I, 1),I=1,5) /-1,-1,-1, 1, 1/
80
184
IF (GOODHEL(IHEL) .OR. NTRY .LT. 2) THEN
81
185
IF (NTRY.LT.2) THEN
82
186
C for the first ps-point, check for helicities that give
83
187
C identical matrix elements
84
T=MATRIX_4(P ,NHEL(1,IHEL))
188
CALL MATRIX_4(P ,NHEL(1,IHEL),T)
89
IF (T_SAVE(I).EQ.0D0) CYCLE
90
IF (ABS(T/T_SAVE(I)-1D0) .LT. 1D-12) THEN
91
C WRITE (*,*) 'FOUND IDENTICAL',T,IHEL,T_SAVE(I),I
194
IF (T(0).EQ.0D0) EXIT
195
IF (T_SAVE(I,0).EQ.0D0) CYCLE
197
IF (ABS(T(J)/T_SAVE(I,J)-1D0) .GT. 1D-12) GOTO 444
96
203
IF (T_IDENT(IHEL).GT.0) THEN
97
204
C if two helicity states are identical, dont recompute
98
T=T_SAVE(T_IDENT(IHEL))
206
T(I)=T_SAVE(T_IDENT(IHEL),I)
101
T=MATRIX_4(P ,NHEL(1,IHEL))
210
CALL MATRIX_4(P ,NHEL(1,IHEL),T)
105
216
C add to the sum of helicities
107
IF (T .NE. 0D0 .AND. .NOT. GOODHEL(IHEL)) THEN
217
DO I=1,NSQAMPSO !keep loop from 1!!
220
IF (T(0) .NE. 0D0 .AND. .NOT. GOODHEL(IHEL)) THEN
108
221
GOODHEL(IHEL)=.TRUE.
226
ANS(I)=ANS(I)/DBLE(IDEN)
117
REAL*8 FUNCTION MATRIX_4(P,NHEL)
232
SUBROUTINE MATRIX_4(P,NHEL,RES)
119
234
C Generated by MadGraph5_aMC@NLO v. %(version)s, %(date)s
120
235
C By the MadGraph5_aMC@NLO Development Team
148
265
REAL*8 P(0:3,NEXTERNAL)
149
266
INTEGER NHEL(NEXTERNAL)
267
REAL*8 RES(0:NSQAMPSO)
151
269
C LOCAL VARIABLES
154
272
INTEGER IC(NEXTERNAL)
155
273
DATA IC /NEXTERNAL*1/
156
REAL*8 DENOM(NCOLOR), CF(NCOLOR,NCOLOR)
157
COMPLEX*16 ZTEMP, AMP(NGRAPHS), JAMP(NCOLOR), W(8,NWAVEFUNCS)
274
REAL*8 CF(NCOLOR,NCOLOR)
275
COMPLEX*16 ZTEMP, AMP(NGRAPHS), JAMP(NCOLOR,NAMPSO), W(8
277
COMPLEX*16 TMP_JAMP(0)
162
DATA (CF(I, 1),I= 1, 4) / 12, 4, 4, 0/
285
DATA (CF(I, 1),I= 1, 4) /1.200000000000000D+01
286
$ ,4.000000000000000D+00,4.000000000000000D+00,0.000000000000000D
163
288
C 1 T(1,2,4) T(3,5)
165
DATA (CF(I, 2),I= 1, 4) / 4, 12, 0, 4/
289
DATA (CF(I, 2),I= 1, 4) /4.000000000000000D+00
290
$ ,1.200000000000000D+01,0.000000000000000D+00,4.000000000000000D
166
292
C 1 T(1,2,5) T(3,4)
168
DATA (CF(I, 3),I= 1, 4) / 4, 0, 12, 4/
293
DATA (CF(I, 3),I= 1, 4) /4.000000000000000D+00
294
$ ,0.000000000000000D+00,1.200000000000000D+01,4.000000000000000D
169
296
C 1 T(1,3,4) T(2,5)
171
DATA (CF(I, 4),I= 1, 4) / 0, 4, 4, 12/
297
DATA (CF(I, 4),I= 1, 4) /0.000000000000000D+00
298
$ ,4.000000000000000D+00,4.000000000000000D+00,1.200000000000000D
172
300
C 1 T(1,3,5) T(2,4)
194
322
CALL FFV1_0(W(1,6),W(1,2),W(1,7),GC_11,AMP(4))
195
323
C Amplitude(s) for diagram number 5
196
324
CALL VVV1_0(W(1,1),W(1,8),W(1,7),GC_10,AMP(5))
197
JAMP(1)=+1D0/2D0*(+AMP(1)+AMP(3)+IMAG1*AMP(5))
198
JAMP(2)=+1D0/2D0*(-1D0/3D0*AMP(1)-1D0/3D0*AMP(4))
199
JAMP(3)=+1D0/2D0*(-1D0/3D0*AMP(2)-1D0/3D0*AMP(3))
200
JAMP(4)=+1D0/2D0*(+AMP(2)+AMP(4)-IMAG1*AMP(5))
205
ZTEMP = ZTEMP + CF(J,I)*JAMP(J)
207
MATRIX_4 = MATRIX_4+ZTEMP*DCONJG(JAMP(I))/DENOM(I)
325
C JAMPs contributing to orders QCD=3 QED=0
326
JAMP(1,1) = (5.000000000000000D-01)*AMP(1)+(5.000000000000000D
327
$ -01)*AMP(3)+((0.000000000000000D+00,5.000000000000000D-01))
329
JAMP(2,1) = (-1.666666666666667D-01)*AMP(1)+(-1.666666666666667D
331
JAMP(3,1) = (-1.666666666666667D-01)*AMP(2)+(-1.666666666666667D
333
JAMP(4,1) = (5.000000000000000D-01)*AMP(2)+(5.000000000000000D
334
$ -01)*AMP(4)+((0.000000000000000D+00,-5.000000000000000D-01))
344
ZTEMP = ZTEMP + CF(J,I)*JAMP(J,M)
347
RES(SQSOINDEX4(M,N)) = RES(SQSOINDEX4(M,N)) + ZTEMP
360
C Helper functions to deal with the split orders.
363
INTEGER FUNCTION SQSOINDEX4(AMPORDERA,AMPORDERB)
365
C This functions plays the role of the interference matrix. It can
367
C made more elegant using hashtables if its execution speed ever
369
C factor. From two split order indices of the jamps, it return the
371
C index in the squared order canonical ordering.
376
INTEGER NAMPSO, NSQAMPSO
377
PARAMETER (NAMPSO=1, NSQAMPSO=1)
379
PARAMETER (NSPLITORDERS=2)
383
INTEGER AMPORDERA, AMPORDERB
387
INTEGER I, SQORDERS(NSPLITORDERS)
388
INTEGER AMPSPLITORDERS(NAMPSO,NSPLITORDERS)
389
DATA (AMPSPLITORDERS( 1,I),I= 1, 2) / 3, 0/
393
INTEGER SQSOINDEX_FROM_ORDERS4
398
SQORDERS(I)=AMPSPLITORDERS(AMPORDERA,I)
399
$ +AMPSPLITORDERS(AMPORDERB,I)
401
SQSOINDEX4=SQSOINDEX_FROM_ORDERS4(SQORDERS)
406
INTEGER FUNCTION SQSOINDEX_FROM_ORDERS4(ORDERS)
408
C From a list of values for the split orders, this function
410
C corresponding index in the squared orders canonical ordering.
414
PARAMETER (NSQAMPSO=1)
416
PARAMETER (NSPLITORDERS=2)
420
INTEGER ORDERS(NSPLITORDERS)
425
INTEGER SQSPLITORDERS(NSQAMPSO,NSPLITORDERS)
426
C the values listed below are for QCD, QED
427
DATA (SQSPLITORDERS( 1,I),I= 1, 2) / 6, 0/
433
IF (ORDERS(J).NE.SQSPLITORDERS(I,J)) GOTO 1009
435
SQSOINDEX_FROM_ORDERS4 = I
440
WRITE(*,*) 'ERROR:: Stopping function sqsoindex_from_orders'
441
WRITE(*,*) 'Could not find squared orders ',(ORDERS(I),I=1
449
INTEGER FUNCTION GETORDPOWFROMINDEX4(IORDER, INDX)
451
C Return the power of the IORDER-th order appearing at position
453
C in the split-orders output
457
PARAMETER (NSQAMPSO=1)
459
PARAMETER (NSPLITORDERS=2)
468
INTEGER SQSPLITORDERS(NSQAMPSO,NSPLITORDERS)
469
C the values listed below are for QCD, QED
470
DATA (SQSPLITORDERS( 1,I),I= 1, 2) / 6, 0/
474
IF (IORDER.GT.NSPLITORDERS.OR.IORDER.LT.1) THEN
475
WRITE(*,*) 'INVALID IORDER 4', IORDER
476
WRITE(*,*) 'SHOULD BE BETWEEN 1 AND ', NSPLITORDERS
480
IF (INDX.GT.NSQAMPSO.OR.INDX.LT.1) THEN
481
WRITE(*,*) 'INVALID INDX 4', INDX
482
WRITE(*,*) 'SHOULD BE BETWEEN 1 AND ', NSQAMPSO
486
GETORDPOWFROMINDEX4=SQSPLITORDERS(INDX, IORDER)
491
SUBROUTINE GET_NSQSO_REAL4(NSQSO)
493
C Simple subroutine returning the number of squared split order
494
C contributions returned in ANS when calling SMATRIX_SPLITORDERS
498
PARAMETER (NSQAMPSO=1)