Example #1
0
 def test_str(self):
     specFile = os.path.join(os.path.dirname(__file__), 'data',
                             'issue109_data.txt')
     sdf = spec.SpecDataFile(specFile)
     self.assertEqual(str(sdf), sdf.fileName)
     sdf = spec.SpecDataFile(None)
     self.assertEqual(str(sdf), 'None')
Example #2
0
 def test_file_initial_exceptions(self):
     with self.assertRaises(TypeError):
         spec.SpecDataFile()
     with self.assertRaises(spec.SpecDataFileNotFound):
         spec.SpecDataFile('cannot_find_this_file')
     with self.assertRaises(spec.SpecDataFileNotFound):
         spec.SpecDataFile(self.abs_data_fname('03_05_UImg.dat'))
     with self.assertRaises(spec.NotASpecDataFile):
         spec.SpecDataFile(__file__)
Example #3
0
 def test_33id_spec(self):
     fname = self.abs_data_fname('33id_spec.dat')
     sfile = spec.SpecDataFile(fname)
     self.assertEqual(sfile.fileName, fname)
     self.assertEqual(len(sfile.headers), 1)
     self.assertEqual(len(sfile.scans), 106)
     self.assertEqual(sfile.getFirstScanNumber(), '1')
     self.assertEqual(sfile.getMinScanNumber(), '1')
     self.assertEqual(sfile.getMaxScanNumber(), '106')
     self.assertEqual(len(sfile.getScan(1).L), 14)
     scan = sfile.getScan(1)
     self.assertEqual(scan.scanNum, '1')
     cmd = 'ascan  eta 43.6355 44.0355  40 1'
     self.assertEqual(scan.scanCmd, cmd)
     self.assertEqual(sfile.getScanCommands([
         1,
     ]), [
         '#S 1 ' + cmd,
     ])
     self.assertEqual(scan.column_first, 'eta')
     self.assertEqual(scan.column_last, 'I0')
     self.assertEqual(len(scan.positioner), 27)
     self.assertEqual(len(scan.data['eta']), 41)
     self.assertEqual(scan.data['eta'][0], 43.628)
     self.assertEqual(scan.data['I0'][0], 1224.0)
     self.assertEqual(scan.data['eta'][-1], 44.0325)
     self.assertEqual(scan.data['I0'][-1], 1222.0)
     scan = sfile.getScan(-1)
     self.assertEqual(scan.scanNum, str(106))
     self.assertEqual(len(scan.positioner), 27)
     self.assertEqual(scan.column_first, 'Energy')
     self.assertEqual(scan.column_last, 'I0')
     self.assertEqual(scan.positioner["DCM theta"], 12.747328)
     self.assertEqual(scan.positioner["ana.theta"], -0.53981253)
Example #4
0
 def test_APS_spec_data(self):
     '''UNICAT metadata'''
     fname = self.abs_data_fname('APS_spec_data.dat')
     sfile = spec.SpecDataFile(fname)
     self.assertEqual(sfile.fileName, fname)
     self.assertEqual(len(sfile.headers), 1)
     self.assertEqual(len(sfile.scans), 20)
     self.assertEqual(sfile.getMinScanNumber(), '1')
     self.assertEqual(sfile.getMaxScanNumber(), '20')
     self.assertEqual(len(sfile.getScan(1).L), 15)
     scan = sfile.getScan(1)
     self.assertEqual(scan.scanNum, '1')
     cmd = 'ascan  mr 15.6102 15.6052  30 0.3'
     self.assertEqual(scan.scanCmd, cmd)
     self.assertEqual(sfile.getScanCommands([
         1,
     ]), [
         '#S 1 ' + cmd,
     ])
     x = 'mr'
     y = 'I0'
     self.assertEqual(scan.column_first, x)
     self.assertEqual(scan.column_last, y)
     self.assertEqual(len(scan.data[x]), 31)
     self.assertEqual(scan.data[x][0], 15.6102)
     self.assertEqual(scan.data[y][0], 222.0)
     self.assertEqual(scan.data[x][-1], 15.6052)
     self.assertEqual(scan.data[y][-1], 255.0)
     scan = sfile.getScan(-1)
     self.assertEqual(scan.scanNum, str(20))
     self.assertEqual(len(scan.positioner), 47)
     self.assertEqual(scan.column_first, "ar")
     self.assertEqual(scan.column_last, "USAXS_PD")
     self.assertEqual(scan.positioner["sa"], -8.67896)
     self.assertEqual(scan.positioner["sx_fine"], -14.4125)
