File: utest_abs_reader.py

package info (click to toggle)
sasdata 0.11.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 51,420 kB
  • sloc: xml: 11,476; python: 8,268; makefile: 48; sh: 7
file content (130 lines) | stat: -rw-r--r-- 5,017 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
"""
    Unit tests for data manipulations
"""
import unittest
from sasdata.dataloader.loader import Loader
from sasdata.dataloader.readers.abs_reader import Reader as AbsReader
from sasdata.dataloader.readers.danse_reader import Reader as DANSEReader

import os.path


def find(filename):
    return os.path.join(os.path.dirname(__file__), 'data', filename)


class abs_reader(unittest.TestCase):

    def setUp(self):
        reader = AbsReader()
        self.data_list = reader.read(find("jan08002.ABS"))
        self.data = self.data_list[0]

    def test_abs_checkdata(self):
        """
            Check the data content to see whether
            it matches the specific file we loaded.
            Check the units too to see whether the
            Data1D defaults changed. Otherwise the
            tests won't pass
        """
        self.assertEqual(os.path.basename(self.data.filename), "jan08002.ABS")
        self.assertEqual(self.data.meta_data['loader'], "IGOR 1D")

        self.assertEqual(self.data.source.wavelength_unit, 'A')
        self.assertAlmostEqual(self.data.source.wavelength, 6.0)

        self.assertEqual(self.data.detector[0].distance_unit, 'mm')
        self.assertAlmostEqual(self.data.detector[0].distance, 1000.0)

        self.assertAlmostEqual(self.data.sample.transmission, 0.5667)

        self.assertEqual(self.data.detector[0].beam_center_unit, 'mm')
        center_x = 114.58*5.08
        center_y = 64.22*5.08
        self.assertAlmostEqual(self.data.detector[0].beam_center.x, center_x)
        self.assertAlmostEqual(self.data.detector[0].beam_center.y, center_y)

        self.assertEqual(self.data.y_unit, 'cm^{-1}')
        self.assertAlmostEqual(self.data.x[0], 0.008082)
        self.assertAlmostEqual(self.data.x[1], 0.0275)
        self.assertAlmostEqual(self.data.x[2], 0.02762)
        self.assertAlmostEqual(self.data.x[126], 0.5828)

        self.assertAlmostEqual(self.data.y[0], 0.02198)
        self.assertAlmostEqual(self.data.y[1], 0.02201)
        self.assertAlmostEqual(self.data.y[2], 0.02695)
        self.assertAlmostEqual(self.data.y[126], 0.2958)

        self.assertAlmostEqual(self.data.dy[0], 0.002704)
        self.assertAlmostEqual(self.data.dy[1], 0.001643)
        self.assertAlmostEqual(self.data.dy[2], 0.002452)
        self.assertEqual(self.data.dy[126], 1)

    def test_checkdata2(self):
        self.assertEqual(self.data.dy[126], 1)

    def test_generic_loader(self):
        # the generic loader should work as well
        data = Loader().load(find("jan08002.ABS"))
        self.assertEqual(data[0].meta_data['loader'], "IGOR 1D")

    def test_usans_negative_dxl(self):
        data_abs = Loader().load(find("sam14_cor.ABS"))[0]
        data_cor = Loader().load(find("sam14_cor.txt"))[0]
        for i in range(0, len(data_abs.x) - 1):
            self.assertAlmostEqual(data_abs.x[i], data_cor.x[i])
            self.assertAlmostEqual(data_abs.y[i], data_cor.y[i])
            self.assertAlmostEqual(data_abs.dxl[i], -data_cor.dx[i])
            self.assertTrue(data_abs.dxl[i] > 0)


class DanseReaderTests(unittest.TestCase):

    def setUp(self):
        reader = DANSEReader()
        self.data_list = reader.read(find("MP_New.sans"))
        self.data = self.data_list[0]

    def test_checkdata(self):
        """
            Check the data content to see whether
            it matches the specific file we loaded.
            Check the units too to see whether the
            Data1D defaults changed. Otherwise the
            tests won't pass
        """
        self.assertEqual(len(self.data_list), 1)
        self.assertEqual(os.path.basename(self.data.filename), "MP_New.sans")
        self.assertEqual(self.data.meta_data['loader'], "DANSE")

        self.assertEqual(self.data.source.wavelength_unit, 'A')
        self.assertAlmostEqual(self.data.source.wavelength, 7.5)

        self.assertEqual(self.data.detector[0].distance_unit, 'mm')
        self.assertAlmostEqual(self.data.detector[0].distance, 5414.99, 3)

        self.assertEqual(self.data.detector[0].beam_center_unit, 'mm')
        center_x = 68.74*5.0
        center_y = 64.77*5.0
        self.assertAlmostEqual(self.data.detector[0].beam_center.x, center_x)
        self.assertAlmostEqual(self.data.detector[0].beam_center.y, center_y)

        self.assertEqual(self.data.I_unit, 'cm^{-1}')
        self.assertAlmostEqual(self.data.data[0], 1.57831)
        self.assertAlmostEqual(self.data.data[1], 2.70983)
        self.assertAlmostEqual(self.data.data[2], 3.83422)

        self.assertAlmostEqual(self.data.err_data[0], 1.37607)
        self.assertAlmostEqual(self.data.err_data[1], 1.77569)
        self.assertAlmostEqual(self.data.err_data[2], 2.06313)

    def test_generic_loader(self):
        # the generic loader should work as well
        data = Loader().load(find("MP_New.sans"))
        self.assertEqual(len(data), 1)
        self.assertEqual(data[0].meta_data['loader'], "DANSE")


if __name__ == '__main__':
    unittest.main()