You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

182 lines
9.8 KiB

  1. from nd2reader.parser import Nd2Parser
  2. import unittest
  3. class MockNd2Parser(object):
  4. def __init__(self, channels, fields_of_view, z_levels):
  5. self.channels = channels
  6. self.fields_of_view = fields_of_view
  7. self.z_levels = z_levels
  8. class TestNd2Parser(unittest.TestCase):
  9. def test_calculate_field_of_view_simple(self):
  10. """ With a single field of view, the field of view should always be the same number (0). """
  11. nd2 = MockNd2Parser([''], [0], [0])
  12. for frame_number in range(1000):
  13. result = Nd2Parser._calculate_field_of_view(nd2, frame_number)
  14. self.assertEqual(result, 0)
  15. def test_calculate_field_of_view_two_channels(self):
  16. nd2 = MockNd2Parser(['', 'GFP'], [0], [0])
  17. for frame_number in range(1000):
  18. result = Nd2Parser._calculate_field_of_view(nd2, frame_number)
  19. self.assertEqual(result, 0)
  20. def test_calculate_field_of_view_three_channels(self):
  21. nd2 = MockNd2Parser(['', 'GFP', 'dsRed'], [0], [0])
  22. for frame_number in range(1000):
  23. result = Nd2Parser._calculate_field_of_view(nd2, frame_number)
  24. self.assertEqual(result, 0)
  25. def test_calculate_field_of_view_two_fovs(self):
  26. nd2 = MockNd2Parser([''], [0, 1], [0])
  27. for frame_number in range(1000):
  28. result = Nd2Parser._calculate_field_of_view(nd2, frame_number)
  29. self.assertEqual(result, frame_number % 2)
  30. def test_calculate_field_of_view_two_fovs_two_zlevels(self):
  31. nd2 = MockNd2Parser([''], [0, 1], [0, 1])
  32. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 0), 0)
  33. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 1), 0)
  34. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 2), 1)
  35. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 3), 1)
  36. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 4), 0)
  37. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 5), 0)
  38. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 6), 1)
  39. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 7), 1)
  40. def test_calculate_field_of_view_two_everything(self):
  41. nd2 = MockNd2Parser(['', 'GFP'], [0, 1], [0, 1])
  42. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 0), 0)
  43. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 1), 0)
  44. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 2), 0)
  45. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 3), 0)
  46. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 4), 1)
  47. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 5), 1)
  48. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 6), 1)
  49. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, 7), 1)
  50. def test_calculate_field_of_view_7c2f2z(self):
  51. nd2 = MockNd2Parser(['', 'GFP', 'dsRed', 'dTomato', 'lulzBlue', 'jimbotronPurple', 'orange'], [0, 1], [0, 1])
  52. for i in range(14):
  53. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, i), 0)
  54. for i in range(14, 28):
  55. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, i), 1)
  56. for i in range(28, 42):
  57. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, i), 0)
  58. for i in range(42, 56):
  59. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, i), 1)
  60. for i in range(56, 70):
  61. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, i), 0)
  62. for i in range(70, 84):
  63. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, i), 1)
  64. def test_calculate_field_of_view_2c3f5z(self):
  65. """ All prime numbers to elucidate any errors that won't show up when numbers are multiples of each other """
  66. nd2 = MockNd2Parser(['', 'GFP'], [0, 1, 2], [0, 1, 2, 3, 4])
  67. for i in range(10):
  68. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, i), 0)
  69. for i in range(10, 20):
  70. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, i), 1)
  71. for i in range(20, 30):
  72. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, i), 2)
  73. for i in range(30, 40):
  74. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, i), 0)
  75. for i in range(40, 50):
  76. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, i), 1)
  77. for i in range(50, 60):
  78. self.assertEqual(Nd2Parser._calculate_field_of_view(nd2, i), 2)
  79. def test_calculate_channel_simple(self):
  80. nd2 = MockNd2Parser(['GFP'], [0], [0])
  81. for i in range(1000):
  82. self.assertEqual(Nd2Parser._calculate_channel(nd2, i), 'GFP')
  83. def test_calculate_channel(self):
  84. nd2 = MockNd2Parser(['', 'GFP', 'dsRed', 'dTomato', 'lulzBlue', 'jimbotronPurple', 'orange'], [0], [0])
  85. for i in range(1000):
  86. for n, channel in enumerate(['', 'GFP', 'dsRed', 'dTomato', 'lulzBlue', 'jimbotronPurple', 'orange'], start=i*7):
  87. self.assertEqual(Nd2Parser._calculate_channel(nd2, n), channel)
  88. def test_calculate_channel_7c2fov1z(self):
  89. nd2 = MockNd2Parser(['', 'GFP', 'dsRed', 'dTomato', 'lulzBlue', 'jimbotronPurple', 'orange'], [0, 1], [0])
  90. for i in range(1000):
  91. for n, channel in enumerate(['', 'GFP', 'dsRed', 'dTomato', 'lulzBlue', 'jimbotronPurple', 'orange'], start=i*7):
  92. self.assertEqual(Nd2Parser._calculate_channel(nd2, n), channel)
  93. def test_calculate_channel_ludicrous_values(self):
  94. nd2 = MockNd2Parser(['', 'GFP', 'dsRed', 'dTomato', 'lulzBlue', 'jimbotronPurple', 'orange'], list(range(31)), list(range(17)))
  95. for i in range(10000):
  96. for n, channel in enumerate(['', 'GFP', 'dsRed', 'dTomato', 'lulzBlue', 'jimbotronPurple', 'orange'], start=i*7):
  97. self.assertEqual(Nd2Parser._calculate_channel(nd2, n), channel)
  98. def test_calculate_z_level(self):
  99. nd2 = MockNd2Parser([''], [0], [0])
  100. for frame_number in range(1000):
  101. result = Nd2Parser._calculate_z_level(nd2, frame_number)
  102. self.assertEqual(result, 0)
  103. def test_calculate_z_level_1c1f2z(self):
  104. nd2 = MockNd2Parser([''], [0], [0, 1])
  105. for frame_number in range(1000):
  106. result = Nd2Parser._calculate_z_level(nd2, frame_number)
  107. self.assertEqual(result, frame_number % 2)
  108. def test_calculate_z_level_31c17f1z(self):
  109. nd2 = MockNd2Parser(list(range(31)), list(range(17)), [0])
  110. for frame_number in range(1000):
  111. result = Nd2Parser._calculate_z_level(nd2, frame_number)
  112. self.assertEqual(result, 0)
  113. def test_calculate_z_level_2c1f2z(self):
  114. nd2 = MockNd2Parser(['', 'GFP'], [0], [0, 1])
  115. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 0), 0)
  116. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 1), 0)
  117. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 2), 1)
  118. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 3), 1)
  119. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 4), 0)
  120. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 5), 0)
  121. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 6), 1)
  122. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 7), 1)
  123. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 8), 0)
  124. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 9), 0)
  125. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 10), 1)
  126. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 11), 1)
  127. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 12), 0)
  128. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 13), 0)
  129. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 14), 1)
  130. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 15), 1)
  131. def test_calculate_z_level_2c3f5z(self):
  132. nd2 = MockNd2Parser(['', 'GFP'], [0, 1, 2], [0, 1, 2, 3, 4])
  133. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 0), 0)
  134. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 1), 0)
  135. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 2), 1)
  136. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 3), 1)
  137. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 4), 2)
  138. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 5), 2)
  139. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 6), 3)
  140. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 7), 3)
  141. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 8), 4)
  142. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 9), 4)
  143. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 10), 0)
  144. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 11), 0)
  145. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 12), 1)
  146. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 13), 1)
  147. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 14), 2)
  148. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 15), 2)
  149. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 16), 3)
  150. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 17), 3)
  151. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 18), 4)
  152. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 19), 4)
  153. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 20), 0)
  154. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 21), 0)
  155. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 22), 1)
  156. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 23), 1)
  157. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 24), 2)
  158. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 25), 2)
  159. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 26), 3)
  160. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 27), 3)
  161. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 28), 4)
  162. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 29), 4)
  163. self.assertEqual(Nd2Parser._calculate_z_level(nd2, 30), 0)