Example #5
0
 def test_CdSe(self):
     fname = self.abs_data_fname('CdSe')
     sfile = spec.SpecDataFile(fname)
     self.assertEqual(sfile.fileName, fname)
     self.assertEqual(len(sfile.headers), 1)
     self.assertEqual(len(sfile.scans), 102)
     self.assertEqual(sfile.getMinScanNumber(), '1')
     self.assertEqual(sfile.getMaxScanNumber(), '102')
     self.assertEqual(len(sfile.getScan(1).L), 55)
     scan = sfile.getScan(1)
     self.assertEqual(scan.scanNum, '1')
     cmd = 'ascan  herixE -5 5  40 1'
     self.assertEqual(scan.scanCmd, cmd)
     self.assertEqual(sfile.getScanCommands([
         1,
     ]), [
         '#S 1 ' + cmd,
     ])
     x = 'HerixE'
     y = 'Seconds'
     self.assertEqual(scan.column_first, x)
     self.assertEqual(scan.column_last, y)
     self.assertEqual(len(scan.data[x]), 39)
     self.assertEqual(scan.data[x][0], -5.0137065)
     self.assertEqual(scan.data[y][0], 1.0)
     self.assertEqual(scan.data[x][-1], 4.4971428)
     self.assertEqual(scan.data[y][-1], 1.0)
     scan = sfile.getScan(-1)
     self.assertEqual(scan.scanNum, str(102))
     self.assertEqual(len(scan.positioner), 138)
     self.assertEqual(scan.column_first, "HerixE")
     self.assertEqual(scan.column_last, "Seconds")
     self.assertEqual(scan.positioner["cam-x"], 2.06)
     self.assertEqual(scan.positioner["rbs_xy"], -4.4398827)
Example #6
0
 def test_CdSe(self):
     fname = self.abs_data_fname('CdSe')
     sfile = spec.SpecDataFile(fname)
     self.assertEqual(sfile.fileName, fname)
     self.assertEqual(len(sfile.headers), 1)
     self.assertEqual(len(sfile.scans), 102)
     self.assertEqual(sfile.getMinScanNumber(), '1')
     self.assertEqual(sfile.getMaxScanNumber(), '102')
     self.assertEqual(len(sfile.getScan(1).L), 55)
     scan = sfile.getScan(1)
     self.assertEqual(scan.scanNum, '1')
     cmd = 'ascan  herixE -5 5  40 1'
     self.assertEqual(scan.scanCmd, cmd)
     self.assertEqual(sfile.getScanCommands([
         1,
     ]), [
         '#S 1 ' + cmd,
     ])
     x = 'HerixE'
     y = 'Seconds'
     self.assertEqual(scan.column_first, x)
     self.assertEqual(scan.column_last, y)
     self.assertEqual(len(scan.data[x]), 39)
     self.assertEqual(scan.data[x][0], -5.0137065)
     self.assertEqual(scan.data[y][0], 1.0)
     self.assertEqual(scan.data[x][-1], 4.4971428)
     self.assertEqual(scan.data[y][-1], 1.0)
     scan = sfile.getScan(-1)
     self.assertEqual(len(scan.positioner), 136)
     x = 'focus'
     y = 'bslhc'
     self.assertEqual(scan.positioner.keys()[0], x)
     self.assertEqual(scan.positioner.keys()[-1], y)
     self.assertEqual(scan.positioner[x], -2.83)
     self.assertEqual(scan.positioner[y], 0.6)
Example #7
0
 def test_33id_spec(self):
     fname = self.abs_data_fname('33id_spec.dat')
     sfile = spec.SpecDataFile(fname)
     self.assertEqual(sfile.fileName, fname)
     self.assertEqual(len(sfile.headers), 1)
     self.assertEqual(len(sfile.scans), 106)
     self.assertEqual(sfile.getFirstScanNumber(), '1')
     self.assertEqual(sfile.getMinScanNumber(), '1')
     self.assertEqual(sfile.getMaxScanNumber(), '106')
     self.assertEqual(len(sfile.getScan(1).L), 14)
     scan = sfile.getScan(1)
     self.assertEqual(scan.scanNum, '1')
     cmd = 'ascan  eta 43.6355 44.0355  40 1'
     self.assertEqual(scan.scanCmd, cmd)
     self.assertEqual(sfile.getScanCommands([
         1,
     ]), [
         '#S 1 ' + cmd,
     ])
     self.assertEqual(scan.column_first, 'eta')
     self.assertEqual(scan.column_last, 'I0')
     self.assertEqual(len(scan.positioner), 27)
     self.assertEqual(len(scan.data['eta']), 41)
     self.assertEqual(scan.data['eta'][0], 43.628)
     self.assertEqual(scan.data['I0'][0], 1224.0)
     self.assertEqual(scan.data['eta'][-1], 44.0325)
     self.assertEqual(scan.data['I0'][-1], 1222.0)
     scan = sfile.getScan(-1)
     self.assertEqual(len(scan.positioner), 27)
     x = 'a2Theta'
     y = 'slitmb'
     self.assertEqual(scan.positioner.keys()[0], x)
     self.assertEqual(scan.positioner.keys()[-1], y)
     self.assertEqual(scan.positioner[x], 0.0)
     self.assertEqual(scan.positioner[y], 2.4003)
