Source code for test.test_hepmc2dot

import hepmc2dot

import unittest
import tempfile

import os
import shutil
from math import sqrt


# use global definition of expected particle and vertex DOT strings for test maintainability
vtx_200334 = '    V_200334 [label="vtx #-200334\\nr=1027.68,z=1423.66",pos="1423.657,1027.677!"];\n'
vtx_200648 = '    V_200648 [label="vtx #-200648\\nr=1091.08,z=-1881.66",pos="-1881.663,1091.080!"];\n'
vtx_dummy_200386 = '    V_dummy_200386 [shape=none,label="",pos="-1943.048,1281.427!"];\n'
vtx_dummy_200389 = '    V_dummy_200389 [shape=none,label="",pos="-1740.250,1232.510!"];\n'
vtx_dummy_200391 = '    V_dummy_200391 [shape=none,label="",pos="-1913.914,1288.463!"];\n'
vtx_dummy_200394 = '    V_dummy_200394 [shape=none,label="",pos="1548.247,1184.129!"];\n'
p_200388 = '    V_200648 -> V_200334 [label="p #200388\\nid=211\\nE=356"];\n'
p_200391 = '    V_200648 -> V_dummy_200391 [label="p #200391\\nid=2212\\nE=1042"];\n'
p_200386 = '    V_200648 -> V_dummy_200386 [label="p #200386\\nid=2112\\nE=1087"];\n'
p_200389 = '    V_200648 -> V_dummy_200389 [label="p #200389\\nid=-211\\nE=1077"];\n'
p_200394 = '    V_200334 -> V_dummy_200394 [label="p #200394\\nid=2112\\nE=1017"];\n'


