diff options
Diffstat (limited to 'src/silx/io/test/test_octaveh5.py')
-rw-r--r-- | src/silx/io/test/test_octaveh5.py | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/src/silx/io/test/test_octaveh5.py b/src/silx/io/test/test_octaveh5.py new file mode 100644 index 0000000..479ef85 --- /dev/null +++ b/src/silx/io/test/test_octaveh5.py @@ -0,0 +1,197 @@ +# /*########################################################################## +# Copyright (C) 2016 European Synchrotron Radiation Facility +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +# ############################################################################*/ +""" +Tests for the octaveh5 module +""" + +__authors__ = ["C. Nemoz", "H. Payno"] +__license__ = "MIT" +__date__ = "12/07/2016" + +import unittest +import os +import tempfile + +try: + from ..octaveh5 import Octaveh5 +except ImportError: + Octaveh5 = None + + +@unittest.skipIf(Octaveh5 is None, "Could not import h5py") +class TestOctaveH5(unittest.TestCase): + @staticmethod + def _get_struct_FT(): + return { + "NO_CHECK": 0.0, + "SHOWSLICE": 1.0, + "DOTOMO": 1.0, + "DATABASE": 0.0, + "ANGLE_OFFSET": 0.0, + "VOLSELECTION_REMEMBER": 0.0, + "NUM_PART": 4.0, + "VOLOUTFILE": 0.0, + "RINGSCORRECTION": 0.0, + "DO_TEST_SLICE": 1.0, + "ZEROOFFMASK": 1.0, + "VERSION": "fastomo3 version 2.0", + "CORRECT_SPIKES_THRESHOLD": 0.040000000000000001, + "SHOWPROJ": 0.0, + "HALF_ACQ": 0.0, + "ANGLE_OFFSET_VALUE": 0.0, + "FIXEDSLICE": "middle", + "VOLSELECT": "total", + } + + @staticmethod + def _get_struct_PYHSTEXE(): + return { + "EXE": "PyHST2_2015d", + "VERBOSE": 0.0, + "OFFV": "PyHST2_2015d", + "TOMO": 0.0, + "VERBOSE_FILE": "pyhst_out.txt", + "DIR": "/usr/bin/", + "OFFN": "pyhst2", + } + + @staticmethod + def _get_struct_FTAXIS(): + return { + "POSITION_VALUE": 12345.0, + "COR_ERROR": 0.0, + "FILESDURINGSCAN": 0.0, + "PLOTFIGURE": 1.0, + "DIM1": 0.0, + "OVERSAMPLING": 5.0, + "TO_THE_CENTER": 1.0, + "POSITION": "fixed", + "COR_POSITION": 0.0, + "HA": 0.0, + } + + @staticmethod + def _get_struct_PAGANIN(): + return { + "MKEEP_MASK": 0.0, + "UNSHARP_SIGMA": 0.80000000000000004, + "DILATE": 2.0, + "UNSHARP_COEFF": 3.0, + "MEDIANR": 4.0, + "DB": 500.0, + "MKEEP_ABS": 0.0, + "MODE": 0.0, + "THRESHOLD": 0.5, + "MKEEP_BONE": 0.0, + "DB2": 100.0, + "MKEEP_CORR": 0.0, + "MKEEP_SOFT": 0.0, + } + + @staticmethod + def _get_struct_BEAMGEO(): + return {"DIST": 55.0, "SY": 0.0, "SX": 0.0, "TYPE": "p"} + + def setUp(self): + self.tempdir = tempfile.mkdtemp() + self.test_3_6_fname = os.path.join( + self.tempdir, "silx_tmp_t00_octaveTest_3_6.h5" + ) + self.test_3_8_fname = os.path.join( + self.tempdir, "silx_tmp_t00_octaveTest_3_8.h5" + ) + + def tearDown(self): + if os.path.isfile(self.test_3_6_fname): + os.unlink(self.test_3_6_fname) + if os.path.isfile(self.test_3_8_fname): + os.unlink(self.test_3_8_fname) + + def testWritedIsReaded(self): + """ + Simple test to write and reaf the structure compatible with the octave h5 using structure. + This test is for # test for octave version > 3.8 + """ + writer = Octaveh5() + + writer.open(self.test_3_8_fname, "a") + # step 1 writing the file + writer.write("FT", self._get_struct_FT()) + writer.write("PYHSTEXE", self._get_struct_PYHSTEXE()) + writer.write("FTAXIS", self._get_struct_FTAXIS()) + writer.write("PAGANIN", self._get_struct_PAGANIN()) + writer.write("BEAMGEO", self._get_struct_BEAMGEO()) + writer.close() + + # step 2 reading the file + reader = Octaveh5().open(self.test_3_8_fname) + # 2.1 check FT + data_readed = reader.get("FT") + self.assertEqual(data_readed, self._get_struct_FT()) + # 2.2 check PYHSTEXE + data_readed = reader.get("PYHSTEXE") + self.assertEqual(data_readed, self._get_struct_PYHSTEXE()) + # 2.3 check FTAXIS + data_readed = reader.get("FTAXIS") + self.assertEqual(data_readed, self._get_struct_FTAXIS()) + # 2.4 check PAGANIN + data_readed = reader.get("PAGANIN") + self.assertEqual(data_readed, self._get_struct_PAGANIN()) + # 2.5 check BEAMGEO + data_readed = reader.get("BEAMGEO") + self.assertEqual(data_readed, self._get_struct_BEAMGEO()) + reader.close() + + def testWritedIsReadedOldOctaveVersion(self): + """The same test as testWritedIsReaded but for octave version < 3.8""" + # test for octave version < 3.8 + writer = Octaveh5(3.6) + + writer.open(self.test_3_6_fname, "a") + + # step 1 writing the file + writer.write("FT", self._get_struct_FT()) + writer.write("PYHSTEXE", self._get_struct_PYHSTEXE()) + writer.write("FTAXIS", self._get_struct_FTAXIS()) + writer.write("PAGANIN", self._get_struct_PAGANIN()) + writer.write("BEAMGEO", self._get_struct_BEAMGEO()) + writer.close() + + # step 2 reading the file + reader = Octaveh5(3.6).open(self.test_3_6_fname) + # 2.1 check FT + data_readed = reader.get("FT") + self.assertEqual(data_readed, self._get_struct_FT()) + # 2.2 check PYHSTEXE + data_readed = reader.get("PYHSTEXE") + self.assertEqual(data_readed, self._get_struct_PYHSTEXE()) + # 2.3 check FTAXIS + data_readed = reader.get("FTAXIS") + self.assertEqual(data_readed, self._get_struct_FTAXIS()) + # 2.4 check PAGANIN + data_readed = reader.get("PAGANIN") + self.assertEqual(data_readed, self._get_struct_PAGANIN()) + # 2.5 check BEAMGEO + data_readed = reader.get("BEAMGEO") + self.assertEqual(data_readed, self._get_struct_BEAMGEO()) + reader.close() |