Example #8
0
 def test_lmn40(self):
     fname = self.abs_data_fname('lmn40.spe')
     sfile = spec.SpecDataFile(fname)
     self.assertEqual(sfile.fileName, fname)
     self.assertEqual(len(sfile.headers), 2)  # TODO: test more here!
     self.assertEqual(len(sfile.scans), 262)
     self.assertEqual(sfile.getMinScanNumber(), '1')
     self.assertEqual(sfile.getMaxScanNumber(), '271')
     self.assertEqual(len(sfile.getScan(1).L), 9)
     scan = sfile.getScan(1)
     self.assertEqual(scan.scanNum, '1')
     cmd = 'ascan  tth -0.7 -0.5  101 1'
     self.assertEqual(scan.scanCmd, cmd)
     self.assertEqual(sfile.getScanCommands([
         1,
     ]), [
         '#S 1 ' + cmd,
     ])
     x = 'Two Theta'
     y = 'winCZT'
     self.assertEqual(scan.column_first, x)
     self.assertEqual(scan.column_last, y)
     self.assertEqual(len(scan.data[x]), 50)
     self.assertEqual(scan.data[x][0], -0.70000003)
     self.assertEqual(scan.data[y][0], 1.0)
     self.assertEqual(scan.data[x][-1], -0.60300003)
     self.assertEqual(scan.data[y][-1], 11.0)
     scan = sfile.getScan(-1)
     self.assertEqual(scan.scanNum, str(271))
     self.assertEqual(len(scan.positioner), 17)
     self.assertEqual(scan.column_first, "phi")
     self.assertEqual(scan.column_last, "NaI")
     self.assertEqual(scan.positioner["chi"], 90.000004)
     self.assertEqual(scan.positioner["Two Theta"], 0.15500001)
Example #9
0
    def test_nonempty_positioner(self):
        "issue #196"
        fname = os.path.join(_test_path, "tests", 'data', 'issue196_data2.txt')
        scan_number = 108
        sdf = spec.SpecDataFile(fname)
        scan = sdf.getScan(scan_number)

        self.assertEqual(scan.header.raw.find("\n#O0 \n"), -1)
        self.assertEqual(scan.header.raw.find("\n#o0 \n"), -1)
        self.assertGreater(scan.header.raw.find("\n#O0 m_stage_r\n"), 0)
        self.assertGreater(scan.header.raw.find("\n#o0 mr\n"), 0)
        self.assertEqual(len(scan.header.O), 1)
        self.assertEqual(len(scan.header.O[0]), 1)
        self.assertEqual(scan.header.O[0][0], "m_stage_r")
        self.assertEqual(len(scan.header.o), 1)
        self.assertEqual(len(scan.header.o[0]), 1)
        self.assertEqual(scan.header.o[0][0], "mr")
        self.assertEqual(scan.raw.find("\n#P0 \n"), -1)
        self.assertGreater(scan.raw.find("\n#P0 8.824977\n"), 0)
        self.assertEqual(len(scan.P), 1)
        self.assertEqual(len(scan.P[0]), 1)
        self.assertEqual(scan.P[0][0], "8.824977")
        self.assertEqual(len(scan.positioner), 1)
        self.assertIn("m_stage_r", scan.positioner)
        self.assertEqual(scan.positioner["m_stage_r"], float("8.824977"))
Example #10
0
    def testWriter(self):
        '''test the writer.Writer class'''
        spec_data = spec.SpecDataFile(self.fname)
        out = writer.Writer(spec_data)
        scan_list = [1, 5, 7]
        out.save(self.hname, scan_list)

        dd = out.root_attributes()
        self.assertTrue(isinstance(dd, dict))

        # TODO: test writer's various functions and methods

        # test file written by Writer
        with h5py.File(self.hname, "r") as hp:
            root = hp["/"]
            default = root.attrs.get("default")
            self.assertNotEqual(default, None)
            self.assertTrue(default in root)
            nxentry = root[default]

            default = nxentry.attrs.get("default")
            self.assertNotEqual(default, None)
            self.assertTrue(default in nxentry)
            nxdata = nxentry[default]

            signal = nxdata.attrs.get("signal")
            self.assertNotEqual(signal, None)
            self.assertTrue(signal in nxdata)
