1
################################################################################
3
# Copyright (c) 2009 The MadGraph5_aMC@NLO Development team and Contributors
5
# This file is a part of the MadGraph5_aMC@NLO project, an application which
6
# automatically generates Feynman diagrams and matrix elements for arbitrary
7
# high-energy processes in the Standard Model and beyond.
9
# It is subject to the MadGraph5_aMC@NLO license which should accompany this
12
# For more information, visit madgraph.phys.ucl.ac.be and amcatnlo.web.cern.ch
14
################################################################################
16
"""Unit test library for the export_FKS format routines"""
24
root_path = os.path.split(os.path.dirname(os.path.realpath( __file__ )))[0]
25
sys.path.append(os.path.join(root_path, os.path.pardir, os.path.pardir))
27
import tests.unit_tests as unittest
29
import madgraph.various.misc as misc
30
import madgraph.iolibs.export_fks as export_fks
31
import madgraph.fks.fks_base as fks_base
32
import madgraph.fks.fks_helas_objects as fks_helas
33
import madgraph.iolibs.file_writers as writers
34
import madgraph.iolibs.files as files
35
import madgraph.iolibs.group_subprocs as group_subprocs
36
import madgraph.iolibs.helas_call_writers as helas_call_writers
37
import madgraph.iolibs.save_load_object as save_load_object
38
import madgraph.core.base_objects as MG
39
import madgraph.core.helas_objects as helas_objects
40
import madgraph.core.diagram_generation as diagram_generation
41
import madgraph.core.color_algebra as color
42
import madgraph.various.diagram_symmetry as diagram_symmetry
43
import madgraph.various.process_checks as process_checks
44
import madgraph.core.color_amp as color_amp
45
import tests.unit_tests.core.test_helas_objects as test_helas_objects
46
import tests.unit_tests.iolibs.test_file_writers as test_file_writers
47
import tests.unit_tests.iolibs.test_helas_call_writers as \
48
test_helas_call_writers
49
import models.import_ufo as import_ufo
51
_file_path = os.path.dirname(os.path.realpath(__file__))
52
_input_file_path = os.path.join(_file_path, os.path.pardir, os.path.pardir,
54
#===============================================================================
56
#===============================================================================
57
class IOExportFKSTest(unittest.TestCase,
58
test_file_writers.CheckFileCreate):
59
"""Test class for the export fks module"""
62
if not hasattr(self, 'myfks_me') or \
63
not hasattr(self, 'myfortranmodel') or \
64
not hasattr(self, 'myreals'):
66
created_files = ['test']
68
mymodel = import_ufo.import_model('sm')
69
IOExportFKSTest.myfortranmodel = helas_call_writers.FortranUFOHelasCallWriter(mymodel)
71
myleglist = MG.MultiLegList()
74
myleglist.append(MG.MultiLeg({'ids':[21], 'state':False}))
75
myleglist.append(MG.MultiLeg({'ids':[21], 'state':False}))
76
myleglist.append(MG.MultiLeg({'ids':[6], 'state':True}))
77
myleglist.append(MG.MultiLeg({'ids':[-6], 'state':True}))
79
myproc = MG.ProcessDefinition({'legs': myleglist,
81
'orders':{'QCD': 2, 'QED': 0},
82
'perturbation_couplings': ['QCD'],
84
my_process_definitions = MG.ProcessDefinitionList([myproc])
86
myfksmulti = fks_base.FKSMultiProcess(\
87
{'process_definitions': my_process_definitions})
90
fkshelasmulti = fks_helas.FKSHelasMultiProcess(myfksmulti)
91
IOExportFKSTest.myfks_me = fkshelasmulti['matrix_elements'][0]
92
IOExportFKSTest.myreals = fkshelasmulti['real_matrix_elements']
95
tearDown = test_file_writers.CheckFileCreate.clean_files
98
def test_write_maxconfigs(self):
100
""" INTEGER LMAXCONFIGS
101
PARAMETER (LMAXCONFIGS=22)"""
102
process_exporter = export_fks.ProcessExporterFortranFKS()
103
process_exporter.write_maxconfigs_file(\
104
writers.FortranWriter(self.give_pos('test')),\
106
self.assertFileContains('test', goal)
109
def test_write_mparticles(self):
111
""" INTEGER MAX_PARTICLES, MAX_BRANCH
112
PARAMETER (MAX_PARTICLES=5)
113
PARAMETER (MAX_BRANCH=MAX_PARTICLES-1)"""
114
process_exporter = export_fks.ProcessExporterFortranFKS()
115
process_exporter.write_maxparticles_file(\
116
writers.FortranWriter(self.give_pos('test')),\
118
self.assertFileContains('test', goal)
121
def test_write_lh_order(self):
122
"""tests the correct writing of the B-LH order file"""
125
"""#OLE_order written by MadGraph5_aMC@NLO
127
MatrixElementSquareType CHaveraged
132
NJetSymmetrizeFinal Yes
133
ModelFile ./param_card.dat
139
process_exporter = export_fks.ProcessExporterFortranFKS()
140
process_exporter.write_lh_order(\
141
self.give_pos('test'),\
142
self.myfks_me, 'MadLoop')
143
self.assertFileContains('test', goal)
146
def test_write_real_me_wrapper(self):
147
"""tests the correct writing of the real_me_chooser file,
148
that chooses among the different real emissions"""
151
""" SUBROUTINE SMATRIX_REAL(P, WGT)
153
INCLUDE 'nexternal.inc'
154
DOUBLE PRECISION P(0:3, NEXTERNAL)
157
COMMON/C_NFKSPROCESS/NFKSPROCESS
158
REAL*4 TBEFORE, TAFTER
159
REAL*4 TTOT, TOLP, TFASTJET, TPDF
160
COMMON/TIMINGS/TTOT, TOLP, TFASTJET, TPDF
161
CALL CPU_TIME(TBEFORE)
162
IF (NFKSPROCESS.EQ.1) THEN
163
CALL SMATRIX_1(P, WGT)
164
ELSEIF (NFKSPROCESS.EQ.2) THEN
165
CALL SMATRIX_1(P, WGT)
166
ELSEIF (NFKSPROCESS.EQ.3) THEN
167
CALL SMATRIX_1(P, WGT)
168
ELSEIF (NFKSPROCESS.EQ.4) THEN
169
CALL SMATRIX_1(P, WGT)
170
ELSEIF (NFKSPROCESS.EQ.5) THEN
171
CALL SMATRIX_2(P, WGT)
172
ELSEIF (NFKSPROCESS.EQ.6) THEN
173
CALL SMATRIX_3(P, WGT)
174
ELSEIF (NFKSPROCESS.EQ.7) THEN
175
CALL SMATRIX_4(P, WGT)
176
ELSEIF (NFKSPROCESS.EQ.8) THEN
177
CALL SMATRIX_5(P, WGT)
179
WRITE(*,*) 'ERROR: invalid n in real_matrix :', NFKSPROCESS
182
CALL CPU_TIME(TAFTER)
183
TPDF = TPDF + (TAFTER-TBEFORE)
189
process_exporter = export_fks.ProcessExporterFortranFKS()
190
process_exporter.write_real_me_wrapper(\
191
writers.FortranWriter(self.give_pos('test')),
194
self.assertFileContains('test', goal)
197
def test_write_pdf_wrapper(self):
198
"""tests the correct writing of the parton_lum_chooser file,
199
that chooses thepdfs for the different real emissions"""
202
""" DOUBLE PRECISION FUNCTION DLUM()
205
COMMON/C_NFKSPROCESS/NFKSPROCESS
206
IF (NFKSPROCESS.EQ.1) THEN
208
ELSEIF (NFKSPROCESS.EQ.2) THEN
210
ELSEIF (NFKSPROCESS.EQ.3) THEN
212
ELSEIF (NFKSPROCESS.EQ.4) THEN
214
ELSEIF (NFKSPROCESS.EQ.5) THEN
216
ELSEIF (NFKSPROCESS.EQ.6) THEN
218
ELSEIF (NFKSPROCESS.EQ.7) THEN
220
ELSEIF (NFKSPROCESS.EQ.8) THEN
223
WRITE(*,*) 'ERROR: invalid n in dlum :', NFKSPROCESS
231
process_exporter = export_fks.ProcessExporterFortranFKS()
232
process_exporter.write_pdf_wrapper(\
233
writers.FortranWriter(self.give_pos('test')),
236
self.assertFileContains('test', goal)
239
def test_write_leshouche_info_file(self):
240
"""tests the correct writing of fks_info.inc file, containing the
241
relevant informations for all the splittings"""
244
""" INTEGER MAXPROC_USED, MAXFLOW_USED
245
PARAMETER (MAXPROC_USED = 4)
246
PARAMETER (MAXFLOW_USED = 6)
247
INTEGER IDUP_D(8,5,MAXPROC_USED)
248
INTEGER MOTHUP_D(8,2,5,MAXPROC_USED)
249
INTEGER ICOLUP_D(8,2,5,MAXFLOW_USED)
252
DATA (IDUP_D(1,ILH,1),ILH=1,5)/21,21,6,-6,21/
253
DATA (MOTHUP_D(1,1,ILH, 1),ILH=1, 5)/ 0, 0, 1, 1, 1/
254
DATA (MOTHUP_D(1,2,ILH, 1),ILH=1, 5)/ 0, 0, 2, 2, 2/
255
DATA (ICOLUP_D(1,1,ILH, 1),ILH=1, 5)/501,502,501, 0,504/
256
DATA (ICOLUP_D(1,2,ILH, 1),ILH=1, 5)/502,503, 0,504,503/
257
DATA (ICOLUP_D(1,1,ILH, 2),ILH=1, 5)/501,504,501, 0,504/
258
DATA (ICOLUP_D(1,2,ILH, 2),ILH=1, 5)/502,503, 0,503,502/
259
DATA (ICOLUP_D(1,1,ILH, 3),ILH=1, 5)/503,501,501, 0,504/
260
DATA (ICOLUP_D(1,2,ILH, 3),ILH=1, 5)/502,503, 0,504,502/
261
DATA (ICOLUP_D(1,1,ILH, 4),ILH=1, 5)/504,501,501, 0,504/
262
DATA (ICOLUP_D(1,2,ILH, 4),ILH=1, 5)/502,503, 0,502,503/
263
DATA (ICOLUP_D(1,1,ILH, 5),ILH=1, 5)/504,502,501, 0,504/
264
DATA (ICOLUP_D(1,2,ILH, 5),ILH=1, 5)/502,503, 0,503,501/
265
DATA (ICOLUP_D(1,1,ILH, 6),ILH=1, 5)/503,504,501, 0,504/
266
DATA (ICOLUP_D(1,2,ILH, 6),ILH=1, 5)/502,503, 0,502,501/
268
DATA (IDUP_D(2,ILH,1),ILH=1,5)/21,21,6,-6,21/
269
DATA (MOTHUP_D(2,1,ILH, 1),ILH=1, 5)/ 0, 0, 1, 1, 1/
270
DATA (MOTHUP_D(2,2,ILH, 1),ILH=1, 5)/ 0, 0, 2, 2, 2/
271
DATA (ICOLUP_D(2,1,ILH, 1),ILH=1, 5)/501,502,501, 0,504/
272
DATA (ICOLUP_D(2,2,ILH, 1),ILH=1, 5)/502,503, 0,504,503/
273
DATA (ICOLUP_D(2,1,ILH, 2),ILH=1, 5)/501,504,501, 0,504/
274
DATA (ICOLUP_D(2,2,ILH, 2),ILH=1, 5)/502,503, 0,503,502/
275
DATA (ICOLUP_D(2,1,ILH, 3),ILH=1, 5)/503,501,501, 0,504/
276
DATA (ICOLUP_D(2,2,ILH, 3),ILH=1, 5)/502,503, 0,504,502/
277
DATA (ICOLUP_D(2,1,ILH, 4),ILH=1, 5)/504,501,501, 0,504/
278
DATA (ICOLUP_D(2,2,ILH, 4),ILH=1, 5)/502,503, 0,502,503/
279
DATA (ICOLUP_D(2,1,ILH, 5),ILH=1, 5)/504,502,501, 0,504/
280
DATA (ICOLUP_D(2,2,ILH, 5),ILH=1, 5)/502,503, 0,503,501/
281
DATA (ICOLUP_D(2,1,ILH, 6),ILH=1, 5)/503,504,501, 0,504/
282
DATA (ICOLUP_D(2,2,ILH, 6),ILH=1, 5)/502,503, 0,502,501/
284
DATA (IDUP_D(3,ILH,1),ILH=1,5)/21,21,6,-6,21/
285
DATA (MOTHUP_D(3,1,ILH, 1),ILH=1, 5)/ 0, 0, 1, 1, 1/
286
DATA (MOTHUP_D(3,2,ILH, 1),ILH=1, 5)/ 0, 0, 2, 2, 2/
287
DATA (ICOLUP_D(3,1,ILH, 1),ILH=1, 5)/501,502,501, 0,504/
288
DATA (ICOLUP_D(3,2,ILH, 1),ILH=1, 5)/502,503, 0,504,503/
289
DATA (ICOLUP_D(3,1,ILH, 2),ILH=1, 5)/501,504,501, 0,504/
290
DATA (ICOLUP_D(3,2,ILH, 2),ILH=1, 5)/502,503, 0,503,502/
291
DATA (ICOLUP_D(3,1,ILH, 3),ILH=1, 5)/503,501,501, 0,504/
292
DATA (ICOLUP_D(3,2,ILH, 3),ILH=1, 5)/502,503, 0,504,502/
293
DATA (ICOLUP_D(3,1,ILH, 4),ILH=1, 5)/504,501,501, 0,504/
294
DATA (ICOLUP_D(3,2,ILH, 4),ILH=1, 5)/502,503, 0,502,503/
295
DATA (ICOLUP_D(3,1,ILH, 5),ILH=1, 5)/504,502,501, 0,504/
296
DATA (ICOLUP_D(3,2,ILH, 5),ILH=1, 5)/502,503, 0,503,501/
297
DATA (ICOLUP_D(3,1,ILH, 6),ILH=1, 5)/503,504,501, 0,504/
298
DATA (ICOLUP_D(3,2,ILH, 6),ILH=1, 5)/502,503, 0,502,501/
300
DATA (IDUP_D(4,ILH,1),ILH=1,5)/21,21,6,-6,21/
301
DATA (MOTHUP_D(4,1,ILH, 1),ILH=1, 5)/ 0, 0, 1, 1, 1/
302
DATA (MOTHUP_D(4,2,ILH, 1),ILH=1, 5)/ 0, 0, 2, 2, 2/
303
DATA (ICOLUP_D(4,1,ILH, 1),ILH=1, 5)/501,502,501, 0,504/
304
DATA (ICOLUP_D(4,2,ILH, 1),ILH=1, 5)/502,503, 0,504,503/
305
DATA (ICOLUP_D(4,1,ILH, 2),ILH=1, 5)/501,504,501, 0,504/
306
DATA (ICOLUP_D(4,2,ILH, 2),ILH=1, 5)/502,503, 0,503,502/
307
DATA (ICOLUP_D(4,1,ILH, 3),ILH=1, 5)/503,501,501, 0,504/
308
DATA (ICOLUP_D(4,2,ILH, 3),ILH=1, 5)/502,503, 0,504,502/
309
DATA (ICOLUP_D(4,1,ILH, 4),ILH=1, 5)/504,501,501, 0,504/
310
DATA (ICOLUP_D(4,2,ILH, 4),ILH=1, 5)/502,503, 0,502,503/
311
DATA (ICOLUP_D(4,1,ILH, 5),ILH=1, 5)/504,502,501, 0,504/
312
DATA (ICOLUP_D(4,2,ILH, 5),ILH=1, 5)/502,503, 0,503,501/
313
DATA (ICOLUP_D(4,1,ILH, 6),ILH=1, 5)/503,504,501, 0,504/
314
DATA (ICOLUP_D(4,2,ILH, 6),ILH=1, 5)/502,503, 0,502,501/
316
DATA (IDUP_D(5,ILH,1),ILH=1,5)/-1,21,6,-6,-1/
317
DATA (MOTHUP_D(5,1,ILH, 1),ILH=1, 5)/ 0, 0, 1, 1, 1/
318
DATA (MOTHUP_D(5,2,ILH, 1),ILH=1, 5)/ 0, 0, 2, 2, 2/
319
DATA (ICOLUP_D(5,1,ILH, 1),ILH=1, 5)/ 0,502,502, 0, 0/
320
DATA (ICOLUP_D(5,2,ILH, 1),ILH=1, 5)/501,503, 0,501,503/
321
DATA (ICOLUP_D(5,1,ILH, 2),ILH=1, 5)/ 0,502,502, 0, 0/
322
DATA (ICOLUP_D(5,2,ILH, 2),ILH=1, 5)/501,503, 0,503,501/
323
DATA (ICOLUP_D(5,1,ILH, 3),ILH=1, 5)/ 0,501,502, 0, 0/
324
DATA (ICOLUP_D(5,2,ILH, 3),ILH=1, 5)/501,503, 0,503,502/
325
DATA (ICOLUP_D(5,1,ILH, 4),ILH=1, 5)/ 0,501,502, 0, 0/
326
DATA (ICOLUP_D(5,2,ILH, 4),ILH=1, 5)/501,503, 0,502,503/
327
DATA (IDUP_D(5,ILH,2),ILH=1,5)/-3,21,6,-6,-3/
328
DATA (MOTHUP_D(5,1,ILH, 2),ILH=1, 5)/ 0, 0, 1, 1, 1/
329
DATA (MOTHUP_D(5,2,ILH, 2),ILH=1, 5)/ 0, 0, 2, 2, 2/
330
DATA (IDUP_D(5,ILH,3),ILH=1,5)/-2,21,6,-6,-2/
331
DATA (MOTHUP_D(5,1,ILH, 3),ILH=1, 5)/ 0, 0, 1, 1, 1/
332
DATA (MOTHUP_D(5,2,ILH, 3),ILH=1, 5)/ 0, 0, 2, 2, 2/
333
DATA (IDUP_D(5,ILH,4),ILH=1,5)/-4,21,6,-6,-4/
334
DATA (MOTHUP_D(5,1,ILH, 4),ILH=1, 5)/ 0, 0, 1, 1, 1/
335
DATA (MOTHUP_D(5,2,ILH, 4),ILH=1, 5)/ 0, 0, 2, 2, 2/
337
DATA (IDUP_D(6,ILH,1),ILH=1,5)/1,21,6,-6,1/
338
DATA (MOTHUP_D(6,1,ILH, 1),ILH=1, 5)/ 0, 0, 1, 1, 1/
339
DATA (MOTHUP_D(6,2,ILH, 1),ILH=1, 5)/ 0, 0, 2, 2, 2/
340
DATA (ICOLUP_D(6,1,ILH, 1),ILH=1, 5)/503,501,501, 0,502/
341
DATA (ICOLUP_D(6,2,ILH, 1),ILH=1, 5)/ 0,503, 0,502, 0/
342
DATA (ICOLUP_D(6,1,ILH, 2),ILH=1, 5)/502,501,501, 0,502/
343
DATA (ICOLUP_D(6,2,ILH, 2),ILH=1, 5)/ 0,503, 0,503, 0/
344
DATA (ICOLUP_D(6,1,ILH, 3),ILH=1, 5)/503,502,501, 0,502/
345
DATA (ICOLUP_D(6,2,ILH, 3),ILH=1, 5)/ 0,503, 0,501, 0/
346
DATA (ICOLUP_D(6,1,ILH, 4),ILH=1, 5)/501,502,501, 0,502/
347
DATA (ICOLUP_D(6,2,ILH, 4),ILH=1, 5)/ 0,503, 0,503, 0/
348
DATA (IDUP_D(6,ILH,2),ILH=1,5)/3,21,6,-6,3/
349
DATA (MOTHUP_D(6,1,ILH, 2),ILH=1, 5)/ 0, 0, 1, 1, 1/
350
DATA (MOTHUP_D(6,2,ILH, 2),ILH=1, 5)/ 0, 0, 2, 2, 2/
351
DATA (IDUP_D(6,ILH,3),ILH=1,5)/2,21,6,-6,2/
352
DATA (MOTHUP_D(6,1,ILH, 3),ILH=1, 5)/ 0, 0, 1, 1, 1/
353
DATA (MOTHUP_D(6,2,ILH, 3),ILH=1, 5)/ 0, 0, 2, 2, 2/
354
DATA (IDUP_D(6,ILH,4),ILH=1,5)/4,21,6,-6,4/
355
DATA (MOTHUP_D(6,1,ILH, 4),ILH=1, 5)/ 0, 0, 1, 1, 1/
356
DATA (MOTHUP_D(6,2,ILH, 4),ILH=1, 5)/ 0, 0, 2, 2, 2/
358
DATA (IDUP_D(7,ILH,1),ILH=1,5)/21,-1,6,-6,-1/
359
DATA (MOTHUP_D(7,1,ILH, 1),ILH=1, 5)/ 0, 0, 1, 1, 1/
360
DATA (MOTHUP_D(7,2,ILH, 1),ILH=1, 5)/ 0, 0, 2, 2, 2/
361
DATA (ICOLUP_D(7,1,ILH, 1),ILH=1, 5)/501, 0,502, 0, 0/
362
DATA (ICOLUP_D(7,2,ILH, 1),ILH=1, 5)/503,501, 0,503,502/
363
DATA (ICOLUP_D(7,1,ILH, 2),ILH=1, 5)/501, 0,502, 0, 0/
364
DATA (ICOLUP_D(7,2,ILH, 2),ILH=1, 5)/503,501, 0,502,503/
365
DATA (ICOLUP_D(7,1,ILH, 3),ILH=1, 5)/502, 0,502, 0, 0/
366
DATA (ICOLUP_D(7,2,ILH, 3),ILH=1, 5)/503,501, 0,503,501/
367
DATA (ICOLUP_D(7,1,ILH, 4),ILH=1, 5)/502, 0,502, 0, 0/
368
DATA (ICOLUP_D(7,2,ILH, 4),ILH=1, 5)/503,501, 0,501,503/
369
DATA (IDUP_D(7,ILH,2),ILH=1,5)/21,-3,6,-6,-3/
370
DATA (MOTHUP_D(7,1,ILH, 2),ILH=1, 5)/ 0, 0, 1, 1, 1/
371
DATA (MOTHUP_D(7,2,ILH, 2),ILH=1, 5)/ 0, 0, 2, 2, 2/
372
DATA (IDUP_D(7,ILH,3),ILH=1,5)/21,-2,6,-6,-2/
373
DATA (MOTHUP_D(7,1,ILH, 3),ILH=1, 5)/ 0, 0, 1, 1, 1/
374
DATA (MOTHUP_D(7,2,ILH, 3),ILH=1, 5)/ 0, 0, 2, 2, 2/
375
DATA (IDUP_D(7,ILH,4),ILH=1,5)/21,-4,6,-6,-4/
376
DATA (MOTHUP_D(7,1,ILH, 4),ILH=1, 5)/ 0, 0, 1, 1, 1/
377
DATA (MOTHUP_D(7,2,ILH, 4),ILH=1, 5)/ 0, 0, 2, 2, 2/
379
DATA (IDUP_D(8,ILH,1),ILH=1,5)/21,1,6,-6,1/
380
DATA (MOTHUP_D(8,1,ILH, 1),ILH=1, 5)/ 0, 0, 1, 1, 1/
381
DATA (MOTHUP_D(8,2,ILH, 1),ILH=1, 5)/ 0, 0, 2, 2, 2/
382
DATA (ICOLUP_D(8,1,ILH, 1),ILH=1, 5)/501,503,501, 0,502/
383
DATA (ICOLUP_D(8,2,ILH, 1),ILH=1, 5)/503, 0, 0,502, 0/
384
DATA (ICOLUP_D(8,1,ILH, 2),ILH=1, 5)/501,502,501, 0,502/
385
DATA (ICOLUP_D(8,2,ILH, 2),ILH=1, 5)/503, 0, 0,503, 0/
386
DATA (ICOLUP_D(8,1,ILH, 3),ILH=1, 5)/502,503,501, 0,502/
387
DATA (ICOLUP_D(8,2,ILH, 3),ILH=1, 5)/503, 0, 0,501, 0/
388
DATA (ICOLUP_D(8,1,ILH, 4),ILH=1, 5)/502,501,501, 0,502/
389
DATA (ICOLUP_D(8,2,ILH, 4),ILH=1, 5)/503, 0, 0,503, 0/
390
DATA (IDUP_D(8,ILH,2),ILH=1,5)/21,3,6,-6,3/
391
DATA (MOTHUP_D(8,1,ILH, 2),ILH=1, 5)/ 0, 0, 1, 1, 1/
392
DATA (MOTHUP_D(8,2,ILH, 2),ILH=1, 5)/ 0, 0, 2, 2, 2/
393
DATA (IDUP_D(8,ILH,3),ILH=1,5)/21,2,6,-6,2/
394
DATA (MOTHUP_D(8,1,ILH, 3),ILH=1, 5)/ 0, 0, 1, 1, 1/
395
DATA (MOTHUP_D(8,2,ILH, 3),ILH=1, 5)/ 0, 0, 2, 2, 2/
396
DATA (IDUP_D(8,ILH,4),ILH=1,5)/21,4,6,-6,4/
397
DATA (MOTHUP_D(8,1,ILH, 4),ILH=1, 5)/ 0, 0, 1, 1, 1/
398
DATA (MOTHUP_D(8,2,ILH, 4),ILH=1, 5)/ 0, 0, 2, 2, 2/
401
process_exporter = export_fks.ProcessExporterFortranFKS()
402
process_exporter.write_leshouche_info_file(\
403
writers.FortranWriter(self.give_pos('test')),
406
self.assertFileContains('test', goal)
409
def test_write_fks_info_file(self):
410
"""tests the correct writing of fks_info.inc file, containing the
411
relevant informations for all the splittings"""
414
""" INTEGER IPOS, JPOS
415
INTEGER FKS_I_D(8), FKS_J_D(8)
416
INTEGER FKS_J_FROM_I_D(8, NEXTERNAL, 0:NEXTERNAL)
417
INTEGER PARTICLE_TYPE_D(8, NEXTERNAL), PDG_TYPE_D(8, NEXTERNAL)
419
DATA FKS_I_D / 5, 5, 5, 5, 5, 5, 5, 5 /
420
DATA FKS_J_D / 1, 2, 3, 4, 1, 1, 2, 2 /
422
DATA (FKS_J_FROM_I_D(1, 5, JPOS), JPOS = 0, 4) / 4, 1, 2, 3, 4 /
424
DATA (FKS_J_FROM_I_D(2, 5, JPOS), JPOS = 0, 4) / 4, 1, 2, 3, 4 /
426
DATA (FKS_J_FROM_I_D(3, 5, JPOS), JPOS = 0, 4) / 4, 1, 2, 3, 4 /
428
DATA (FKS_J_FROM_I_D(4, 5, JPOS), JPOS = 0, 4) / 4, 1, 2, 3, 4 /
430
DATA (FKS_J_FROM_I_D(5, 5, JPOS), JPOS = 0, 1) / 1, 1 /
432
DATA (FKS_J_FROM_I_D(6, 5, JPOS), JPOS = 0, 1) / 1, 1 /
434
DATA (FKS_J_FROM_I_D(7, 5, JPOS), JPOS = 0, 1) / 1, 2 /
436
DATA (FKS_J_FROM_I_D(8, 5, JPOS), JPOS = 0, 1) / 1, 2 /
441
C octet = 8, triplet = 3, singlet = 1
442
DATA (PARTICLE_TYPE_D(1, IPOS), IPOS=1, NEXTERNAL) / 8, 8, 3,
444
DATA (PARTICLE_TYPE_D(2, IPOS), IPOS=1, NEXTERNAL) / 8, 8, 3,
446
DATA (PARTICLE_TYPE_D(3, IPOS), IPOS=1, NEXTERNAL) / 8, 8, 3,
448
DATA (PARTICLE_TYPE_D(4, IPOS), IPOS=1, NEXTERNAL) / 8, 8, 3,
450
DATA (PARTICLE_TYPE_D(5, IPOS), IPOS=1, NEXTERNAL) / -3, 8, 3,
452
DATA (PARTICLE_TYPE_D(6, IPOS), IPOS=1, NEXTERNAL) / 3, 8, 3,
454
DATA (PARTICLE_TYPE_D(7, IPOS), IPOS=1, NEXTERNAL) / 8, -3, 3,
456
DATA (PARTICLE_TYPE_D(8, IPOS), IPOS=1, NEXTERNAL) / 8, 3, 3,
460
C Particle type according to PDG:
462
DATA (PDG_TYPE_D(1, IPOS), IPOS=1, NEXTERNAL) / 21, 21, 6,
464
DATA (PDG_TYPE_D(2, IPOS), IPOS=1, NEXTERNAL) / 21, 21, 6,
466
DATA (PDG_TYPE_D(3, IPOS), IPOS=1, NEXTERNAL) / 21, 21, 6,
468
DATA (PDG_TYPE_D(4, IPOS), IPOS=1, NEXTERNAL) / 21, 21, 6,
470
DATA (PDG_TYPE_D(5, IPOS), IPOS=1, NEXTERNAL) / -1, 21, 6, -6,
472
DATA (PDG_TYPE_D(6, IPOS), IPOS=1, NEXTERNAL) / 1, 21, 6, -6, 1 /
473
DATA (PDG_TYPE_D(7, IPOS), IPOS=1, NEXTERNAL) / 21, -1, 6, -6,
475
DATA (PDG_TYPE_D(8, IPOS), IPOS=1, NEXTERNAL) / 21, 1, 6, -6, 1 /
479
process_exporter = export_fks.ProcessExporterFortranFKS()
480
process_exporter.write_fks_info_file(\
481
writers.FortranWriter(self.give_pos('test')),
484
self.assertFileContains('test', goal)
487
def test_write_sborn_sf(self):
488
"""Tests the correct writing of the sborn_sf file, containing the calls
489
to the different color linked borns."""
492
""" SUBROUTINE SBORN_SF(P_BORN,M,N,WGT)
494
INCLUDE 'nexternal.inc'
495
DOUBLE PRECISION P_BORN(0:3,NEXTERNAL-1),WGT
496
DOUBLE COMPLEX WGT1(2)
499
C b_sf_001 links partons 1 and 2
500
IF ((M.EQ.1 .AND. N.EQ.2).OR.(M.EQ.2 .AND. N.EQ.1)) THEN
501
CALL SB_SF_001(P_BORN,WGT)
503
C b_sf_002 links partons 1 and 3
504
ELSEIF ((M.EQ.1 .AND. N.EQ.3).OR.(M.EQ.3 .AND. N.EQ.1)) THEN
505
CALL SB_SF_002(P_BORN,WGT)
507
C b_sf_003 links partons 1 and 4
508
ELSEIF ((M.EQ.1 .AND. N.EQ.4).OR.(M.EQ.4 .AND. N.EQ.1)) THEN
509
CALL SB_SF_003(P_BORN,WGT)
511
C b_sf_004 links partons 2 and 3
512
ELSEIF ((M.EQ.2 .AND. N.EQ.3).OR.(M.EQ.3 .AND. N.EQ.2)) THEN
513
CALL SB_SF_004(P_BORN,WGT)
515
C b_sf_005 links partons 2 and 4
516
ELSEIF ((M.EQ.2 .AND. N.EQ.4).OR.(M.EQ.4 .AND. N.EQ.2)) THEN
517
CALL SB_SF_005(P_BORN,WGT)
519
C b_sf_006 links partons 3 and 3
520
ELSEIF (M.EQ.3 .AND. N.EQ.3) THEN
521
CALL SB_SF_006(P_BORN,WGT)
523
C b_sf_007 links partons 3 and 4
524
ELSEIF ((M.EQ.3 .AND. N.EQ.4).OR.(M.EQ.4 .AND. N.EQ.3)) THEN
525
CALL SB_SF_007(P_BORN,WGT)
527
C b_sf_008 links partons 4 and 4
528
ELSEIF (M.EQ.4 .AND. N.EQ.4) THEN
529
CALL SB_SF_008(P_BORN,WGT)
538
process_exporter = export_fks.ProcessExporterFortranFKS()
540
process_exporter.write_sborn_sf(\
541
writers.FortranWriter(self.give_pos('test')),
542
self.myfks_me.color_links,
545
#print open(self.give_pos('test')).read()
546
self.assertFileContains('test', goal)
549
def test_write_leshouche_file(self):
550
"""tests if the leshouche.inc file is correctly written for the born process
553
""" DATA (IDUP(I,1),I=1,4)/21,21,6,-6/
554
DATA (MOTHUP(1,I, 1),I=1, 4)/ 0, 0, 1, 1/
555
DATA (MOTHUP(2,I, 1),I=1, 4)/ 0, 0, 2, 2/
556
DATA (ICOLUP(1,I, 1),I=1, 4)/501,502,501, 0/
557
DATA (ICOLUP(2,I, 1),I=1, 4)/502,503, 0,503/
558
DATA (ICOLUP(1,I, 2),I=1, 4)/503,501,501, 0/
559
DATA (ICOLUP(2,I, 2),I=1, 4)/502,503, 0,502/
561
process_exporter = export_fks.ProcessExporterFortranFKS()
564
process_exporter.write_leshouche_file(
565
writers.FortranWriter(self.give_pos('test')),
566
self.myfks_me.born_matrix_element,
569
self.assertFileContains('test', goal)
572
def test_write_nexternal_file(self):
573
"""tests if the nexternal.inc file is correctly written.
574
The real process used is uux_uxug (real_processes[5])
577
""" INTEGER NEXTERNAL
578
PARAMETER (NEXTERNAL=5)
580
PARAMETER (NINCOMING=2)
582
process_exporter = export_fks.ProcessExporterFortranFKS()
584
process_exporter.write_nexternal_file(
585
writers.FortranWriter(self.give_pos('test')),
588
self.assertFileContains('test', goal)
591
def test_write_pmass_file(self):
592
"""tests if the pmass.inc file is correctly written.
593
The function called is the one of the FortranProcessExporterV4 class.
602
process_exporter = export_fks.ProcessExporterFortranFKS()
604
process_exporter.write_pmass_file(
605
writers.FortranWriter(self.give_pos('test')),
606
self.myfks_me.real_processes[0].matrix_element)
608
self.assertFileContains('test', goal)
611
def test_write_pdf_file(self):
612
"""tests if the parton_lum_x.f file containing the parton distributions
613
for a given real process is correctly written.
614
The real process tested is gg > ttxg (real_processes[0])
617
""" SUBROUTINE DLUM_1(LUM)
618
C ****************************************************
620
C Generated by MadGraph5_aMC@NLO v. %(version)s, %(date)s
621
C By the MadGraph5_aMC@NLO Development Team
622
C Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
623
C RETURNS PARTON LUMINOSITIES FOR MADFKS
626
C Process: g g > t t~ g WEIGHTED=3 QED=0 QCD=3 [ QCD ]
628
C ****************************************************
636
INCLUDE 'nexternal.inc'
637
DOUBLE PRECISION CONV
638
PARAMETER (CONV=389379660D0) !CONV TO PICOBARNS
643
DOUBLE PRECISION PP(0:3,NEXTERNAL), LUM
648
INTEGER I, ICROSS,ITYPE,LP
649
DOUBLE PRECISION P1(0:3,NEXTERNAL)
652
DOUBLE PRECISION XPQ(-7:7)
657
DOUBLE PRECISION ALPHAS2,REWGT,PDG2PDF
663
DOUBLE PRECISION PD(0:MAXPROC)
664
COMMON /SUBPROC/ PD, IPROC
668
COMMON/CMIRROR/IMIRROR
683
IF (IMIRROR.EQ.2) THEN
684
IF (ABS(LPP(2)) .GE. 1) THEN
686
G1=PDG2PDF(ABS(LPP(2)),0*LP,XBK(2),DSQRT(Q2FACT(2)))
688
IF (ABS(LPP(1)) .GE. 1) THEN
690
G2=PDG2PDF(ABS(LPP(1)),0*LP,XBK(1),DSQRT(Q2FACT(1)))
694
IPROC=IPROC+1 ! g g > t t~ g
697
IF (ABS(LPP(1)) .GE. 1) THEN
699
G1=PDG2PDF(ABS(LPP(1)),0*LP,XBK(1),DSQRT(Q2FACT(1)))
701
IF (ABS(LPP(2)) .GE. 1) THEN
703
G2=PDG2PDF(ABS(LPP(2)),0*LP,XBK(2),DSQRT(Q2FACT(2)))
707
IPROC=IPROC+1 ! g g > t t~ g
711
LUM = LUM + PD(I) * CONV
716
""" % misc.get_pkg_info()
718
process_exporter = export_fks.ProcessExporterFortranFKS()
721
process_exporter.write_pdf_file(
722
writers.FortranWriter(self.give_pos('test')),
723
self.myfks_me.real_processes[0].matrix_element, 1,
726
self.assertFileContains('test', goal)
729
def test_write_matrix_element_fks(self):
730
"""tests if the matrix_x.f file containing the matrix element
731
for a given real process is correctly written.
732
The real process tested is gg > ttxg (real_processes[0])
735
""" SUBROUTINE SMATRIX_1(P,ANS)
737
C Generated by MadGraph5_aMC@NLO v. %(version)s, %(date)s
738
C By the MadGraph5_aMC@NLO Development Team
739
C Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
741
C Returns amplitude squared summed/avg over colors
743
C for the point in phase space P(0:3,NEXTERNAL)
745
C Process: g g > t t~ g WEIGHTED=3 QED=0 QCD=3 [ QCD ]
751
INCLUDE 'nexternal.inc'
753
PARAMETER ( NCOMB=32)
757
REAL*8 P(0:3,NEXTERNAL),ANS
761
INTEGER IHEL,IDEN,I,T_IDENT(NCOMB)
763
REAL*8 T,T_SAVE(NCOMB)
765
INTEGER NHEL(NEXTERNAL,NCOMB)
766
DATA (NHEL(I, 1),I=1,5) /-1,-1,-1,-1,-1/
767
DATA (NHEL(I, 2),I=1,5) /-1,-1,-1,-1, 1/
768
DATA (NHEL(I, 3),I=1,5) /-1,-1,-1, 1,-1/
769
DATA (NHEL(I, 4),I=1,5) /-1,-1,-1, 1, 1/
770
DATA (NHEL(I, 5),I=1,5) /-1,-1, 1,-1,-1/
771
DATA (NHEL(I, 6),I=1,5) /-1,-1, 1,-1, 1/
772
DATA (NHEL(I, 7),I=1,5) /-1,-1, 1, 1,-1/
773
DATA (NHEL(I, 8),I=1,5) /-1,-1, 1, 1, 1/
774
DATA (NHEL(I, 9),I=1,5) /-1, 1,-1,-1,-1/
775
DATA (NHEL(I, 10),I=1,5) /-1, 1,-1,-1, 1/
776
DATA (NHEL(I, 11),I=1,5) /-1, 1,-1, 1,-1/
777
DATA (NHEL(I, 12),I=1,5) /-1, 1,-1, 1, 1/
778
DATA (NHEL(I, 13),I=1,5) /-1, 1, 1,-1,-1/
779
DATA (NHEL(I, 14),I=1,5) /-1, 1, 1,-1, 1/
780
DATA (NHEL(I, 15),I=1,5) /-1, 1, 1, 1,-1/
781
DATA (NHEL(I, 16),I=1,5) /-1, 1, 1, 1, 1/
782
DATA (NHEL(I, 17),I=1,5) / 1,-1,-1,-1,-1/
783
DATA (NHEL(I, 18),I=1,5) / 1,-1,-1,-1, 1/
784
DATA (NHEL(I, 19),I=1,5) / 1,-1,-1, 1,-1/
785
DATA (NHEL(I, 20),I=1,5) / 1,-1,-1, 1, 1/
786
DATA (NHEL(I, 21),I=1,5) / 1,-1, 1,-1,-1/
787
DATA (NHEL(I, 22),I=1,5) / 1,-1, 1,-1, 1/
788
DATA (NHEL(I, 23),I=1,5) / 1,-1, 1, 1,-1/
789
DATA (NHEL(I, 24),I=1,5) / 1,-1, 1, 1, 1/
790
DATA (NHEL(I, 25),I=1,5) / 1, 1,-1,-1,-1/
791
DATA (NHEL(I, 26),I=1,5) / 1, 1,-1,-1, 1/
792
DATA (NHEL(I, 27),I=1,5) / 1, 1,-1, 1,-1/
793
DATA (NHEL(I, 28),I=1,5) / 1, 1,-1, 1, 1/
794
DATA (NHEL(I, 29),I=1,5) / 1, 1, 1,-1,-1/
795
DATA (NHEL(I, 30),I=1,5) / 1, 1, 1,-1, 1/
796
DATA (NHEL(I, 31),I=1,5) / 1, 1, 1, 1,-1/
797
DATA (NHEL(I, 32),I=1,5) / 1, 1, 1, 1, 1/
798
LOGICAL GOODHEL(NCOMB)
799
DATA GOODHEL/NCOMB*.FALSE./
809
IF (GOODHEL(IHEL) .OR. NTRY .LT. 2) THEN
811
C for the first ps-point, check for helicities that give
812
C identical matrix elements
813
T=MATRIX_1(P ,NHEL(1,IHEL))
818
IF (T_SAVE(I).EQ.0D0) CYCLE
819
IF (ABS(T/T_SAVE(I)-1D0) .LT. 1D-12) THEN
820
C WRITE (*,*) 'FOUND IDENTICAL',T,IHEL,T_SAVE(I),I
825
IF (T_IDENT(IHEL).GT.0) THEN
826
C if two helicity states are identical, dont recompute
827
T=T_SAVE(T_IDENT(IHEL))
830
T=MATRIX_1(P ,NHEL(1,IHEL))
834
C add to the sum of helicities
836
IF (T .NE. 0D0 .AND. .NOT. GOODHEL(IHEL)) THEN
845
REAL*8 FUNCTION MATRIX_1(P,NHEL)
847
C Generated by MadGraph5_aMC@NLO v. %(version)s, %(date)s
848
C By the MadGraph5_aMC@NLO Development Team
849
C Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
851
C Returns amplitude squared summed/avg over colors
852
C for the point with external lines W(0:6,NEXTERNAL)
854
C Process: g g > t t~ g WEIGHTED=3 QED=0 QCD=3 [ QCD ]
861
PARAMETER (NGRAPHS=18)
862
INTEGER NWAVEFUNCS, NCOLOR
863
PARAMETER (NWAVEFUNCS=12, NCOLOR=6)
867
PARAMETER (IMAG1=(0D0,1D0))
868
INCLUDE 'nexternal.inc'
873
REAL*8 P(0:3,NEXTERNAL)
874
INTEGER NHEL(NEXTERNAL)
879
INTEGER IC(NEXTERNAL)
880
DATA IC /NEXTERNAL*1/
881
REAL*8 DENOM(NCOLOR), CF(NCOLOR,NCOLOR)
882
COMPLEX*16 ZTEMP, AMP(NGRAPHS), JAMP(NCOLOR), W(20,NWAVEFUNCS)
887
DATA (CF(I, 1),I= 1, 6) / 64, -8, -8, 1, 1, 10/
890
DATA (CF(I, 2),I= 1, 6) / -8, 64, 1, 10, -8, 1/
893
DATA (CF(I, 3),I= 1, 6) / -8, 1, 64, -8, 10, 1/
896
DATA (CF(I, 4),I= 1, 6) / 1, 10, -8, 64, 1, -8/
899
DATA (CF(I, 5),I= 1, 6) / 1, -8, 10, 1, 64, -8/
902
DATA (CF(I, 6),I= 1, 6) / 10, 1, 1, -8, -8, 64/
907
CALL VXXXXX(P(0,1),ZERO,NHEL(1),-1*IC(1),W(1,1))
908
CALL VXXXXX(P(0,2),ZERO,NHEL(2),-1*IC(2),W(1,2))
909
CALL OXXXXX(P(0,3),MT,NHEL(3),+1*IC(3),W(1,3))
910
CALL IXXXXX(P(0,4),MT,NHEL(4),-1*IC(4),W(1,4))
911
CALL VXXXXX(P(0,5),ZERO,NHEL(5),+1*IC(5),W(1,5))
912
CALL VVV1P0_1(W(1,1),W(1,2),GC_10,ZERO,ZERO,W(1,6))
913
CALL FFV1P0_3(W(1,4),W(1,3),GC_11,ZERO,ZERO,W(1,7))
914
C Amplitude(s) for diagram number 1
915
CALL VVV1_0(W(1,6),W(1,7),W(1,5),GC_10,AMP(1))
916
CALL FFV1_1(W(1,3),W(1,5),GC_11,MT,WT,W(1,8))
917
C Amplitude(s) for diagram number 2
918
CALL FFV1_0(W(1,4),W(1,8),W(1,6),GC_11,AMP(2))
919
CALL FFV1_2(W(1,4),W(1,5),GC_11,MT,WT,W(1,9))
920
C Amplitude(s) for diagram number 3
921
CALL FFV1_0(W(1,9),W(1,3),W(1,6),GC_11,AMP(3))
922
CALL FFV1_1(W(1,3),W(1,1),GC_11,MT,WT,W(1,6))
923
CALL FFV1_2(W(1,4),W(1,2),GC_11,MT,WT,W(1,10))
924
C Amplitude(s) for diagram number 4
925
CALL FFV1_0(W(1,10),W(1,6),W(1,5),GC_11,AMP(4))
926
CALL VVV1P0_1(W(1,2),W(1,5),GC_10,ZERO,ZERO,W(1,11))
927
C Amplitude(s) for diagram number 5
928
CALL FFV1_0(W(1,4),W(1,6),W(1,11),GC_11,AMP(5))
929
C Amplitude(s) for diagram number 6
930
CALL FFV1_0(W(1,9),W(1,6),W(1,2),GC_11,AMP(6))
931
CALL FFV1_2(W(1,4),W(1,1),GC_11,MT,WT,W(1,6))
932
CALL FFV1_1(W(1,3),W(1,2),GC_11,MT,WT,W(1,12))
933
C Amplitude(s) for diagram number 7
934
CALL FFV1_0(W(1,6),W(1,12),W(1,5),GC_11,AMP(7))
935
C Amplitude(s) for diagram number 8
936
CALL FFV1_0(W(1,6),W(1,3),W(1,11),GC_11,AMP(8))
937
C Amplitude(s) for diagram number 9
938
CALL FFV1_0(W(1,6),W(1,8),W(1,2),GC_11,AMP(9))
939
CALL VVV1P0_1(W(1,1),W(1,5),GC_10,ZERO,ZERO,W(1,6))
940
C Amplitude(s) for diagram number 10
941
CALL FFV1_0(W(1,4),W(1,12),W(1,6),GC_11,AMP(10))
942
C Amplitude(s) for diagram number 11
943
CALL FFV1_0(W(1,10),W(1,3),W(1,6),GC_11,AMP(11))
944
C Amplitude(s) for diagram number 12
945
CALL VVV1_0(W(1,6),W(1,2),W(1,7),GC_10,AMP(12))
946
C Amplitude(s) for diagram number 13
947
CALL FFV1_0(W(1,9),W(1,12),W(1,1),GC_11,AMP(13))
948
C Amplitude(s) for diagram number 14
949
CALL FFV1_0(W(1,10),W(1,8),W(1,1),GC_11,AMP(14))
950
C Amplitude(s) for diagram number 15
951
CALL VVV1_0(W(1,1),W(1,11),W(1,7),GC_10,AMP(15))
952
CALL VVVV1P0_1(W(1,1),W(1,2),W(1,5),GC_12,ZERO,ZERO,W(1,11))
953
CALL VVVV3P0_1(W(1,1),W(1,2),W(1,5),GC_12,ZERO,ZERO,W(1,7))
954
CALL VVVV4P0_1(W(1,1),W(1,2),W(1,5),GC_12,ZERO,ZERO,W(1,10))
955
C Amplitude(s) for diagram number 16
956
CALL FFV1_0(W(1,4),W(1,3),W(1,11),GC_11,AMP(16))
957
CALL FFV1_0(W(1,4),W(1,3),W(1,7),GC_11,AMP(17))
958
CALL FFV1_0(W(1,4),W(1,3),W(1,10),GC_11,AMP(18))
959
JAMP(1)=-AMP(1)+IMAG1*AMP(3)+IMAG1*AMP(5)-AMP(6)+AMP(15)-AMP(18)
961
JAMP(2)=-AMP(4)-IMAG1*AMP(5)+IMAG1*AMP(11)+AMP(12)-AMP(15)
963
JAMP(3)=+AMP(1)-IMAG1*AMP(3)+IMAG1*AMP(10)-AMP(12)-AMP(13)
965
JAMP(4)=-AMP(7)+IMAG1*AMP(8)-IMAG1*AMP(10)+AMP(12)-AMP(15)
967
JAMP(5)=+AMP(1)+IMAG1*AMP(2)-IMAG1*AMP(11)-AMP(12)-AMP(14)
969
JAMP(6)=-AMP(1)-IMAG1*AMP(2)-IMAG1*AMP(8)-AMP(9)+AMP(15)-AMP(18)
975
ZTEMP = ZTEMP + CF(J,I)*JAMP(J)
977
MATRIX_1 = MATRIX_1+ZTEMP*DCONJG(JAMP(I))/DENOM(I)
982
""" % misc.get_pkg_info()
984
process_exporter = export_fks.ProcessExporterFortranFKS()
987
process_exporter.write_matrix_element_fks(
988
writers.FortranWriter(self.give_pos('test')),
989
self.myfks_me.real_processes[0].matrix_element, 1,
992
self.assertFileContains('test', goal)
996
def test_write_born_fks(self):
997
"""tests if the born.f file containing the born matrix element
1001
""" SUBROUTINE SBORN(P1,ANS)
1003
C Generated by MadGraph5_aMC@NLO v. %(version)s, %(date)s
1004
C By the MadGraph5_aMC@NLO Development Team
1005
C Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
1007
C RETURNS AMPLITUDE SQUARED SUMMED/AVG OVER COLORS
1009
C FOR THE POINT IN PHASE SPACE P1(0:3,NEXTERNAL-1)
1011
C Process: g g > t t~ QED=0 QCD=2 [ QCD ]
1017
INCLUDE 'nexternal.inc'
1018
INCLUDE 'born_nhel.inc'
1021
PARAMETER ( NCOMB= 16 )
1023
PARAMETER (THEL=NCOMB*8)
1025
PARAMETER (NGRAPHS= 3)
1029
REAL*8 P1(0:3,NEXTERNAL-1)
1034
INTEGER IHEL,IDEN,I,J,JJ,GLU_IJ
1035
REAL*8 BORN,BORNS(2)
1036
COMPLEX*16 BORNTILDE
1039
INTEGER NHEL(NEXTERNAL-1,NCOMB)
1040
DATA (NHEL(I, 1),I=1,4) /-1,-1,-1,-1/
1041
DATA (NHEL(I, 2),I=1,4) /-1,-1,-1, 1/
1042
DATA (NHEL(I, 3),I=1,4) /-1,-1, 1,-1/
1043
DATA (NHEL(I, 4),I=1,4) /-1,-1, 1, 1/
1044
DATA (NHEL(I, 5),I=1,4) /-1, 1,-1,-1/
1045
DATA (NHEL(I, 6),I=1,4) /-1, 1,-1, 1/
1046
DATA (NHEL(I, 7),I=1,4) /-1, 1, 1,-1/
1047
DATA (NHEL(I, 8),I=1,4) /-1, 1, 1, 1/
1048
DATA (NHEL(I, 9),I=1,4) / 1,-1,-1,-1/
1049
DATA (NHEL(I, 10),I=1,4) / 1,-1,-1, 1/
1050
DATA (NHEL(I, 11),I=1,4) / 1,-1, 1,-1/
1051
DATA (NHEL(I, 12),I=1,4) / 1,-1, 1, 1/
1052
DATA (NHEL(I, 13),I=1,4) / 1, 1,-1,-1/
1053
DATA (NHEL(I, 14),I=1,4) / 1, 1,-1, 1/
1054
DATA (NHEL(I, 15),I=1,4) / 1, 1, 1,-1/
1055
DATA (NHEL(I, 16),I=1,4) / 1, 1, 1, 1/
1056
INTEGER IDEN_VALUES(8)
1057
DATA IDEN_VALUES /256, 256, 256, 256, 256, 256, 256, 256/
1058
INTEGER IJ_VALUES(8)
1059
DATA IJ_VALUES /1, 2, 3, 4, 1, 1, 2, 2/
1063
DOUBLE PRECISION AMP2(MAXAMPS), JAMP2(0:MAXAMPS)
1064
COMMON/TO_AMPS/ AMP2, JAMP2
1066
LOGICAL GOODHEL(NCOMB,8)
1067
COMMON /C_GOODHEL/GOODHEL
1068
DOUBLE COMPLEX SAVEAMP(NGRAPHS,MAX_BHEL)
1069
COMMON/TO_SAVEAMP/SAVEAMP
1070
DOUBLE PRECISION SAVEMOM(NEXTERNAL-1,2)
1071
COMMON/TO_SAVEMOM/SAVEMOM
1072
DOUBLE PRECISION HEL_FAC
1073
INTEGER GET_HEL,SKIP(8)
1074
COMMON/CBORN/HEL_FAC,GET_HEL,SKIP
1075
LOGICAL CALCULATEDBORN
1076
COMMON/CCALCULATEDBORN/CALCULATEDBORN
1078
COMMON/C_NFKSPROCESS/NFKSPROCESS
1082
IDEN=IDEN_VALUES(NFKSPROCESS)
1083
GLU_IJ = IJ_VALUES(NFKSPROCESS)
1084
NTRY(NFKSPROCESS)=NTRY(NFKSPROCESS)+1
1085
IF (NTRY(NFKSPROCESS).LT.2) THEN
1087
DO WHILE(NHEL(GLU_IJ ,SKIP(NFKSPROCESS)).NE.1)
1088
SKIP(NFKSPROCESS)=SKIP(NFKSPROCESS)+1
1090
SKIP(NFKSPROCESS)=SKIP(NFKSPROCESS)-1
1095
DO JJ=1,INT(JAMP2(0))
1098
IF (CALCULATEDBORN) THEN
1100
IF (SAVEMOM(J,1).NE.P1(0,J) .OR. SAVEMOM(J,2).NE.P1(3
1102
CALCULATEDBORN=.FALSE.
1103
WRITE (*,*) 'momenta not the same in Born'
1108
IF (.NOT.CALCULATEDBORN) THEN
1110
SAVEMOM(J,1)=P1(0,J)
1111
SAVEMOM(J,2)=P1(3,J)
1115
SAVEAMP(JJ,J)=(0D0,0D0)
1123
IF (NHEL(GLU_IJ,IHEL).LE.0) THEN
1124
IF ((GOODHEL(IHEL,NFKSPROCESS) .OR. GOODHEL(IHEL+SKIP(NFKSPRO
1125
$ CESS),NFKSPROCESS) .OR. NTRY(NFKSPROCESS) .LT. 2) ) THEN
1126
ANS(1)=ANS(1)+BORN(P1,NHEL(1,IHEL),IHEL,BORNTILDE,BORNS)
1127
ANS(2)=ANS(2)+BORNTILDE
1128
IF ( BORNS(1).NE.0D0 .AND. .NOT. GOODHEL(IHEL,NFKSPROCESS
1130
GOODHEL(IHEL,NFKSPROCESS)=.TRUE.
1132
IF ( BORNS(2).NE.0D0 .AND. .NOT. GOODHEL(IHEL+SKIP(NFKSPROC
1133
$ ESS),NFKSPROCESS) ) THEN
1134
GOODHEL(IHEL+SKIP(NFKSPROCESS),NFKSPROCESS)=.TRUE.
1139
ANS(1)=ANS(1)/DBLE(IDEN)
1140
ANS(2)=ANS(2)/DBLE(IDEN)
1141
CALCULATEDBORN=.TRUE.
1145
REAL*8 FUNCTION BORN(P,NHEL,HELL,BORNTILDE,BORNS)
1147
C Generated by MadGraph5_aMC@NLO v. %(version)s, %(date)s
1148
C By the MadGraph5_aMC@NLO Development Team
1149
C Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
1150
C RETURNS AMPLITUDE SQUARED SUMMED/AVG OVER COLORS
1151
C FOR THE POINT WITH EXTERNAL LINES W(0:6,NEXTERNAL-1)
1153
C Process: g g > t t~ QED=0 QCD=2 [ QCD ]
1159
INTEGER NGRAPHS, NEIGEN
1160
PARAMETER (NGRAPHS= 3,NEIGEN= 1)
1161
INTEGER NWAVEFUNCS, NCOLOR
1162
PARAMETER (NWAVEFUNCS=7, NCOLOR=2)
1164
PARAMETER (ZERO=0D0)
1166
PARAMETER (IMAG1 = (0D0,1D0))
1167
INCLUDE 'nexternal.inc'
1168
INCLUDE 'born_nhel.inc'
1174
REAL*8 P(0:3,NEXTERNAL-1),BORNS(2)
1175
INTEGER NHEL(NEXTERNAL-1), HELL
1176
COMPLEX*16 BORNTILDE
1180
INTEGER I,J,IHEL,BACK_HEL,GLU_IJ
1181
INTEGER IC(NEXTERNAL-1),NMO
1182
PARAMETER (NMO=NEXTERNAL-1)
1184
REAL*8 DENOM(NCOLOR), CF(NCOLOR,NCOLOR)
1185
COMPLEX*16 ZTEMP, AMP(NGRAPHS), JAMP(NCOLOR), W(20,NWAVEFUNCS)
1186
$ , JAMPH(2, NCOLOR)
1190
DOUBLE PRECISION AMP2(MAXAMPS), JAMP2(0:MAXAMPS)
1191
COMMON/TO_AMPS/ AMP2, JAMP2
1192
DOUBLE COMPLEX SAVEAMP(NGRAPHS,MAX_BHEL)
1193
COMMON/TO_SAVEAMP/SAVEAMP
1194
DOUBLE PRECISION HEL_FAC
1195
INTEGER GET_HEL,SKIP(8)
1196
COMMON/CBORN/HEL_FAC,GET_HEL,SKIP
1197
LOGICAL CALCULATEDBORN
1198
COMMON/CCALCULATEDBORN/CALCULATEDBORN
1200
COMMON/C_NFKSPROCESS/NFKSPROCESS
1201
INTEGER IJ_VALUES(8)
1202
DATA IJ_VALUES /1, 2, 3, 4, 1, 1, 2, 2/
1207
DATA (CF(I, 1),I= 1, 2) / 16, -2/
1210
DATA (CF(I, 2),I= 1, 2) / -2, 16/
1215
GLU_IJ = IJ_VALUES(NFKSPROCESS)
1217
BORNTILDE = (0D0,0D0)
1218
BACK_HEL = NHEL(GLU_IJ)
1222
IF (IHEL.EQ.-1.OR.NHEL(GLU_IJ).NE.0) THEN
1223
IF (NHEL(GLU_IJ).NE.0) NHEL(GLU_IJ) = IHEL
1224
IF (.NOT. CALCULATEDBORN) THEN
1225
CALL VXXXXX(P(0,1),ZERO,NHEL(1),-1*IC(1),W(1,1))
1226
CALL VXXXXX(P(0,2),ZERO,NHEL(2),-1*IC(2),W(1,2))
1227
CALL OXXXXX(P(0,3),MT,NHEL(3),+1*IC(3),W(1,3))
1228
CALL IXXXXX(P(0,4),MT,NHEL(4),-1*IC(4),W(1,4))
1229
CALL VVV1P0_1(W(1,1),W(1,2),GC_10,ZERO,ZERO,W(1,5))
1230
C Amplitude(s) for diagram number 1
1231
CALL FFV1_0(W(1,4),W(1,3),W(1,5),GC_11,AMP(1))
1232
CALL FFV1_1(W(1,3),W(1,1),GC_11,MT,WT,W(1,5))
1233
C Amplitude(s) for diagram number 2
1234
CALL FFV1_0(W(1,4),W(1,5),W(1,2),GC_11,AMP(2))
1235
CALL FFV1_2(W(1,4),W(1,1),GC_11,MT,WT,W(1,5))
1236
C Amplitude(s) for diagram number 3
1237
CALL FFV1_0(W(1,5),W(1,3),W(1,2),GC_11,AMP(3))
1240
SAVEAMP(I,HELL)=AMP(I)
1241
ELSEIF(IHEL.EQ.1)THEN
1242
SAVEAMP(I,HELL+SKIP(NFKSPROCESS))=AMP(I)
1244
WRITE(*,*) 'ERROR #1 in born.f'
1248
ELSEIF (CALCULATEDBORN) THEN
1251
AMP(I)=SAVEAMP(I,HELL)
1252
ELSEIF(IHEL.EQ.1)THEN
1253
AMP(I)=SAVEAMP(I,HELL+SKIP(NFKSPROCESS))
1255
WRITE(*,*) 'ERROR #1 in born.f'
1260
JAMP(1)=+IMAG1*AMP(1)-AMP(2)
1261
JAMP(2)=-IMAG1*AMP(1)-AMP(3)
1265
ZTEMP = ZTEMP + CF(J,I)*JAMP(J)
1267
BORNS(2-(1-IHEL)/2)=BORNS(2-(1-IHEL)/2)+ZTEMP*DCONJG(JAMP(I
1271
AMP2(I)=AMP2(I)+AMP(I)*DCONJG(AMP(I))
1274
JAMP2(I)=JAMP2(I)+JAMP(I)*DCONJG(JAMP(I))
1275
JAMPH(2-(1-IHEL)/2,I)=JAMP(I)
1279
BORN=BORNS(1)+BORNS(2)
1283
ZTEMP = ZTEMP + CF(J,I)*JAMPH(2,J)
1285
BORNTILDE = BORNTILDE + ZTEMP*DCONJG(JAMPH(1,I))/DENOM(I)
1287
NHEL(GLU_IJ) = BACK_HEL
1293
PARAMETER ( NCOMB= 16 )
1295
PARAMETER (THEL=NCOMB*8)
1296
LOGICAL GOODHEL(NCOMB,8)
1297
COMMON /C_GOODHEL/GOODHEL
1298
DATA GOODHEL/THEL*.FALSE./
1303
""" % misc.get_pkg_info()
1305
process_exporter = export_fks.ProcessExporterFortranFKS()
1308
process_exporter.write_born_fks(
1309
writers.FortranWriter(self.give_pos('test')),
1311
self.myfortranmodel)
1313
self.assertFileContains('test', goal)
1316
def test_write_born_hel(self):
1317
"""tests if the born_hel.f file containing the born matrix element
1318
is correctly written
1321
""" SUBROUTINE SBORN_HEL(P1,ANS)
1323
C Generated by MadGraph5_aMC@NLO v. %(version)s, %(date)s
1324
C By the MadGraph5_aMC@NLO Development Team
1325
C Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
1327
C RETURNS AMPLITUDE SQUARED SUMMED/AVG OVER COLORS
1329
C FOR THE POINT IN PHASE SPACE P1(0:3,NEXTERNAL-1)
1331
C Process: g g > t t~ QED=0 QCD=2 [ QCD ]
1337
INCLUDE 'nexternal.inc'
1338
INCLUDE 'born_nhel.inc'
1340
PARAMETER ( NCOMB= 16 )
1342
PARAMETER (THEL=NCOMB*8)
1344
PARAMETER (NGRAPHS = 3)
1348
REAL*8 P1(0:3,NEXTERNAL-1),ANS
1354
INTEGER IDEN_VALUES(8)
1355
DATA IDEN_VALUES /256, 256, 256, 256, 256, 256, 256, 256/
1359
LOGICAL GOODHEL(NCOMB,8)
1360
COMMON /C_GOODHEL/ GOODHEL
1361
DOUBLE PRECISION SAVEMOM(NEXTERNAL-1,2)
1362
COMMON/TO_SAVEMOM/SAVEMOM
1363
LOGICAL CALCULATEDBORN
1364
COMMON/CCALCULATEDBORN/CALCULATEDBORN
1366
COMMON/C_NFKSPROCESS/NFKSPROCESS
1367
DOUBLE PRECISION WGT_HEL(MAX_BHEL)
1368
COMMON/C_BORN_HEL/WGT_HEL
1373
IDEN=IDEN_VALUES(NFKSPROCESS)
1374
IF (CALCULATEDBORN) THEN
1376
IF (SAVEMOM(J,1).NE.P1(0,J) .OR. SAVEMOM(J,2).NE.P1(3
1378
CALCULATEDBORN=.FALSE.
1379
WRITE (*,*) 'momenta not the same in Born_hel'
1384
WRITE(*,*) 'Error in born_hel: should be called only with
1385
$ calculatedborn = true'
1391
IF (GOODHEL(IHEL,NFKSPROCESS)) THEN
1392
WGT_HEL(IHEL)=BORN_HEL(P1,IHEL)/DBLE(IDEN)
1393
ANS=ANS+WGT_HEL(IHEL)
1399
REAL*8 FUNCTION BORN_HEL(P,HELL)
1401
C Generated by MadGraph5_aMC@NLO v. %(version)s, %(date)s
1402
C By the MadGraph5_aMC@NLO Development Team
1403
C Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
1404
C RETURNS AMPLITUDE SQUARED SUMMED/AVG OVER COLORS
1405
C FOR THE POINT WITH EXTERNAL LINES W(0:6,NEXTERNAL-1)
1407
C Process: g g > t t~ QED=0 QCD=2 [ QCD ]
1414
PARAMETER ( NGRAPHS = 3 )
1416
PARAMETER (NCOLOR=2)
1418
PARAMETER (ZERO=0D0)
1420
PARAMETER (IMAG1 = (0D0,1D0))
1421
INCLUDE 'nexternal.inc'
1422
INCLUDE 'born_nhel.inc'
1426
REAL*8 P(0:3,NEXTERNAL-1)
1432
REAL*8 DENOM(NCOLOR), CF(NCOLOR,NCOLOR)
1433
COMPLEX*16 ZTEMP, AMP(NGRAPHS), JAMP(NCOLOR)
1437
DOUBLE COMPLEX SAVEAMP(NGRAPHS,MAX_BHEL)
1438
COMMON/TO_SAVEAMP/SAVEAMP
1439
LOGICAL CALCULATEDBORN
1440
COMMON/CCALCULATEDBORN/CALCULATEDBORN
1445
DATA (CF(I, 1),I= 1, 2) / 16, -2/
1448
DATA (CF(I, 2),I= 1, 2) / -2, 16/
1453
IF (.NOT. CALCULATEDBORN) THEN
1454
WRITE(*,*) 'Error in born_hel.f: this should be called only
1455
$ with calculatedborn = true'
1457
ELSEIF (CALCULATEDBORN) THEN
1459
AMP(I)=SAVEAMP(I,HELL)
1462
JAMP(1)=+IMAG1*AMP(1)-AMP(2)
1463
JAMP(2)=-IMAG1*AMP(1)-AMP(3)
1468
ZTEMP = ZTEMP + CF(J,I)*JAMP(J)
1470
BORN_HEL =BORN_HEL+ZTEMP*DCONJG(JAMP(I))/DENOM(I)
1476
""" % misc.get_pkg_info()
1478
process_exporter = export_fks.ProcessExporterFortranFKS()
1481
process_exporter.write_born_hel(
1482
writers.FortranWriter(self.give_pos('test')),
1484
self.myfortranmodel)
1486
self.assertFileContains('test', goal)
1489
def test_write_b_sf_fks(self):
1490
"""Tests the correct writing of a b_sf_xxx.f file, containing one color
1494
""" SUBROUTINE SB_SF_001(P1,ANS)
1496
C Generated by MadGraph5_aMC@NLO v. %(version)s, %(date)s
1497
C By the MadGraph5_aMC@NLO Development Team
1498
C Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
1500
C RETURNS AMPLITUDE SQUARED SUMMED/AVG OVER COLORS
1502
C FOR THE POINT IN PHASE SPACE P(0:3,NEXTERNAL-1)
1504
C Process: g g > t t~ QED=0 QCD=2 [ QCD ]
1512
INCLUDE 'nexternal.inc'
1514
PARAMETER ( NCOMB= 16 )
1516
PARAMETER (THEL=NCOMB*8)
1518
PARAMETER (NGRAPHS= 3)
1522
REAL*8 P1(0:3,NEXTERNAL-1),ANS
1528
INTEGER IDEN_VALUES(8)
1529
DATA IDEN_VALUES /256, 256, 256, 256, 256, 256, 256, 256/
1533
LOGICAL GOODHEL(NCOMB,8)
1534
COMMON /C_GOODHEL/ GOODHEL
1535
DOUBLE PRECISION SAVEMOM(NEXTERNAL-1,2)
1536
COMMON/TO_SAVEMOM/SAVEMOM
1537
LOGICAL CALCULATEDBORN
1538
COMMON/CCALCULATEDBORN/CALCULATEDBORN
1540
COMMON/C_NFKSPROCESS/NFKSPROCESS
1544
IDEN=IDEN_VALUES(NFKSPROCESS)
1545
IF (CALCULATEDBORN) THEN
1547
IF (SAVEMOM(J,1).NE.P1(0,J) .OR. SAVEMOM(J,2).NE.P1(3
1549
CALCULATEDBORN=.FALSE.
1550
WRITE(*,*) 'Error in sb_sf: momenta not the same in the
1556
WRITE(*,*) 'Error in sb_sf: color_linked borns should be
1557
$ called only with calculatedborn = true'
1562
IF (GOODHEL(IHEL,NFKSPROCESS)) THEN
1563
ANS=ANS+B_SF_001(P1,IHEL)
1570
REAL*8 FUNCTION B_SF_001(P,HELL)
1572
C Generated by MadGraph5_aMC@NLO v. %(version)s, %(date)s
1573
C By the MadGraph5_aMC@NLO Development Team
1574
C Visit launchpad.net/madgraph5 and amcatnlo.web.cern.ch
1575
C RETURNS AMPLITUDE SQUARED SUMMED/AVG OVER COLORS
1576
C FOR THE POINT WITH EXTERNAL LINES W(0:6,NEXTERNAL-1)
1578
C Process: g g > t t~ QED=0 QCD=2 [ QCD ]
1587
PARAMETER ( NGRAPHS = 3 )
1588
INTEGER NCOLOR1, NCOLOR2
1589
PARAMETER (NCOLOR1=2, NCOLOR2=3)
1591
PARAMETER (ZERO=0D0)
1593
PARAMETER (IMAG1 = (0D0,1D0))
1594
INCLUDE 'nexternal.inc'
1595
INCLUDE 'born_nhel.inc'
1599
REAL*8 P(0:3,NEXTERNAL-1)
1605
REAL*8 DENOM(NCOLOR1), CF(NCOLOR2,NCOLOR1)
1606
COMPLEX*16 ZTEMP, AMP(NGRAPHS), JAMP1(NCOLOR1), JAMP2(NCOLOR2)
1610
DOUBLE COMPLEX SAVEAMP(NGRAPHS,MAX_BHEL)
1611
COMMON/TO_SAVEAMP/SAVEAMP
1612
LOGICAL CALCULATEDBORN
1613
COMMON/CCALCULATEDBORN/CALCULATEDBORN
1618
DATA (CF(I, 1),I= 1, 3) / 16, -2, 6/
1620
DATA (CF(I, 2),I= 1, 3) / -2, 16, 6/
1624
IF (.NOT. CALCULATEDBORN) THEN
1625
WRITE(*,*) 'Error in b_sf: color_linked borns should be called
1626
$ only with calculatedborn = true'
1628
ELSEIF (CALCULATEDBORN) THEN
1630
AMP(I)=SAVEAMP(I,HELL)
1633
JAMP1(1)=+IMAG1*AMP(1)-AMP(2)
1634
JAMP1(2)=-IMAG1*AMP(1)-AMP(3)
1635
JAMP2(1)=+1D0/2D0*(-3D0*IMAG1*AMP(1)+3D0*AMP(2))
1636
JAMP2(2)=+1D0/2D0*(+3D0*IMAG1*AMP(1)+3D0*AMP(3))
1637
JAMP2(3)=+1D0/2D0*(+AMP(2)+AMP(3))
1642
ZTEMP = ZTEMP + CF(J,I)*JAMP2(J)
1644
B_SF_001 =B_SF_001+ZTEMP*DCONJG(JAMP1(I))/DENOM(I)
1650
""" % misc.get_pkg_info()
1652
process_exporter = export_fks.ProcessExporterFortranFKS()
1654
process_exporter.write_b_sf_fks(\
1655
writers.FortranWriter(self.give_pos('test')),
1656
self.myfks_me, 0, self.myfortranmodel)
1658
#print open(self.give_pos('test')).read()
1659
self.assertFileContains('test', goal)
1662
def test_write_born_nhel_file(self):
1663
"""tests if the born_nhel.inc file is correctly written"""
1665
""" INTEGER MAX_BHEL, MAX_BCOL
1666
PARAMETER (MAX_BHEL=16)
1667
PARAMETER(MAX_BCOL=2)
1669
process_exporter = export_fks.ProcessExporterFortranFKS()
1672
process_exporter.write_born_fks(
1673
writers.FortranWriter(self.give_pos('test1')),
1675
self.myfortranmodel)
1678
process_exporter.write_leshouche_file(
1679
writers.FortranWriter(self.give_pos('test2')),
1680
self.myfks_me.born_matrix_element,
1681
self.myfortranmodel)
1683
process_exporter.write_born_nhel_file(
1684
writers.FortranWriter(self.give_pos('test')),
1685
self.myfks_me.born_matrix_element,
1687
self.myfortranmodel,
1690
self.assertFileContains('test', goal)
1693
def test_write_nfksconfigs_file(self):
1694
"""tests if the nFKSconfigs.inc file is correctly written"""
1696
""" INTEGER FKS_CONFIGS
1697
PARAMETER (FKS_CONFIGS=8)
1701
process_exporter = export_fks.ProcessExporterFortranFKS()
1702
process_exporter.write_nfksconfigs_file(\
1703
writers.FortranWriter(self.give_pos('test')),
1705
self.myfortranmodel)
1706
self.assertFileContains('test', goal)
1709
def test_write_configs_file_born(self):
1710
"""Tests if the configs.inc file is corretly written
1711
for the born matrix element.
1714
"""C Diagram 1, Amplitude 1
1715
DATA MAPCONFIG( 1)/ 1/
1716
DATA (IFOREST(I, -1, 1),I=1,2)/ 4, 3/
1717
DATA SPROP( -1, 1)/ 21/
1718
C Diagram 2, Amplitude 2
1719
DATA MAPCONFIG( 2)/ 2/
1720
DATA (IFOREST(I, -1, 2),I=1,2)/ 1, 3/
1721
DATA TPRID( -1, 2)/ 6/
1722
DATA (IFOREST(I, -2, 2),I=1,2)/ -1, 4/
1723
C Diagram 3, Amplitude 3
1724
DATA MAPCONFIG( 3)/ 3/
1725
DATA (IFOREST(I, -1, 3),I=1,2)/ 1, 4/
1726
DATA TPRID( -1, 3)/ 6/
1727
DATA (IFOREST(I, -2, 3),I=1,2)/ -1, 3/
1729
DATA MAPCONFIG(0)/ 3/
1731
process_exporter = export_fks.ProcessExporterFortranFKS()
1733
nconfigs, mapconfigs, s_and_t_channels = \
1734
process_exporter.write_configs_file(
1735
writers.FortranWriter(self.give_pos('test')),
1736
self.myfks_me.born_matrix_element,
1737
self.myfortranmodel)
1739
self.assertFileContains('test', goal)
1742
def test_write_props_file_born(self):
1743
"""Tests if the props.inc file is corretly written
1744
for the born matrix element.
1747
""" PMASS( -1, 1) = ZERO
1748
PWIDTH( -1, 1) = ZERO
1750
PMASS( -1, 2) = ABS(MT)
1751
PWIDTH( -1, 2) = ABS(WT)
1753
PMASS( -1, 3) = ABS(MT)
1754
PWIDTH( -1, 3) = ABS(WT)
1757
process_exporter = export_fks.ProcessExporterFortranFKS()
1759
nconfigs, mapconfigs, s_and_t_channels = \
1760
process_exporter.write_configs_file(
1761
writers.FortranWriter(self.give_pos('test1')),
1762
self.myfks_me.born_matrix_element,
1763
self.myfortranmodel)
1765
process_exporter.write_props_file(
1766
writers.FortranWriter(self.give_pos('test')),
1767
self.myfks_me.born_matrix_element,
1768
self.myfortranmodel,
1771
self.assertFileContains('test', goal)
1774
def test_write_coloramps_file(self):
1775
"""Tests if the coloramps.inc file is corretly written
1776
for the born process
1779
""" LOGICAL ICOLAMP(2,3,1)
1780
DATA(ICOLAMP(I,1,1),I=1,2)/.TRUE.,.TRUE./
1781
DATA(ICOLAMP(I,2,1),I=1,2)/.TRUE.,.FALSE./
1782
DATA(ICOLAMP(I,3,1),I=1,2)/.FALSE.,.TRUE./
1784
process_exporter = export_fks.ProcessExporterFortranFKS()
1786
nconfigs, mapconfigs, s_and_t_channels = \
1787
process_exporter.write_configs_file(
1788
writers.FortranWriter(self.give_pos('test1')),
1789
self.myfks_me.born_matrix_element,
1790
self.myfortranmodel)
1792
process_exporter.write_coloramps_file(
1793
writers.FortranWriter(self.give_pos('test')),
1795
self.myfks_me.born_matrix_element,
1796
self.myfortranmodel)
1798
self.assertFileContains('test', goal)
1801
def test_write_decayBW_file(self):
1802
"""Tests if the decayBW.inc file is correctly written
1803
for the born process.
1806
""" DATA GFORCEBW(-1,1)/.FALSE./
1809
process_exporter = export_fks.ProcessExporterFortranFKS()
1811
nconfigs, mapconfigs, s_and_t_channels = \
1812
process_exporter.write_configs_file(
1813
writers.FortranWriter(self.give_pos('test1')),
1814
self.myfks_me.born_matrix_element,
1815
self.myfortranmodel)
1817
process_exporter.write_decayBW_file(
1818
writers.FortranWriter(self.give_pos('test')),
1821
self.assertFileContains('test', goal)
1826
def test_get_fks_j_from_i_lines(self):
1827
"""Test that the lines corresponding to the fks_j_from_i array, to be
1830
lines = ['DATA (FKS_J_FROM_I_D(2, 5, JPOS), JPOS = 0, 1) / 1, 1 /','']
1832
process_exporter = export_fks.ProcessExporterFortranFKS()
1833
self.assertEqual(lines, process_exporter.get_fks_j_from_i_lines(self.myfks_me.real_processes[1], 2))
1836
def test_get_color_data_lines_from_color_matrix(self):
1837
"""tests if the color data lines are correctly extracted from a given
1839
The first color link is used.
1842
goal = ["DATA DENOM(1)/3/",
1843
"DATA (CF(I, 1),I= 1, 3) / 16, -2, 6/",
1845
"DATA (CF(I, 2),I= 1, 3) / -2, 16, 6/"
1847
process_exporter = export_fks.ProcessExporterFortranFKS()
1849
lines = process_exporter.get_color_data_lines_from_color_matrix(
1850
self.myfks_me.color_links[0]['link_matrix'])
1852
for line, goalline in zip(lines, goal):
1853
self.assertEqual(line.upper(), goalline)
1856
def test_den_factor_lines(self):
1857
"""Tests if the den_factor lines for a given matrix element are correctly
1862
["INTEGER IDEN_VALUES(8)",
1863
"DATA IDEN_VALUES /256, 256, 256, 256, 256, 256, 256, 256/"]
1864
process_exporter = export_fks.ProcessExporterFortranFKS()
1866
self.assertEqual(goal,
1867
process_exporter.get_den_factor_lines(
1871
def test_write_ij_lines(self):
1872
"""Tests if the ij lines for a given matrix element are correctly
1877
["INTEGER IJ_VALUES(8)",
1878
"DATA IJ_VALUES /1, 2, 3, 4, 1, 1, 2, 2/"]
1879
process_exporter = export_fks.ProcessExporterFortranFKS()
1881
self.assertEqual(goal,
1882
process_exporter.get_ij_lines(