Browse Source

Test the LabelMap

feature/load_slices
Ruben Verweij 8 years ago
parent
commit
19c5db83af
3 changed files with 128 additions and 6 deletions
  1. +47
    -0
      nd2reader/artificial.py
  2. +6
    -6
      nd2reader/label_map.py
  3. +75
    -0
      tests/test_label_map.py

+ 47
- 0
nd2reader/artificial.py View File

@ -2,6 +2,8 @@
Functions to create artificial nd2 data for testing purposes Functions to create artificial nd2 data for testing purposes
""" """
import six import six
import numpy as np
import struct
class ArtificialND2(object): class ArtificialND2(object):
@ -45,3 +47,48 @@ class ArtificialND2(object):
# write version info # write version info
version_info = six.b('ND2 FILE SIGNATURE CHUNK NAME01!Ver3.0') version_info = six.b('ND2 FILE SIGNATURE CHUNK NAME01!Ver3.0')
self._fh.write(version_info) self._fh.write(version_info)
@staticmethod
def create_label_map_bytes():
"""
Construct a binary label map
Returns:
tuple: (binary data, dictionary data)
"""
raw_text = six.b('')
labels = {
'image_attributes': "ImageAttributesLV!",
'image_text_info': "ImageTextInfoLV!",
'image_metadata': "ImageMetadataLV!",
'image_metadata_sequence': "ImageMetadataSeqLV|0!",
'image_calibration': "ImageCalibrationLV|0!",
'x_data': "CustomData|X!",
'y_data': "CustomData|Y!",
'z_data': "CustomData|Z!",
'roi_metadata': "CustomData|RoiMetadata_v1!",
'pfs_status': "CustomData|PFS_STATUS!",
'pfs_offset': "CustomData|PFS_OFFSET!",
'guid': "CustomData|GUIDStore!",
'description': "CustomData|CustomDescriptionV1_0!",
'camera_exposure_time': "CustomData|Camera_ExposureTime1!",
'camera_temp': "CustomData|CameraTemp1!",
'acquisition_times': "CustomData|AcqTimesCache!",
'acquisition_times_2': "CustomData|AcqTimes2Cache!",
'acquisition_frames': "CustomData|AcqFramesCache!",
'lut_data': "CustomDataVar|LUTDataV1_0!",
'grabber_settings': "CustomDataVar|GrabberCameraSettingsV1_0!",
'custom_data': "CustomDataVar|CustomDataV2_0!",
'app_info': "CustomDataVar|AppInfo_V1_0!"
}
data = {}
# generate random positions and lengths
lengths = np.random.random_integers(1, 999, len(labels))
positions = np.subtract(np.cumsum(lengths), lengths[0])
for length, pos, label in zip(lengths, positions, labels):
raw_text += six.b(labels[label])
raw_text += struct.pack('QQ', pos, length)
data[label] = (pos, length)
return raw_text, data

+ 6
- 6
nd2reader/label_map.py View File

@ -100,30 +100,30 @@ class LabelMap(object):
@property @property
def x_data(self): def x_data(self):
"""Get the location of the x data
"""Get the location of the custom x data
Returns: Returns:
int: The location of the x data
int: The location of the custom x data
""" """
return self._get_location(six.b("CustomData|X!")) return self._get_location(six.b("CustomData|X!"))
@property @property
def y_data(self): def y_data(self):
"""Get the location of the y data
"""Get the location of the custom y data
Returns: Returns:
int: The location of the y data
int: The location of the custom y data
""" """
return self._get_location(six.b("CustomData|Y!")) return self._get_location(six.b("CustomData|Y!"))
@property @property
def z_data(self): def z_data(self):
"""Get the location of the z data
"""Get the location of the custom z data
Returns: Returns:
int: The location of the z data
int: The location of the custom z data
""" """
return self._get_location(six.b("CustomData|Z!")) return self._get_location(six.b("CustomData|Z!"))


+ 75
- 0
tests/test_label_map.py View File

@ -0,0 +1,75 @@
import unittest
from nd2reader.label_map import LabelMap
from nd2reader.artificial import ArtificialND2
class TestLabelMap(unittest.TestCase):
def setUp(self):
self.raw_text, self.locations = ArtificialND2.create_label_map_bytes()
self.label_map = LabelMap(self.raw_text)
def test_image_text_info(self):
self.assertEqual(self.locations['image_text_info'][0], self.label_map.image_text_info)
def test_image_metadata(self):
self.assertEqual(self.locations['image_metadata'][0], self.label_map.image_metadata)
def test_image_attributes(self):
self.assertEqual(self.locations['image_attributes'][0], self.label_map.image_attributes)
def test_image_metadata_sequence(self):
self.assertEqual(self.locations['image_metadata_sequence'][0], self.label_map.image_metadata_sequence)
def test_image_calibration(self):
self.assertEqual(self.locations['image_calibration'][0], self.label_map.image_calibration)
def test_x_data(self):
self.assertEqual(self.locations['x_data'][0], self.label_map.x_data)
def test_y_data(self):
self.assertEqual(self.locations['y_data'][0], self.label_map.y_data)
def test_z_data(self):
self.assertEqual(self.locations['z_data'][0], self.label_map.z_data)
def test_roi_metadata(self):
self.assertEqual(self.locations['roi_metadata'][0], self.label_map.roi_metadata)
def test_pfs_status(self):
self.assertEqual(self.locations['pfs_status'][0], self.label_map.pfs_status)
def test_pfs_offset(self):
self.assertEqual(self.locations['pfs_offset'][0], self.label_map.pfs_offset)
def test_guid(self):
self.assertEqual(self.locations['guid'][0], self.label_map.guid)
def test_description(self):
self.assertEqual(self.locations['description'][0], self.label_map.description)
def test_camera_exposure_time(self):
self.assertEqual(self.locations['camera_exposure_time'][0], self.label_map.camera_exposure_time)
def test_camera_temp(self):
self.assertEqual(self.locations['camera_temp'][0], self.label_map.camera_temp)
def test_acquisition_times(self):
self.assertEqual(self.locations['acquisition_times'][0], self.label_map.acquisition_times)
def test_acquisition_times_2(self):
self.assertEqual(self.locations['acquisition_times_2'][0], self.label_map.acquisition_times_2)
def test_acquisition_frames(self):
self.assertEqual(self.locations['acquisition_frames'][0], self.label_map.acquisition_frames)
def test_lut_data(self):
self.assertEqual(self.locations['lut_data'][0], self.label_map.lut_data)
def test_grabber_settings(self):
self.assertEqual(self.locations['grabber_settings'][0], self.label_map.grabber_settings)
def test_custom_data(self):
self.assertEqual(self.locations['custom_data'][0], self.label_map.custom_data)
def test_app_info(self):
self.assertEqual(self.locations['app_info'][0], self.label_map.app_info)

Loading…
Cancel
Save