Example #11
0
    def test_geometry_plugin(self):
        fname = os.path.join(_path, "spec2nexus", 'data', '33bm_spec.dat')
        scan_number = 17
        sdf = spec.SpecDataFile(fname)
        scan = sdf.getScan(scan_number)

        self.assertEqual(scan.diffractometer.geometry_name_full,
                         "fourc.default")
        self.assertEqual(scan.diffractometer.mode, "Omega equals zero")
        self.assertEqual(scan.diffractometer.sector, 0)
        self.assertIsNotNone(scan.diffractometer.lattice)
        self.assertEqual(len(scan.diffractometer.reflections), 2)

        out = writer.Writer(sdf)
        out.save(self.hname, [scan_number])

        with h5py.File(self.hname, "r") as hp:
            nxentry = hp["/S17"]
            group = nxentry["instrument/geometry_parameters"]

            self.assertIn("instrument/name", nxentry)
            self.assertEqual(nxentry["instrument/name"][0],
                             scan.diffractometer.geometry_name_full.encode())
            self.assertIn("diffractometer_simple", group)
            self.assertEqual(group["diffractometer_simple"][0], b"fourc")
            self.assertIn("diffractometer_full", group)
            self.assertEqual(group["diffractometer_full"][0], b"fourc.default")
            self.assertIn("diffractometer_variant", group)
            self.assertEqual(group["diffractometer_variant"][0], b"default")

            for k in "g_aa g_bb g_cc g_al g_be g_ga LAMBDA".split():
                self.assertIn(k, group)
                v = group[k][()][0]
                self.assertGreater(v, 0)

            self.assertIn("sample/unit_cell_abc", nxentry)
            self.assertIn("sample/unit_cell_alphabetagamma", nxentry)
            self.assertIn("sample/unit_cell", nxentry)

            self.assertIn("sample/ub_matrix", nxentry)
            ds = nxentry["sample/ub_matrix"]
            self.assertTupleEqual(ds.shape, (3, 3))

            self.assertIn("sample/or0", nxentry)
            self.assertIn("sample/or0/h", nxentry)
            self.assertIn("sample/or0/k", nxentry)
            self.assertIn("sample/or0/l", nxentry)
            self.assertIn("sample/or1", nxentry)
            self.assertIn("sample/or1/h", nxentry)
            self.assertIn("sample/or1/k", nxentry)
            self.assertIn("sample/or1/l", nxentry)

            self.assertIn("instrument/monochromator/wavelength", nxentry)
            self.assertIn("sample/beam/incident_wavelength", nxentry)
            self.assertEqual(
                nxentry["instrument/monochromator/wavelength"],
                nxentry["sample/beam/incident_wavelength"],
            )
Example #12
0
 def testWriter(self):
     '''test the writer.Writer class'''
     spec_data = spec.SpecDataFile(self.fname)
     out = writer.Writer(spec_data)
     scan_list = [1, 5, 7]
     out.save(self.hname, scan_list)
     # TODO: make tests of other things in the Writer
     dd = out.root_attributes()
     self.assertTrue(isinstance(dd, dict))
    def test_the_data_file(self):
        '''
        write all as HDF5: 1-D scans, USAXS scans, Fly scans, #O+#o and #J+#j control lines
        '''
        prefix = os.path.abspath(
            os.path.join(_path, 'spec2nexus', 'data', '03_06_JanTest'))
        file1 = prefix + '.dat'
        hfile = tests.common.create_test_file()

        # writer interface has changed, must use new spec module to proceed
        specfile = spec.SpecDataFile(file1)
        self.assertTrue(isinstance(specfile, spec2nexus.spec.SpecDataFile),
                        file1)

        specwriter = writer.Writer(specfile)
        self.assertTrue(isinstance(specwriter, spec2nexus.writer.Writer),
                        file1)

        specwriter.save(hfile, sorted(specfile.getScanNumbers()))
        self.assertTrue(os.path.exists(hfile))

        def subgroup_list(parent, nxclass):
            children = []
            for item in sorted(parent):
                obj = parent[item]
                if isinstance(obj, h5py.Group):
                    if obj.attrs.get('NX_class', '') == nxclass:
                        children.append(obj)
            return children

        fp = h5py.File(hfile, 'r')
        self.assertTrue(isinstance(fp, h5py.File), hfile)
        nxentry_groups = subgroup_list(fp, 'NXentry')
        self.assertGreater(len(nxentry_groups), 0)
        for nxentry in nxentry_groups:
            nxdata_groups = subgroup_list(nxentry, 'NXdata')
            self.assertGreater(len(nxdata_groups), 0)
            for nxdata in nxdata_groups:
                signal = nxdata.attrs.get('signal')
                self.assertTrue(signal in nxdata)

        default = fp.attrs.get('default')
        self.assertTrue(default in fp)
        nxentry = fp[default]

        default = nxentry.attrs.get('default')
        self.assertTrue(default in nxentry)
        nxdata = nxentry[default]

        signal = nxdata.attrs.get('signal')
        self.assertTrue(signal in nxdata)

        fp.close()

        os.remove(hfile)
        self.assertFalse(os.path.exists(hfile))
