source: sasview/test/sasdataloader/test/utest_abs_reader.py @ 371b9e2

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 371b9e2 was 371b9e2, checked in by krzywon, 7 years ago

Add support for a fourth reader exception and start the removal of IgorReader? support.

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