[docs]class Test_get_dot_particle(unittest.TestCase):
[docs] def test_floatEnergy_expectEnergyRounding(self): actual_dot_particle = hepmc2dot._get_dot_particle(prod_vtx_barcode=123, end_vtx_barcode=987, particle_barcode=666, particle_id=-111, particle_energy=999.9) expected_dot_particle = ' V_123 -> V_987 [label="p #666\\nid=-111\\nE=1000"];\n' self.assertEqual(expected_dot_particle, actual_dot_particle)
[docs] def test_finalStateParticle_expectDummyEndVertex(self): actual_dot_particle = hepmc2dot._get_dot_particle(prod_vtx_barcode=123, end_vtx_barcode=None, particle_barcode=666, particle_id=-111, particle_energy=888) expected_dot_particle = ' V_123 -> V_dummy_666 [label="p #666\\nid=-111\\nE=888"];\n' self.assertEqual(expected_dot_particle, actual_dot_particle)
[docs] def test_stringArguments_expectAutomaticConversion(self): actual_dot_particle = hepmc2dot._get_dot_particle(prod_vtx_barcode='123', end_vtx_barcode='987', particle_barcode='666', particle_id='-111', particle_energy='888') expected_dot_particle = ' V_123 -> V_987 [label="p #666\\nid=-111\\nE=888"];\n' self.assertEqual(expected_dot_particle, actual_dot_particle)
[docs]class Test_get_node_name(unittest.TestCase):
[docs] def test_positiveBarcode_expectPositiveNumInNodeName(self): actual_node_name = hepmc2dot._get_node_name(barcode=123) expected_node_name = 'V_123' self.assertEqual(actual_node_name, expected_node_name)
[docs] def test_negativeBarcode_expectPositiveNumInNodeName(self): actual_node_name = hepmc2dot._get_node_name(barcode=-123) expected_node_name = 'V_123' self.assertEqual(actual_node_name, expected_node_name)
[docs] def test_dummyVertex_expectDummyNodeName(self): actual_node_name = hepmc2dot._get_node_name(barcode=-123, is_dummy=True) expected_node_name = 'V_dummy_123' self.assertEqual(actual_node_name, expected_node_name)
[docs] def test_strArguments_expectAutomaticConversion(self): actual_node_name = hepmc2dot._get_node_name(barcode='-123', is_dummy=True) expected_node_name = 'V_dummy_123' self.assertEqual(actual_node_name, expected_node_name)
[docs]class Test_get_dot_vertex(unittest.TestCase):
[docs] def assert_get_vertex(self, expected_dot, *args, **kwargs): actual_dot = hepmc2dot._get_dot_vertex(*args, **kwargs) self.assertEqual(expected_dot, actual_dot)
[docs] def test_nagativeVertexID_expectPositiveDotVertexNameAndNegativeIDInLabel(self): vtx_id = -1 vtx_r = 2 vtx_z = 3 expected_dot = ' V_1 [label="vtx #-1\\nr=2.00,z=3.00",pos="3.000,2.000!"];\n' self.assert_get_vertex(expected_dot, vtx_id, vtx_r, vtx_z)
[docs] def test_positiveVertexID_expectPositiveDotVertexNameAndPositiveIDInLabel(self): vtx_id = 1 vtx_r = 2 vtx_z = 3 expected_dot = ' V_1 [label="vtx #1\\nr=2.00,z=3.00",pos="3.000,2.000!"];\n' self.assert_get_vertex(expected_dot, vtx_id, vtx_r, vtx_z)
[docs] def test_dummyVertex_expectDummyVertexNameAndEmptyLabel(self): vtx_id = 1 vtx_r = 2 vtx_z = 3 is_dummy = True expected_dot = ' V_dummy_1 [shape=none,label="",pos="3.000,2.000!"];\n' self.assert_get_vertex(expected_dot, vtx_id, vtx_r, vtx_z, is_dummy)
[docs] def test_dummyVertexNegativeID_expectDummyVertexNameAndEmptyLabel(self): vtx_id = -1 vtx_r = 2 vtx_z = 3 is_dummy = True expected_dot = ' V_dummy_1 [shape=none,label="",pos="3.000,2.000!"];\n' self.assert_get_vertex(expected_dot, vtx_id, vtx_r, vtx_z, is_dummy)
[docs] def test_longFloatingPointRZ_expectRoundedRZ(self): vtx_id = -1 vtx_r = 2.3456789 vtx_z = 3.4567890 expected_dot = ' V_1 [label="vtx #-1\\nr=2.35,z=3.46",pos="3.457,2.346!"];\n' self.assert_get_vertex(expected_dot, vtx_id, vtx_r, vtx_z)
[docs] def test_strVtxArguments_expectAutomaticConversion(self): vtx_id = '-1' vtx_r = '2.3456789' vtx_z = '3.4567890' expected_dot = ' V_1 [label="vtx #-1\\nr=2.35,z=3.46",pos="3.457,2.346!"];\n' self.assert_get_vertex(expected_dot, vtx_id, vtx_r, vtx_z)
[docs] def test_scaleProvided_expectScaledPosition(self): vtx_id = -1 vtx_r = 2 vtx_z = 3 scale = 4 expected_dot = ' V_1 [label="vtx #-1\\nr=2.00,z=3.00",pos="12.000,8.000!"];\n' self.assert_get_vertex(expected_dot, vtx_id, vtx_r, vtx_z, scale=scale)
[docs] def test_scaledDummy_expectScaledPosition(self): vtx_id = -1 vtx_r = 2 vtx_z = 3 is_dummy = True scale = 4 expected_dot = ' V_dummy_1 [shape=none,label="",pos="12.000,8.000!"];\n' self.assert_get_vertex(expected_dot, vtx_id, vtx_r, vtx_z, is_dummy=is_dummy, scale=scale)
[docs]class Test_convert(unittest.TestCase):
[docs] def setUp(self): self.hepmc_file = tempfile.NamedTemporaryFile(delete=False, mode='w') self.dot_file = tempfile.NamedTemporaryFile(delete=False, mode='r') self.dot_file.close()
[docs] def tearDown(self): self.hepmc_file.close() os.remove(self.hepmc_file.name) self.dot_file.close() os.remove(self.dot_file.name)
[docs] def test_emptyHepMCFile_expectEmptyDotFile(self): self.hepmc_file.close() hepmc2dot.convert(self.hepmc_file.name, self.dot_file.name) with open(self.dot_file.name, 'r') as result_file: expected_dot_contents = "" actual_dot_contents = result_file.read() self.assertEqual(expected_dot_contents, actual_dot_contents)
[docs] def test_unknownDataInHepMCFile_expectEmptyDotFile(self): self.hepmc_file.write("X this should be ignored\n") self.hepmc_file.write(" this should be ignored too\n") self.hepmc_file.write("Y and that as well\n") self.hepmc_file.close() hepmc2dot.convert(self.hepmc_file.name, self.dot_file.name) with open(self.dot_file.name, 'r') as result_file: actual_dot_contents = result_file.read() expected_dot_contents = "" self.assertEqual(expected_dot_contents, actual_dot_contents)
[docs] def test_oneEmptyHepMCEvent_expectOneEmptyDotDigraph(self): self.hepmc_file.write("E 29 -1 -1.00000000e+00 -1.00000000e+00 -1.00000000e+00 1111230000 -243 534 1 2 0 3\n") self.hepmc_file.close() hepmc2dot.convert(self.hepmc_file.name, self.dot_file.name) with open(self.dot_file.name, 'r') as result_file: actual_dot_contents = result_file.read() expected_dot_contents = "digraph event_29 {\n" \ "}\n" self.assertEqual(expected_dot_contents, actual_dot_contents)
[docs] def test_unknownDataAndOneEmptyEventInHepMCFile_expectOneEmptyDotDigraph(self): self.hepmc_file.write("X this should be ignored\n") self.hepmc_file.write(" this should be ignored too\n") self.hepmc_file.write("E 29 -1 -1.00000000e+00 -1.00000000e+00 -1.00000000e+00 1111230000 -243 534 1 2 0 3\n") self.hepmc_file.write("Y and please ignore this too\n") self.hepmc_file.close() hepmc2dot.convert(self.hepmc_file.name, self.dot_file.name) with open(self.dot_file.name, 'r') as result_file: actual_dot_contents = result_file.read() expected_dot_contents = "digraph event_29 {\n" \ "}\n" self.assertEqual(expected_dot_contents, actual_dot_contents)
[docs] def test_eventWithOneHepMCVertex_expectOneEventWithOneVertexInDot(self): self.hepmc_file.write("E 29 -1 -1.00000000e+00 -1.00000000e+00 -1.00000000e+00 1111230000 -243 534 1 2 0 3\n") self.hepmc_file.write("V -200648 1121 9.51900940e+02 -5.33236511e+02 -1.88166296e+03 2.88058228e+03 0 1 1 2.00877000e+05\n") self.hepmc_file.close() hepmc2dot.convert(self.hepmc_file.name, self.dot_file.name) with open(self.dot_file.name, 'r') as result_file: actual_dot_contents = result_file.read() expected_dot_contents = 'digraph event_29 {\n' \ + vtx_200648 + \ '}\n' self.assertEqual(expected_dot_contents, actual_dot_contents)
[docs] def test_oneVertexWithOutgoingParticleWithoutEndVertex_expectSameRepresentationInDot(self): self.hepmc_file.write("E 29 -1 -1.00000000e+00 -1.00000000e+00 -1.00000000e+00 1111230000 -243 534 1 2 0 3\n") self.hepmc_file.write("V -200648 1121 9.51900940e+02 -5.33236511e+02 -1.88166296e+03 2.88058228e+03 0 1 1 2.00877000e+05\n") self.hepmc_file.write("P 200386 2112 -2.51403702e+02 4.56170502e+02 -1.67972778e+02 1.08733311e+03 9.39565369e+02 1 0 0 0 0\n") self.hepmc_file.close() hepmc2dot.convert(self.hepmc_file.name, self.dot_file.name) with open(self.dot_file.name, 'r') as result_file: actual_dot_contents = result_file.read() expected_dot_contents = 'digraph event_29 {\n' \ + vtx_200648 \ + vtx_dummy_200386 \ + p_200386 \ + '}\n' self.assertEqual(expected_dot_contents, actual_dot_contents)
[docs] def test_oneVertexTwoOutgoingParticlesWithoutEndVertices_expectSameRepresentationInDot(self): self.hepmc_file.write("E 29 -1 -1.00000000e+00 -1.00000000e+00 -1.00000000e+00 1111230000 -243 534 1 2 0 3\n") self.hepmc_file.write("V -200648 1121 9.51900940e+02 -5.33236511e+02 -1.88166296e+03 2.88058228e+03 0 1 1 2.00877000e+05\n") self.hepmc_file.write("P 200386 2112 -2.51403702e+02 4.56170502e+02 -1.67972778e+02 1.08733311e+03 9.39565369e+02 1 0 0 0 0\n") self.hepmc_file.write("P 200391 2212 -3.58282349e+02 -2.69635498e+02 -7.32659836e+01 1.04249310e+03 9.38272034e+02 1 0 0 0 0\n") self.hepmc_file.close() hepmc2dot.convert(self.hepmc_file.name, self.dot_file.name) with open(self.dot_file.name, 'r') as result_file: actual_dot_contents = result_file.read() expected_dot_contents = 'digraph event_29 {\n' \ + vtx_200648 \ + vtx_dummy_200386 \ + p_200386 \ + vtx_dummy_200391 \ + p_200391 \ + '}\n' self.assertEqual(expected_dot_contents, actual_dot_contents)
[docs] def test_eventTwoVerticesWithOneConnectingParticle_expectSameRepresentationInDot(self): self.hepmc_file.write("E 29 -1 -1.00000000e+00 -1.00000000e+00 -1.00000000e+00 1111230000 -243 534 1 2 0 3\n") self.hepmc_file.write("V -200648 1121 9.51900940e+02 -5.33236511e+02 -1.88166296e+03 2.88058228e+03 0 1 1 2.00877000e+05\n") self.hepmc_file.write("P 200388 211 -2.08521011e+02 2.27627213e+02 1.08288109e+02 3.55670194e+02 1.39570099e+02 1 0 0 -200334 0\n") self.hepmc_file.write("V -200334 1121 -7.28379395e+02 7.24970886e+02 1.42365698e+03 2.04311096e+03 0 2 1 2.00388000e+05\n") self.hepmc_file.close() hepmc2dot.convert(self.hepmc_file.name, self.dot_file.name) with open(self.dot_file.name, 'r') as result_file: actual_dot_contents = result_file.read() expected_dot_contents = 'digraph event_29 {\n' \ + vtx_200648 \ + p_200388 \ + vtx_200334 \ + '}\n' self.assertEqual(expected_dot_contents, actual_dot_contents)
[docs] def test_eventTwoVerticesWithOneConnectingParticleAndOneParticleWithoutEndVertex_expectSameRepresentationInDot(self): self.hepmc_file.write("E 29 -1 -1.00000000e+00 -1.00000000e+00 -1.00000000e+00 1111230000 -243 534 1 2 0 3\n") self.hepmc_file.write("V -200648 1121 9.51900940e+02 -5.33236511e+02 -1.88166296e+03 2.88058228e+03 0 1 1 2.00877000e+05\n") self.hepmc_file.write("P 200388 211 -2.08521011e+02 2.27627213e+02 1.08288109e+02 3.55670194e+02 1.39570099e+02 1 0 0 -200334 0\n") self.hepmc_file.write("P 200389 -211 -5.99197632e+02 -4.59768372e+02 7.55172729e+02 1.07712136e+03 1.39570099e+02 1 0 0 0 0\n") self.hepmc_file.write("V -200334 1121 -7.28379395e+02 7.24970886e+02 1.42365698e+03 2.04311096e+03 0 2 1 2.00388000e+05\n") self.hepmc_file.close() hepmc2dot.convert(self.hepmc_file.name, self.dot_file.name) with open(self.dot_file.name, 'r') as result_file: actual_dot_contents = result_file.read() expected_dot_contents = 'digraph event_29 {\n' \ + vtx_200648 \ + p_200388 \ + vtx_dummy_200389 \ + p_200389 \ + vtx_200334 \ + '}\n' self.assertEqual(expected_dot_contents, actual_dot_contents)
[docs] def test_eventTwoVerticesWithOneConnectingParticleAndTwoParticlesWithoutEndVertices_expectSameRepresentationInDot(self): self.hepmc_file.write("E 29 -1 -1.00000000e+00 -1.00000000e+00 -1.00000000e+00 1111230000 -243 534 1 2 0 3\n") self.hepmc_file.write("V -200648 1121 9.51900940e+02 -5.33236511e+02 -1.88166296e+03 2.88058228e+03 0 1 1 2.00877000e+05\n") self.hepmc_file.write("P 200388 211 -2.08521011e+02 2.27627213e+02 1.08288109e+02 3.55670194e+02 1.39570099e+02 1 0 0 -200334 0\n") self.hepmc_file.write("P 200389 -211 -5.99197632e+02 -4.59768372e+02 7.55172729e+02 1.07712136e+03 1.39570099e+02 1 0 0 0 0\n") self.hepmc_file.write("V -200334 1121 -7.28379395e+02 7.24970886e+02 1.42365698e+03 2.04311096e+03 0 2 1 2.00388000e+05\n") self.hepmc_file.write("P 200394 2112 -1.85434677e+02 -2.42430649e+02 2.43059982e+02 1.01735927e+03 9.39565369e+02 1 0 0 0 0\n") self.hepmc_file.close() hepmc2dot.convert(self.hepmc_file.name, self.dot_file.name) with open(self.dot_file.name, 'r') as result_file: actual_dot_contents = result_file.read() expected_dot_contents = 'digraph event_29 {\n' \ + vtx_200648 \ + p_200388 \ + vtx_dummy_200389 \ + p_200389 \ + vtx_200334 \ + vtx_dummy_200394 \ + p_200394 \ + '}\n' self.assertEqual(expected_dot_contents, actual_dot_contents)
[docs]class Test_main_withoutTemporaryFilesFixture(unittest.TestCase):
[docs] def test_noArgumentsProvided_expectSystemExit(self): command_line_arguments = [] self.assertRaises(SystemExit, hepmc2dot.main, command_line_arguments)
[docs] def test_onlyOneArgumentProvided_expectSystemExit(self): command_line_arguments = ['test-inputfile'] self.assertRaises(SystemExit, hepmc2dot.main, command_line_arguments)
[docs]class Test_main_withTemporaryFilesFixture(unittest.TestCase):
[docs] def setUp(self): self.rundir = tempfile.mkdtemp() os.chdir(self.rundir)
[docs] def tearDown(self): os.chdir(tempfile.gettempdir()) # chdir out of rundir before deleting it shutil.rmtree(self.rundir)
[docs] def test_nonExistingHepMCNorDotFiles_expectIOError(self): command_line_arguments = ['nonexistingHepMCTestFile.txt', 'nonexistingDOTTestFile.dot'] self.assertRaises(IOError, hepmc2dot.main, command_line_arguments)
[docs] def test_nonExistingHepMCFile_expectIOError(self): command_line_arguments = ['nonexistingHepMCTestFile.txt', 'nonexistingDOTTestFile.dot'] self.assertRaises(IOError, hepmc2dot.main, command_line_arguments)
[docs] def test_emptyHepMCFile_expectEmptyDotFile(self): hepmc_file = 'hepmc.txt' dot_file = 'graph.dot' with open(hepmc_file, 'w'): pass command_line_arguments = [hepmc_file, dot_file] hepmc2dot.main(command_line_arguments) with open(dot_file, 'r') as f: actual_dot_contents = f.read() expected_dot_contents = '' self.assertEqual(expected_dot_contents, actual_dot_contents)
[docs] def test_complexHepMCFile_expectCorrespondingDotFileContents(self): hepmc_file = 'hepmc.txt' dot_file = 'graph.dot' with open(hepmc_file, 'w') as f: f.write("E 29 -1 -1.00000000e+00 -1.00000000e+00 -1.00000000e+00 1111230000 -243 534 1 2 0 3\n") f.write("V -200648 1121 9.51900940e+02 -5.33236511e+02 -1.88166296e+03 2.88058228e+03 0 1 1 2.00877000e+05\n") f.write("P 200388 211 -2.08521011e+02 2.27627213e+02 1.08288109e+02 3.55670194e+02 1.39570099e+02 1 0 0 -200334 0\n") f.write("P 200389 -211 -5.99197632e+02 -4.59768372e+02 7.55172729e+02 1.07712136e+03 1.39570099e+02 1 0 0 0 0\n") f.write("V -200334 1121 -7.28379395e+02 7.24970886e+02 1.42365698e+03 2.04311096e+03 0 2 1 2.00388000e+05\n") f.write("P 200394 2112 -1.85434677e+02 -2.42430649e+02 2.43059982e+02 1.01735927e+03 9.39565369e+02 1 0 0 0 0\n") command_line_arguments = [hepmc_file, dot_file] hepmc2dot.main(command_line_arguments) with open(dot_file, 'r') as f: actual_dot_contents = f.read() expected_dot_contents = 'digraph event_29 {\n' \ + vtx_200648 \ + p_200388 \ + vtx_dummy_200389 \ + p_200389 \ + vtx_200334 \ + vtx_dummy_200394 \ + p_200394 \ + '}\n' self.assertEqual(expected_dot_contents, actual_dot_contents)