Example #14
0
    def test_the_data_file(self):
        '''
        look for the metadata
        '''
        prefix = os.path.abspath(
            os.path.join(_path, 'spec2nexus', 'data',
                         'usaxs-bluesky-specwritercallback'))
        file1 = prefix + '.dat'
        hfile = tests.common.create_test_file()

        # writer interface has changed, must use new spec module to proceed
        specfile = spec.SpecDataFile(file1)
        self.assertTrue(isinstance(specfile, spec2nexus.spec.SpecDataFile),
                        file1)

        for scan_num, scan in specfile.scans.items():
            msg = "Scan %s MD test" % scan_num
            scan.interpret()  # force lazy-loader to parse this scan
            self.assertTrue(hasattr(scan, "MD"), msg)
            self.assertTrue(isinstance(scan.MD, OrderedDict), msg)
            self.assertGreater(len(scan.MD), 0, msg)

        # test the metadata in a NeXus file

        specwriter = writer.Writer(specfile)
        self.assertTrue(isinstance(specwriter, spec2nexus.writer.Writer),
                        file1)

        specwriter.save(hfile, sorted(specfile.getScanNumbers()))
        self.assertTrue(os.path.exists(hfile))

        def subgroup_list(parent, nxclass):
            children = []
            for item in sorted(parent):
                obj = parent[item]
                if isinstance(obj, h5py.Group):
                    if obj.attrs.get('NX_class', '') == nxclass:
                        children.append(obj)
            return children

        fp = h5py.File(hfile, 'r')
        for nxentry in subgroup_list(fp, 'NXentry'):
            # nxinstrument_groups = subgroup_list(nxentry, 'NXinstrument')
            # self.assertEqual(len(nxinstrument_groups), 1)
            # nxinstrument = nxinstrument_groups[0]

            nxcollection_groups = subgroup_list(nxentry, 'NXcollection')
            self.assertGreater(len(nxcollection_groups), 0)
            md_group = nxentry.get("bluesky_metadata")
            self.assertIsNotNone(md_group, "bluesky_metadata in NeXus file")

        fp.close()

        os.remove(hfile)
        self.assertFalse(os.path.exists(hfile))
Example #15
0
    def test_custom_plugin(self):
        manager = plugin.get_plugin_manager()
        self.assertNotEqual(manager, None)
        self.assertTrue(isinstance(manager, plugin.PluginManager))
        num_known_control_lines_before = len(manager.lazy_attributes)
        self.assertNotEqual(num_known_control_lines_before, 0)

        _p = os.path.dirname(__file__)
        _p = os.path.join(_p, "custom_plugins")
        _filename = os.path.join(_p, "specfile.txt")
        # custom_key = "#TEST"            # in SPEC data file
        # custom_attribute = "MyTest"     # in python, scan.MyTest

        # first, test data with custom control line without plugin loaded
        self.assertNotIn("#TEST", manager.registry)
        self.assertNotIn("MyTest", manager.lazy_attributes)
        sdf = spec.SpecDataFile(_filename)
        scan = sdf.getScan(50)
        self.assertIn("G0", scan.G)

        self.assertFalse(hasattr(scan, "MyTest"))
        with self.assertRaises(AttributeError) as exc:
            self.assertEqual(len(scan.MyTest), 1)
        expected = "'SpecDataFileScan' object has no attribute 'MyTest'"
        self.assertEqual(exc.exception.args[0], expected)

        # next, test again after loading plugin
        from tests.custom_plugins import process_only_plugin
        num_known_control_lines_after = len(manager.lazy_attributes)
        self.assertGreater(num_known_control_lines_after,
                           num_known_control_lines_before)
        self.assertIn("#TEST", manager.registry)
        self.assertIn("MyTest", manager.lazy_attributes)

        sdf = spec.SpecDataFile(_filename)
        scan = sdf.getScan(50)
        self.assertIn("G0", scan.G)

        self.assertTrue(hasattr(scan, "MyTest"))
        self.assertEqual(len(scan.MyTest), 1)
        expected = "this is a custom control line to be found"
        self.assertEqual(scan.MyTest[0], expected)
Example #16
0
    def test_update_available(self):
        # test the ``update_available`` property
        sdf = spec.SpecDataFile(self.data_file.name)
        self.assertGreater(sdf.mtime, 0)
        self.assertFalse(sdf.update_available)
        self.assertEqual(sdf.filesize, 1837)  # OS dependent?
        self.assertEqual(sdf.last_scan, sdf.getLastScanNumber())
        self.assertEqual(sdf.last_scan, '3')

        # update the file with more data
        self.addMoreScans()
        time.sleep(SHORT_WAIT)

        self.assertTrue(sdf.update_available)
Example #17
0
    def test_data_file(self):
        self.assertTrue(os.path.exists(self.testfile))

        specData = spec.SpecDataFile(self.testfile)
        self.assertTrue(isinstance(specData, spec.SpecDataFile))

        with self.assertRaises(ValueError):
            # #128 failed due to assumption of int keys
            r = sorted(specData.scans.keys(), key=int)

        # next line assumes #128 is fixed
        scans = specData.getScanNumbers()
        self.assertEqual(len(scans), 74, "expected number of scans")
        self.assertTrue("1" in scans)
        self.assertTrue("1.1" in scans)
