source: sasview/test/sasdataloader/test/utest_abs_reader.py @ 4dd90bf

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.2.2ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since 4dd90bf was 4dd90bf, checked in by lewis, 7 years ago

Remove invalid import

  • Property mode set to 100644
File size: 14.4 KB
Line 
1"""
2    Unit tests for data manipulations
3"""
4from __future__ import print_function
5
6import unittest
7import numpy as np
8from sas.sascalc.dataloader.loader import Loader
9from sas.sascalc.dataloader.readers.abs_reader import Reader as AbsReader
10from sas.sascalc.dataloader.readers.hfir1d_reader import Reader as HFIRReader
11from sas.sascalc.dataloader.readers.danse_reader import Reader as DANSEReader
12from sas.sascalc.dataloader.readers.cansas_reader import Reader as CANSASReader
13
14from sas.sascalc.dataloader.data_info import Data1D
15
16import os.path
17
18
19class abs_reader(unittest.TestCase):
20
21    def setUp(self):
22        reader = AbsReader()
23        self.data = reader.read("jan08002.ABS")
24
25    def test_abs_checkdata(self):
26        """
27            Check the data content to see whether
28            it matches the specific file we loaded.
29            Check the units too to see whether the
30            Data1D defaults changed. Otherwise the
31            tests won't pass
32        """
33        self.assertEqual(self.data.filename, "jan08002.ABS")
34        self.assertEqual(self.data.meta_data['loader'], "IGOR 1D")
35
36        self.assertEqual(self.data.source.wavelength_unit, 'A')
37        self.assertEqual(self.data.source.wavelength, 6.0)
38
39        self.assertEqual(self.data.detector[0].distance_unit, 'mm')
40        self.assertEqual(self.data.detector[0].distance, 1000.0)
41
42        self.assertEqual(self.data.sample.transmission, 0.5667)
43
44        self.assertEqual(self.data.detector[0].beam_center_unit, 'mm')
45        center_x = 114.58*5.08
46        center_y = 64.22*5.08
47        self.assertEqual(self.data.detector[0].beam_center.x, center_x)
48        self.assertEqual(self.data.detector[0].beam_center.y, center_y)
49
50        self.assertEqual(self.data.y_unit, '1/cm')
51        self.assertEqual(self.data.x[0], 0.002618)
52        self.assertEqual(self.data.x[1], 0.007854)
53        self.assertEqual(self.data.x[2], 0.01309)
54        self.assertEqual(self.data.x[126], 0.5828)
55
56        self.assertEqual(self.data.y[0], 0.02198)
57        self.assertEqual(self.data.y[1], 0.02201)
58        self.assertEqual(self.data.y[2], 0.02695)
59        self.assertEqual(self.data.y[126], 0.2958)
60
61        self.assertEqual(self.data.dy[0], 0.002704)
62        self.assertEqual(self.data.dy[1], 0.001643)
63        self.assertEqual(self.data.dy[2], 0.002452)
64        self.assertEqual(self.data.dy[126], 1)
65
66    def test_checkdata2(self):
67        self.assertEqual(self.data.dy[126], 1)
68
69    def test_generic_loader(self):
70        # the generic loader should work as well
71        data = Loader().load("jan08002.ABS")
72        self.assertEqual(data.meta_data['loader'], "IGOR 1D")
73
74
75class hfir_reader(unittest.TestCase):
76
77    def setUp(self):
78        reader = HFIRReader()
79        self.data = reader.read("S2-30dq.d1d")
80
81    def test_hfir_checkdata(self):
82        """
83            Check the data content to see whether
84            it matches the specific file we loaded.
85        """
86        self.assertEqual(self.data.filename, "S2-30dq.d1d")
87        # THIS FILE FORMAT IS CURRENTLY READ BY THE ASCII READER
88        self.assertEqual(self.data.meta_data['loader'], "HFIR 1D")
89        self.assertEqual(len(self.data.x), 134)
90        self.assertEqual(len(self.data.y), 134)
91        #          Q           I               dI          dQ
92        # Point 1: 0.003014    0.003010        0.000315    0.008249
93        self.assertEqual(self.data.x[1], 0.003014)
94        self.assertEqual(self.data.y[1], 0.003010)
95        self.assertEqual(self.data.dy[1], 0.000315)
96        self.assertEqual(self.data.dx[1], 0.008249)
97
98    def test_generic_loader(self):
99        # the generic loader should work as well
100        data = Loader().load("S2-30dq.d1d")
101        self.assertEqual(data.meta_data['loader'], "HFIR 1D")
102
103class DanseReaderTests(unittest.TestCase):
104
105    def setUp(self):
106        reader = DANSEReader()
107        self.data = reader.read("MP_New.sans")
108
109    def test_checkdata(self):
110        """
111            Check the data content to see whether
112            it matches the specific file we loaded.
113            Check the units too to see whether the
114            Data1D defaults changed. Otherwise the
115            tests won't pass
116        """
117        self.assertEqual(self.data.filename, "MP_New.sans")
118        self.assertEqual(self.data.meta_data['loader'], "DANSE")
119
120        self.assertEqual(self.data.source.wavelength_unit, 'A')
121        self.assertEqual(self.data.source.wavelength, 7.5)
122
123        self.assertEqual(self.data.detector[0].distance_unit, 'mm')
124        self.assertAlmostEqual(self.data.detector[0].distance, 5414.99, 3)
125
126        self.assertEqual(self.data.detector[0].beam_center_unit, 'mm')
127        center_x = 68.74*5.0
128        center_y = 64.77*5.0
129        self.assertEqual(self.data.detector[0].beam_center.x, center_x)
130        self.assertEqual(self.data.detector[0].beam_center.y, center_y)
131
132        self.assertEqual(self.data.I_unit, '1/cm')
133        self.assertEqual(self.data.data[0], 1.57831)
134        self.assertEqual(self.data.data[1], 2.70983)
135        self.assertEqual(self.data.data[2], 3.83422)
136
137        self.assertEqual(self.data.err_data[0], 1.37607)
138        self.assertEqual(self.data.err_data[1], 1.77569)
139        self.assertEqual(self.data.err_data[2], 2.06313)
140
141    def test_generic_loader(self):
142        # the generic loader should work as well
143        data = Loader().load("MP_New.sans")
144        self.assertEqual(data.meta_data['loader'], "DANSE")
145
146
147class cansas_reader(unittest.TestCase):
148
149    def setUp(self):
150        reader = CANSASReader()
151        data = reader.read("cansas1d.xml")
152        self.data = data[0]
153
154    def test_generic_loader(self):
155        # the generic loader should work as well
156        data = Loader().load("cansas1d.xml")
157        self.assertEqual(data[0].meta_data['loader'], "CanSAS XML 1D")
158
159    def test_cansas_checkdata(self):
160        self.assertEqual(self.data.filename, "cansas1d.xml")
161        self._checkdata()
162
163    def _checkdata(self):
164        """
165            Check the data content to see whether
166            it matches the specific file we loaded.
167            Check the units too to see whether the
168            Data1D defaults changed. Otherwise the
169            tests won't pass
170        """
171        self.assertEqual(self.data.run[0], "1234")
172        self.assertEqual(self.data.meta_data['loader'], "CanSAS XML 1D")
173
174        # Data
175        self.assertEqual(len(self.data.x), 2)
176        self.assertEqual(self.data.x_unit, '1/A')
177        self.assertEqual(self.data.y_unit, '1/cm')
178        self.assertAlmostEqual(self.data.x[0], 0.02, 6)
179        self.assertAlmostEqual(self.data.y[0], 1000, 6)
180        self.assertAlmostEqual(self.data.dx[0], 0.01, 6)
181        self.assertAlmostEqual(self.data.dy[0], 3, 6)
182        self.assertAlmostEqual(self.data.x[1], 0.03, 6)
183        self.assertAlmostEqual(self.data.y[1], 1001.0)
184        self.assertAlmostEqual(self.data.dx[1], 0.02, 6)
185        self.assertAlmostEqual(self.data.dy[1], 4, 6)
186        self.assertEqual(self.data.run_name['1234'], 'run name')
187        self.assertEqual(self.data.title, "Test title")
188
189        # Sample info
190        self.assertEqual(self.data.sample.ID, "SI600-new-long")
191        self.assertEqual(self.data.sample.name, "my sample")
192        self.assertEqual(self.data.sample.thickness_unit, 'mm')
193        self.assertAlmostEqual(self.data.sample.thickness, 1.03)
194
195        self.assertAlmostEqual(self.data.sample.transmission, 0.327)
196
197        self.assertEqual(self.data.sample.temperature_unit, 'C')
198        self.assertEqual(self.data.sample.temperature, 0)
199
200        self.assertEqual(self.data.sample.position_unit, 'mm')
201        self.assertEqual(self.data.sample.position.x, 10)
202        self.assertEqual(self.data.sample.position.y, 0)
203
204        self.assertEqual(self.data.sample.orientation_unit, 'degree')
205        self.assertAlmostEqual(self.data.sample.orientation.x, 22.5, 6)
206        self.assertAlmostEqual(self.data.sample.orientation.y, 0.02, 6)
207
208        self.assertEqual(self.data.sample.details[0], "http://chemtools.chem.soton.ac.uk/projects/blog/blogs.php/bit_id/2720")
209        self.assertEqual(self.data.sample.details[1], "Some text here")
210
211        # Instrument info
212        self.assertEqual(self.data.instrument, "canSAS instrument")
213
214        # Source
215        self.assertEqual(self.data.source.radiation, "neutron")
216
217        self.assertEqual(self.data.source.beam_size_unit, "mm")
218        self.assertEqual(self.data.source.beam_size_name, "bm")
219        self.assertEqual(self.data.source.beam_size.x, 12)
220        self.assertEqual(self.data.source.beam_size.y, 13)
221
222        self.assertEqual(self.data.source.beam_shape, "disc")
223
224        self.assertEqual(self.data.source.wavelength_unit, "A")
225        self.assertEqual(self.data.source.wavelength, 6)
226
227        self.assertEqual(self.data.source.wavelength_max_unit, "nm")
228        self.assertAlmostEqual(self.data.source.wavelength_max, 1.0)
229        self.assertEqual(self.data.source.wavelength_min_unit, "nm")
230        self.assertAlmostEqual(self.data.source.wavelength_min, 0.22)
231        self.assertEqual(self.data.source.wavelength_spread_unit, "percent")
232        self.assertEqual(self.data.source.wavelength_spread, 14.3)
233
234        # Collimation
235        _found1 = False
236        _found2 = False
237        self.assertEqual(self.data.collimation[0].length, 123.)
238        self.assertEqual(self.data.collimation[0].name, 'test coll name')
239
240        for item in self.data.collimation[0].aperture:
241            self.assertEqual(item.size_unit,'mm')
242            self.assertEqual(item.distance_unit,'mm')
243
244            if item.size.x == 50 \
245                and item.distance == 11000.0 \
246                and item.name == 'source' \
247                and item.type == 'radius':
248                _found1 = True
249            elif item.size.x == 1.0 \
250                and item.name == 'sample' \
251                and item.type == 'radius':
252                _found2 = True
253
254        if _found1 == False or _found2 == False:
255            raise RuntimeError, "Could not find all data %s %s" % (_found1, _found2)
256
257        # Detector
258        self.assertEqual(self.data.detector[0].name, "fictional hybrid")
259        self.assertEqual(self.data.detector[0].distance_unit, "mm")
260        self.assertEqual(self.data.detector[0].distance, 4150)
261
262        self.assertEqual(self.data.detector[0].orientation_unit, "degree")
263        self.assertAlmostEqual(self.data.detector[0].orientation.x, 1.0, 6)
264        self.assertEqual(self.data.detector[0].orientation.y, 0.0)
265        self.assertEqual(self.data.detector[0].orientation.z, 0.0)
266
267        self.assertEqual(self.data.detector[0].offset_unit, "m")
268        self.assertEqual(self.data.detector[0].offset.x, .001)
269        self.assertEqual(self.data.detector[0].offset.y, .002)
270        self.assertEqual(self.data.detector[0].offset.z, None)
271
272        self.assertEqual(self.data.detector[0].beam_center_unit, "mm")
273        self.assertEqual(self.data.detector[0].beam_center.x, 322.64)
274        self.assertEqual(self.data.detector[0].beam_center.y, 327.68)
275        self.assertEqual(self.data.detector[0].beam_center.z, None)
276
277        self.assertEqual(self.data.detector[0].pixel_size_unit, "mm")
278        self.assertEqual(self.data.detector[0].pixel_size.x, 5)
279        self.assertEqual(self.data.detector[0].pixel_size.y, 5)
280        self.assertEqual(self.data.detector[0].pixel_size.z, None)
281
282        # Process
283        _found_term1 = False
284        _found_term2 = False
285        for item in self.data.process:
286            self.assertTrue(item.name in ['NCNR-IGOR', 'spol'])
287            self.assertTrue(item.date in ['04-Sep-2007 18:35:02',
288                                          '03-SEP-2006 11:42:47'])
289            print(item.term)
290            for t in item.term:
291                if (t['name'] == "ABS:DSTAND"
292                    and t['unit'] == 'mm'
293                    and float(t['value']) == 1.0):
294                    _found_term2 = True
295                elif (t['name'] == "radialstep"
296                      and t['unit'] == 'mm'
297                      and float(t['value']) == 10.0):
298                    _found_term1 = True
299
300        if _found_term1 == False or _found_term2 == False:
301            raise RuntimeError, "Could not find all process terms %s %s" % (_found_term1, _found_term2)
302
303    def test_writer(self):
304        r = CANSASReader()
305
306        filename = "write_test.xml"
307        r.write(filename, self.data)
308        data = Loader().load(filename)
309        self.data = data[0]
310        self.assertEqual(self.data.filename, filename)
311        self._checkdata()
312        if os.path.isfile(filename):
313            os.remove(filename)
314
315    def test_units(self):
316        """
317            Check units.
318            Note that not all units are available.
319        """
320        filename = "cansas1d_units.xml"
321        data = CANSASReader().read(filename)
322        self.data = data[0]
323        self.assertEqual(self.data.filename, filename)
324        self._checkdata()
325
326    def test_badunits(self):
327        """
328            Check units.
329            Note that not all units are available.
330        """
331        filename = "cansas1d_badunits.xml"
332        data = CANSASReader().read(filename)
333        self.data = data[0]
334        self.assertEqual(self.data.filename, filename)
335        # The followed should not have been loaded
336        self.assertAlmostEqual(self.data.sample.thickness, 0.00103)
337        # This one should
338        self.assertAlmostEqual(self.data.sample.transmission, 0.327)
339
340        self.assertEqual(self.data.meta_data['loader'], "CanSAS XML 1D")
341        print(self.data.errors)
342        self.assertEqual(len(self.data.errors), 1)
343
344    def test_slits(self):
345        """
346            Check slit data
347        """
348        filename = "cansas1d_slit.xml"
349        data = CANSASReader().read(filename)
350        self.data = data[0]
351        self.assertEqual(self.data.filename, filename)
352        self.assertEqual(self.data.run[0], "1234")
353
354        # Data
355        self.assertEqual(len(self.data.x), 2)
356        self.assertEqual(self.data.x_unit, '1/A')
357        self.assertEqual(self.data.y_unit, '1/cm')
358        self.assertEqual(self.data.x[0], 0.02)
359        self.assertEqual(self.data.y[0], 1000)
360        self.assertEqual(self.data.dxl[0], 0.005)
361        self.assertEqual(self.data.dxw[0], 0.001)
362        self.assertEqual(self.data.dy[0], 3)
363        self.assertEqual(self.data.x[1], 0.03)
364        self.assertAlmostEquals(self.data.y[1], 1001.0)
365        self.assertEqual(self.data.dx, None)
366        self.assertEqual(self.data.dxl[1], 0.005)
367        self.assertEqual(self.data.dxw[1], 0.001)
368        self.assertEqual(self.data.dy[1], 4)
369        self.assertEqual(self.data.run_name['1234'], 'run name')
370        self.assertEqual(self.data.title, "Test title")
371
372
373if __name__ == '__main__':
374    unittest.main()
Note: See TracBrowser for help on using the repository browser.