tests.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import os
  2. import shutil
  3. import tempfile
  4. try:
  5. import unittest2 as unittest
  6. except ImportError:
  7. import unittest
  8. import numpy as np
  9. from gi.repository import Ufo
  10. from libtiff import TIFF
  11. def data_path(suffix=''):
  12. return os.path.join(os.path.abspath('./data'), suffix)
  13. class BasicTests(unittest.TestCase):
  14. def setUp(self):
  15. config = Ufo.Config(paths=['../build/src', '../build_dir/src'])
  16. self.pm = Ufo.PluginManager(config=config)
  17. self.graph = Ufo.TaskGraph()
  18. self.sched = Ufo.Scheduler(config=config)
  19. self.tmpdir = tempfile.mkdtemp()
  20. def tearDown(self):
  21. shutil.rmtree(self.tmpdir)
  22. def tmp_path(self, suffix=''):
  23. return os.path.join(self.tmpdir, suffix)
  24. def get_task(self, name, **kwargs):
  25. plugin = self.pm.get_task(name)
  26. plugin.set_properties(**kwargs)
  27. return plugin
  28. def test_ramp(self):
  29. outname = self.tmp_path('rmp-%05i.tif')
  30. ramp = self.pm.get_task('lamino-ramp')
  31. writer = self.pm.get_task('writer')
  32. ramp.set_properties(width=4096, fwidth=1458, height=2048,
  33. theta=1.0921048, tau=0.3)
  34. writer.set_properties(filename=outname)
  35. self.graph.connect_nodes(ramp, writer)
  36. self.sched.run(self.graph)
  37. files = os.listdir(self.tmpdir)
  38. self.assertIn('rmp-00000.tif', files)
  39. self.assertEqual(len(files), 1)
  40. def test_bug_lamino_reco(self):
  41. reader = self.get_task('reader', path=data_path('bug/projections/*.tif'))
  42. writer = self.get_task('null')
  43. reco = self.get_task('lamino-bp')
  44. padding = self.get_task('padding-2d')
  45. fft_input = self.get_task('fft', dimensions=2)
  46. ramp = self.get_task('lamino-ramp')
  47. fft_ramp = self.get_task('fft', dimensions=2)
  48. conv = self.get_task('lamino-conv')
  49. ifft = self.get_task('ifft', dimensions=2)
  50. THETA = -1.570796326
  51. reco.set_properties(theta=THETA, psi=0, angle_step=0.01256637,
  52. vol_sx=832, vol_sy=832, vol_sz=400,
  53. vol_ox=416, vol_oy=416, vol_oz=200,
  54. proj_ox=592, proj_oy=205)
  55. ramp.set_properties(width=4096, fwidth=1186, height=512,
  56. theta=THETA, tau=1)
  57. self.graph.connect_nodes(reader, padding)
  58. self.graph.connect_nodes(padding, fft_input)
  59. self.graph.connect_nodes(ramp, fft_ramp)
  60. self.graph.connect_nodes_full(fft_ramp, conv, 0)
  61. self.graph.connect_nodes_full(fft_input, conv, 1)
  62. self.graph.connect_nodes(conv, ifft)
  63. self.graph.connect_nodes(ifft, reco)
  64. self.graph.connect_nodes(reco, writer)
  65. self.sched.run(self.graph)
  66. def test_3d_edf(self):
  67. reader = self.get_task('reader', path=data_path('bug/projections'), count=1)
  68. writer = self.get_task('edf-3d-writer', filename=self.tmp_path('vol-%05i.edf'))
  69. reco = self.get_task('lamino-bp')
  70. vx, vy, vz = 256, 256, 128
  71. reco.set_properties(vol_sx=vx, vol_sy=vy, vol_sz=vz,
  72. vol_ox=0, vol_oy=0, vol_oz=0,
  73. proj_ox=592, proj_oy=205)
  74. self.graph.connect_nodes(reader, reco)
  75. self.graph.connect_nodes(reco, writer)
  76. self.sched.run(self.graph)
  77. files = os.listdir(self.tmpdir)
  78. self.assertIn('vol-00000.edf', files)
  79. self.assertEqual(len(files), 1)
  80. filesize = os.path.getsize(self.tmp_path('vol-00000.edf'))
  81. expected = vx * vy * vz * 4 + 512 # floats + header
  82. self.assertEqual(filesize, expected)