Example #18
0
    def test_save_data_hklmesh(self):
        #S 17  hklmesh  H 1.9 2.1 100  K 1.9 2.1 100  -800000
        fname = os.path.join(_path, "spec2nexus", 'data', '33bm_spec.dat')
        hname = "test.h5"
        spec_data = spec.SpecDataFile(fname)
        out = writer.Writer(spec_data)
        out.save(hname, [17])

        with h5py.File(hname, "r") as hp:
            root = hp["/"]
            nxdata = root["/S17/data"]
            signal = nxdata.attrs["signal"]
            axes = nxdata.attrs["axes"]
            self.assertEqual(axes[0], b"H")
            self.assertEqual(axes[1], b"K")
Example #19
0
def openSpecDataFile(filename):
    global specdatafile_obj
    if specdatafile_obj is not None:
        if hasattr(specdatafile_obj, "fileName"):
            if specdatafile_obj.fileName != filename:
                specdatafile_obj = None
        else:
            specdatafile_obj = None

    if specdatafile_obj is None:
        try:
            specdatafile_obj = spec.SpecDataFile(filename)
        except spec.NotASpecDataFile as _exc:
            return

    return specdatafile_obj
Example #20
0
 def test_33bm_spec(self):
     fname = self.abs_data_fname('33bm_spec.dat')
     sfile = spec.SpecDataFile(fname)
     self.assertEqual(sfile.fileName, fname)
     self.assertEqual(len(sfile.headers), 1)
     self.assertEqual(len(sfile.scans), 17)
     self.assertEqual(sfile.getMinScanNumber(), '1')
     self.assertEqual(sfile.getMaxScanNumber(), '17')
     self.assertEqual(len(sfile.getScan(1).L), 27)
     scan = sfile.getScan(1)
     self.assertEqual(scan.scanNum, '1')
     cmd = 'ascan  th 19.022 19.222  60 -20000'
     self.assertEqual(scan.scanCmd, cmd)
     self.assertEqual(sfile.getScanCommands([
         1,
     ]), [
         '#S 1 ' + cmd,
     ])
Example #21
0
    def test_save_data_lscan(self):
        # hklscan moving L
        test_file = '33bm_spec.dat'
        scan_number = 14

        fname = os.path.join(_path, "spec2nexus", 'data', test_file)
        hname = "test.h5"
        spec_data = spec.SpecDataFile(fname)
        out = writer.Writer(spec_data)
        out.save(hname, [scan_number])

        with h5py.File(hname, "r") as hp:
            root = hp["/"]
            nxdata = root["/S%d/data" % scan_number]
            signal = nxdata.attrs["signal"]
            axes = nxdata.attrs["axes"]
            self.assertEqual(signal, "signal")
            self.assertEqual(axes, "L")
Example #22
0
 def test_YSZ011_ALDITO_Fe2O3_planar_fired_1(self):
     fname = self.abs_data_fname('YSZ011_ALDITO_Fe2O3_planar_fired_1.spc')
     sfile = spec.SpecDataFile(fname)
     self.assertEqual(sfile.fileName, fname)
     self.assertEqual(len(sfile.headers), 1)
     self.assertEqual(len(sfile.scans), 37)
     self.assertEqual(sfile.getMinScanNumber(), '1')
     self.assertEqual(sfile.getMaxScanNumber(), '37')
     self.assertEqual(len(sfile.getScan(1).L), 50)
     scan = sfile.getScan(1)
     self.assertEqual(scan.scanNum, '1')
     cmd = 'ascan  th 26.7108 27.1107  60 0.05'
     self.assertEqual(scan.scanCmd, cmd)
     self.assertEqual(sfile.getScanCommands([
         1,
     ]), [
         '#S 1 ' + cmd,
     ])
Example #23
0
    def test_empty_positioner(self):
        "issue #196"
        fname = os.path.join(_test_path, "tests", 'data', 'issue196_data.txt')
        scan_number = 108
        sdf = spec.SpecDataFile(fname)
        scan = sdf.getScan(scan_number)

        self.assertGreater(scan.header.raw.find("\n#O0 \n"), 0)
        self.assertGreater(scan.header.raw.find("\n#o0 \n"), 0)
        self.assertEqual(len(scan.header.O), 1)
        self.assertEqual(len(scan.header.O[0]), 0)
        self.assertEqual(len(scan.header.o), 1)
        self.assertEqual(len(scan.header.o[0]), 0)

        self.assertGreater(scan.raw.find("\n#P0 \n"), 0)
        self.assertEqual(len(scan.P), 1)
        self.assertEqual(len(scan.P[0]), 0)
        self.assertEqual(len(scan.positioner), 0)
