################################################################################ # # Copyright (c) 2009 The MadGraph5_aMC@NLO Development team and Contributors # # This file is a part of the MadGraph5_aMC@NLO project, an application which # automatically generates Feynman diagrams and matrix elements for arbitrary # high-energy processes in the Standard Model and beyond. # # It is subject to the MadGraph5_aMC@NLO license which should accompany this # distribution. # # For more information, visit madgraph.phys.ucl.ac.be and amcatnlo.web.cern.ch # ################################################################################ """Unit test library for the export_FKS format routines""" import StringIO import copy import fractions import os import sys import tempfile import glob import shutil root_path = os.path.split(os.path.dirname(os.path.realpath( __file__ )))[0] sys.path.append(os.path.join(root_path, os.path.pardir, os.path.pardir)) import tests.unit_tests as unittest import madgraph.various.misc as misc import madgraph.iolibs.files as files import tests.IOTests as IOTests import madgraph.interface.master_interface as MGCmd import madgraph.fks.fks_common as fks_common _file_path = os.path.dirname(os.path.realpath(__file__)) _input_file_path = os.path.join(_file_path, os.path.pardir, os.path.pardir, 'input_files') class TestFKSOutput(unittest.TestCase): """ this class is to test that the new and old nlo generation give identical results """ def test_w_nlo_gen(self): """check that the new (memory and cpu efficient) and old generation mode at NLO give the same results for p p > w [QCD] """ path = tempfile.mkdtemp('', 'TMPWTest', None) def run_cmd(cmd): interface.exec_cmd(cmd, errorhandling=False, printcmd=False, precmd=True, postcmd=True) interface = MGCmd.MasterCmd() run_cmd('generate p p > w+ [QCD]') run_cmd('output %s' % os.path.join(path, 'W-oldway')) run_cmd('set low_mem_multicore_nlo_generation True') run_cmd('generate p p > w+ [QCD]') run_cmd('output %s' % os.path.join(path, 'W-newway')) run_cmd('set low_mem_multicore_nlo_generation False') # the P0 dirs for oldf in \ (glob.glob(os.path.join(path, 'W-oldway', 'SubProcesses', 'P0*', '*.inc')) + \ glob.glob(os.path.join(path, 'W-oldway', 'SubProcesses', 'P0*', '*.f')) + \ [os.path.join(path, 'W-oldway', 'SubProcesses', 'proc_characteristics')]): if os.path.islink(oldf): continue newf = oldf.replace('oldway', 'newway') for old_l, new_l in zip(open(oldf), open(newf)): self.assertEqual(old_l, new_l) # the V0 dirs for oldf in \ (glob.glob(os.path.join(path, 'W-oldway', 'SubProcesses', 'P0*', 'V0*', '*.inc')) + \ glob.glob(os.path.join(path, 'W-oldway', 'SubProcesses', 'P0*', 'V0*', '*.f'))): if os.path.islink(oldf): continue newf = oldf.replace('oldway', 'newway') for old_l, new_l in zip(open(oldf), open(newf)): self.assertEqual(old_l, new_l) def test_w_nlo_gen_gosam(self): """check that the new generation mode works when gosam is set for p p > w [QCD] """ path = tempfile.mkdtemp('', 'TMPWTest', None) def run_cmd(cmd): interface.exec_cmd(cmd, errorhandling=False, printcmd=False, precmd=True, postcmd=True) interface = MGCmd.MasterCmd() try: run_cmd('set low_mem_multicore_nlo_generation True') run_cmd('set OLP GoSam') run_cmd('generate p p > w+ [QCD]') try: run_cmd('output %s' % os.path.join(path, 'W-newway')) except fks_common.FKSProcessError, err: # catch the error if gosam is not there if not 'Generation of the virtuals with GoSam failed' in str(err): raise Exception, err except Exception as e: run_cmd('set low_mem_multicore_nlo_generation False') run_cmd('set OLP MadLoop') raise e finally: run_cmd('set low_mem_multicore_nlo_generation False') run_cmd('set OLP MadLoop') shutil.rmtree(path)