source: sasview/test/sansdataloader/test/utest_abs_reader.py @ eda8972

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.1.1release-4.1.2release-4.2.2release_4.0.1ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since eda8972 was eda8972, checked in by Jeff Krzywon <jeffery.krzywon@…>, 10 years ago

I will finalize this on Monday.

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