Example #24
0
    def test_spock_file(self):
        testfile = os.path.join(self.path, 'data', 'spec_from_spock.spc')

        self.assertTrue(os.path.exists(testfile))

        self.assertFalse(spec.is_spec_file_with_header(testfile))
        self.assertTrue(spec.is_spec_file(testfile))

        specData = spec.SpecDataFile(testfile)
        self.assertTrue(isinstance(specData, spec.SpecDataFile))
        
        self.assertEqual(len(specData.headers), 1, "expected number of headers")
        header = specData.headers[0]
        self.assertTrue(isinstance(header, spec.SpecDataFileHeader))
        self.assertEqual(len(header.raw), 0, "no raw content")
        self.assertNotEqual(len(header.date), 0, "default date")
        self.assertEqual(header.epoch, 1505468350, "default epoch")
        self.assertEqual(len(header.comments), 0, "expected number of header comments")
        self.assertEqual(len(header.O), 0, "defined positioner label rows")
        self.assertEqual(len(header.H), 0, "defined metadata label rows")

        scans = specData.getScanNumbers()
        self.assertEqual(len(scans), 171, "expected number of scans")
        scan = specData.getScan(2)
        self.assertTrue(isinstance(scan, spec.SpecDataFileScan))

        self.assertEqual(len(scan.P), 20, "defined positioner value rows")
        self.assertEqual(len(header.O), 20, "defined positioner label rows")
        self.assertEqual(scan.header.O, header.O, "same object")
        self.assertEqual(len(scan.V), 0, "defined metadata value rows")
        self.assertEqual(len(scan.L), 23, "defined data column labels")
        self.assertEqual(len(scan.data), 23, "defined data variables")
        self.assertEqual(scan.L[0], "Pt_No", "first data column label")
        self.assertEqual(scan.L[-1], "dt", "last data column label")
        d1 = scan.data.get("Pt_No")
        self.assertNotEqual(d1, None, "data 'Pt_No' exists")
        self.assertEqual(len(d1), 51, "data 'Pt_No' has expected number of values")
        self.assertEqual(scan.scanCmd, "dscan th -0.5 0.5 50 1.0", "scan command")
        self.assertEqual(scan.scanNum, "2", "scan number as string")
        self.assertNotEqual(scan.scanNum, 2, "scan number as integer")
        self.assertEqual(len(scan.positioner), 155, "defined positioners")
        d1 = scan.positioner.get("abs")
        self.assertNotEqual(d1, None, "positioner 'abs' exists")
        self.assertEqual(d1, 0.0, "positioner 'abs' value is zero")
Example #25
0
    def test_save_data_mesh(self):
        #S 22  mesh  eta 57 57.1 10  chi 90.9 91 10  1
        fname = os.path.join(_path, "spec2nexus", 'data', '33id_spec.dat')
        hname = "test.h5"
        spec_data = spec.SpecDataFile(fname)
        out = writer.Writer(spec_data)
        out.save(hname, [22])

        with h5py.File(hname, "r") as hp:
            root = hp["/"]
            nxdata = root["/S22/data"]
            signal = nxdata.attrs["signal"]
            self.assertEqual(nxdata[signal][()].shape, (11, 11))

            ds = nxdata["_mca_"]
            self.assertEqual(ds[()].shape, (11, 11, 91))
            self.assertEqual(ds.attrs["axes"], "eta:chi:_mca_channel_")
            self.assertEqual(ds.attrs["spec_name"], "_mca_")
            self.assertEqual(ds.attrs["units"], "counts")
    def process_files(self, dgc, test_files, base_path):
        for triplet in test_files:
            filename, scan_number, geo_name = triplet
            fullname = os.path.join(base_path, filename)
            scan = spec.SpecDataFile(fullname).getScan(scan_number)
            geom = dgc.match(scan)
            self.assertIsNotNone(geom, filename)
            self.assertEqual(geom, geo_name, filename)

            gonio = diffractometers.Diffractometer(geom)
            gonio.parse(scan)

            if len(gonio.geometry_parameters) > 0:
                gpar = gonio.geometry_parameters
                for k in "g_aa g_bb g_cc g_al g_be g_ga LAMBDA".split():
                    if k in gpar:
                        self.assertGreater(gpar[k].value, 0, filename)

                if ("ub_matrix" in gpar):
                    ub = gpar["ub_matrix"].value
                    self.assertTrue(isinstance(ub, numpy.ndarray), filename)
                    self.assertTupleEqual(ub.shape, (3, 3), filename)
Example #27
0
    def test_extra_control_line_content__issue109(self):
        specFile = os.path.join(os.path.dirname(__file__), 'data',
                                'issue109_data.txt')
        sfile = spec.SpecDataFile(specFile)

        scan_number = 1
        scan = sfile.getScan(scan_number)
        self.assertTrue(scan is not None)
        self.assertEqual(scan.T, "0.5", "received expected count time")

        # check scan 25, #T line said 0 seconds, but data for Seconds says 1
        scan_number = 25
        scan = sfile.getScan(scan_number)
        self.assertTrue(scan is not None)
        self.assertEqual(scan.T, "0", "received expected count time")
        self.assertIn("Seco nds", scan.data, "found counting base")
        self.assertEqual(scan.data["Seco nds"][0], 1,
                         "received expected count time")
        self.assertNotEqual(scan.T, str(scan.data["Seco nds"][0]),
                            "did not report what they were about to do")

        # check scan 11, #M line said 400000 counts
        scan_number = 11
        scan = sfile.getScan(scan_number)
        self.assertTrue(scan is not None)
        self.assertEqual(scan.M, "400000", "received expected monitor count")
        self.assertTrue(hasattr(scan, 'MCA'), "MCA found")
        self.assertIn("ROI", scan.MCA, "MCA ROI found")
        roi_dict = scan.MCA["ROI"]
        key = "FeKa(mca1 R1)"
        self.assertIn(key, roi_dict, "MCA ROI config found")
        roi = roi_dict[key]
        self.assertEqual(roi["first_chan"], 377, "MCA ROI first channel")
        self.assertEqual(roi["last_chan"], 413, "MCA ROI last channel")

        self.assertIn(key, scan.data, "MCA ROI data found")
        self.assertEqual(len(scan.data[key]), 61,
                         "embedded comment not part of data")
