Skip to content

Commit

Permalink
Fix bug in NikonReader when ROI is not set (#1457)
Browse files Browse the repository at this point in the history
* fix bug when ROI is None

Signed-off-by: Laura Murgatroyd <[email protected]>

* update change log

* basic unit tests

* Exception types

---------

Signed-off-by: Laura Murgatroyd <[email protected]>
Co-authored-by: gfardell <[email protected]>
  • Loading branch information
lauramurgatroyd and gfardell authored Mar 27, 2023
1 parent 01f0fee commit bc5608d
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 7 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
* 23.0.1
- Fix bug with NikonReader requiring ROI to be set in constructor.

* 23.0.0
- Partitioner is now able to create batches even if angle is not the outer dimension
- Renamed `max_iteration_stop_cryterion` method in the Algorithm class to `max_iteration_stop_criterion`
Expand Down
12 changes: 6 additions & 6 deletions Wrappers/Python/cil/io/NikonDataReader.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,22 +102,22 @@ def set_up(self,
self.fliplr = fliplr

if self.file_name is None:
raise Exception('Path to xtekct file is required.')
raise ValueError('Path to xtekct file is required.')

# check if xtekct file exists
if not(os.path.isfile(self.file_name)):
raise Exception('File\n {}\n does not exist.'.format(self.file_name))
raise FileNotFoundError('File\n {}\n does not exist.'.format(self.file_name))

if os.path.basename(self.file_name).split('.')[-1].lower() != 'xtekct':
raise TypeError('This reader can only process xtekct files. Got {}'.format(os.path.basename(self.file_name)))

if self.roi is None:
self.roi= {'angle': -1, 'horizontal': -1, 'vertical': -1}

# check labels
for key in self.roi.keys():
if key not in ['angle', 'horizontal', 'vertical']:
raise Exception("Wrong label. One of the following is expected: angle, horizontal, vertical")

if self.roi is None:
self.roi= {'angle': -1, 'horizontal': -1, 'vertical': -1}
raise ValueError("Wrong label. One of the following is expected: angle, horizontal, vertical")

roi = self.roi.copy()

Expand Down
36 changes: 35 additions & 1 deletion Wrappers/Python/test/test_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import numpy as np
import os
from cil.framework import ImageGeometry
from cil.io import TXRMDataReader, NEXUSDataReader
from cil.io import TXRMDataReader, NEXUSDataReader, NikonDataReader, ZEISSDataReader
from cil.io import TIFFWriter, TIFFStackReader
from cil.io.utilities import HDF5_utilities
from cil.processors import Slicer
Expand Down Expand Up @@ -522,3 +522,37 @@ def test_read_to(self):

HDF5_utilities.read_to(self.path, self.dset_path, data_partial, source_sel=subset, dest_sel=subset)
np.testing.assert_allclose(data_partial_by_hand,data_partial)


class TestNikonReader(unittest.TestCase):

def test_setup(self):

reader = NikonDataReader()
self.assertEqual(reader.file_name, None)
self.assertEqual(reader.roi, None)
self.assertTrue(reader.normalise)
self.assertEqual(reader.mode, 'bin')
self.assertFalse(reader.fliplr)

roi = {'vertical':(1,-1),'horizontal':(1,-1),'angle':(1,-1)}
reader = NikonDataReader(file_name=None, roi=roi, normalise=False, mode='slice', fliplr=True)
self.assertEqual(reader.file_name, None)
self.assertEqual(reader.roi, roi)
self.assertFalse(reader.normalise)
self.assertEqual(reader.mode, 'slice')
self.assertTrue(reader.fliplr)

with self.assertRaises(FileNotFoundError):
reader = NikonDataReader(file_name='no-file')


class TestZeissReader(unittest.TestCase):

def test_setup(self):

reader = ZEISSDataReader()
self.assertEqual(reader.file_name, None)

with self.assertRaises(FileNotFoundError):
reader = ZEISSDataReader(file_name='no-file')

0 comments on commit bc5608d

Please sign in to comment.