Example #28
0
    def test_refresh(self):
        sdf = spec.SpecDataFile(self.data_file.name)
        self.assertNotEqual(sdf.last_scan, None)
        self.assertEqual(len(sdf.getScanNumbers()), 3)
        self.assertEqual(sdf.filesize, 1837)  # OS dependent?

        # update the file with more data
        self.addMoreScans()
        time.sleep(SHORT_WAIT)

        scan_number = sdf.refresh()
        self.assertGreater(sdf.filesize, 1837)
        self.assertEqual(len(sdf.getScanNumbers()), 5)
        self.assertNotEqual(scan_number, None)
        self.assertNotEqual(sdf.last_scan, None)
        self.assertNotEqual(scan_number, sdf.last_scan)
        self.assertNotEqual(scan_number, sdf.getLastScanNumber())
        self.assertEqual(sdf.last_scan, sdf.getLastScanNumber())

        time.sleep(SHORT_WAIT)
        scan_number = sdf.refresh()
        self.assertEqual(scan_number, None)
        self.assertEqual(len(sdf.getScanNumbers()), 5)
Example #29
0
    def test_33id_file(self):
        testfile = os.path.join(self.path, 'data', '33id_spec.dat')

        self.assertTrue(os.path.exists(testfile))

        self.assertTrue(spec.is_spec_file_with_header(testfile))
        self.assertTrue(spec.is_spec_file(testfile))

        specData = spec.SpecDataFile(testfile)
        self.assertTrue(isinstance(specData, spec.SpecDataFile))

        scans = specData.getScanNumbers()
        self.assertEqual(len(scans), 106, "expected number of scans")
        
        self.assertEqual(len(specData.headers), 1, "expected number of headers")
        header = specData.headers[0]
        self.assertTrue(isinstance(header, spec.SpecDataFileHeader))
        self.assertGreater(len(header.raw), 0, "raw content")
        self.assertGreater(len(header.date), 0, "defined date")
        self.assertEqual(header.epoch, 1058427452, "expected epoch")
        self.assertEqual(len(header.comments), 1, "expected number of header comments")
        self.assertEqual(len(header.O), 4, "defined positioner label rows")
        self.assertEqual(len(header.H), 21, "defined metadata label rows")
Example #30
0
 def test_YSZ011_ALDITO_Fe2O3_planar_fired_1(self):
     fname = self.abs_data_fname('YSZ011_ALDITO_Fe2O3_planar_fired_1.spc')
     sfile = spec.SpecDataFile(fname)
     self.assertEqual(sfile.fileName, fname)
     self.assertEqual(len(sfile.headers), 1)
     self.assertEqual(len(sfile.scans), 37)
     self.assertEqual(sfile.getMinScanNumber(), '1')
     self.assertEqual(sfile.getMaxScanNumber(), '37')
     self.assertEqual(len(sfile.getScan(1).L), 50)
     scan = sfile.getScan(1)
     self.assertEqual(scan.scanNum, '1')
     cmd = 'ascan  th 26.7108 27.1107  60 0.05'
     self.assertEqual(scan.scanCmd, cmd)
     self.assertEqual(sfile.getScanCommands([
         1,
     ]), [
         '#S 1 ' + cmd,
     ])
     x = 'theta'
     y = 'imroi1'
     self.assertEqual(scan.column_first, x)
     self.assertEqual(scan.column_last, y)
     self.assertEqual(len(scan.data[x]), 60)
     self.assertEqual(scan.data[x][0], 26.714)
     self.assertEqual(scan.data[y][0], 6.0)
     self.assertEqual(scan.data[x][-1], 27.1075)
     self.assertEqual(scan.data[y][-1], 7.0)
     scan = sfile.getScan(-1)
     self.assertEqual(scan.scanCmd, "ascan  phi -180 180  720 0.5")
     self.assertEqual(len(scan.positioner), 26)
     x = '2-theta'
     y = 'chSens'
     keys = list(scan.positioner.keys())
     self.assertEqual(keys[0], x)
     self.assertEqual(keys[-1], y)
     self.assertEqual(scan.positioner[x], 18.8)
     self.assertEqual(scan.positioner[y], 5.0)