source: sasview/sansdataloader/test/utest_abs_reader.py @ 96d2ab32

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 96d2ab32 was 96d2ab32, checked in by Mathieu Doucet <doucetm@…>, 13 years ago

Re #5 fixing reader test

  • Property mode set to 100644
File size: 15.5 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'], "ASCII")
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        from sans.dataloader.readers.danse_reader import Reader as r
125        self.data = r().read("MP_New.sans")
126    def test_danse_checkdata(self):
127        """
128            Check the data content to see whether
129            it matches the specific file we loaded.
130            Check the units too to see whether the
131            Data1D defaults changed. Otherwise the
132            tests won't pass
133        """
134        self.assertEqual(self.data.filename, "MP_New.sans")
135        self.assertEqual(self.data.meta_data['loader'], "DANSE")
136       
137        self.assertEqual(self.data.source.wavelength_unit, 'A')
138        self.assertEqual(self.data.source.wavelength, 7.5)
139       
140        self.assertEqual(self.data.detector[0].distance_unit, 'mm')
141        self.assertAlmostEqual(self.data.detector[0].distance, 5414.99, 3)
142       
143        self.assertEqual(self.data.detector[0].beam_center_unit, 'mm')
144        center_x = 68.74*5.0
145        center_y = 64.77*5.0
146        self.assertEqual(self.data.detector[0].beam_center.x, center_x)
147        self.assertEqual(self.data.detector[0].beam_center.y, center_y)
148       
149        self.assertEqual(self.data.I_unit, '1/cm')
150        self.assertEqual(self.data.data[0], 1.57831)
151        self.assertEqual(self.data.data[1], 2.70983)
152        self.assertEqual(self.data.data[2], 3.83422)
153
154        self.assertEqual(self.data.err_data[0], 1.37607)
155        self.assertEqual(self.data.err_data[1], 1.77569)
156        self.assertEqual(self.data.err_data[2], 2.06313)
157
158 
159class cansas_reader(unittest.TestCase):
160   
161    def setUp(self):
162        self.data = Loader().load("cansas1d.xml")
163 
164    def test_cansas_checkdata(self):
165        self.assertEqual(self.data.filename, "cansas1d.xml")
166        self._checkdata()
167       
168    def _checkdata(self):
169        """
170            Check the data content to see whether
171            it matches the specific file we loaded.
172            Check the units too to see whether the
173            Data1D defaults changed. Otherwise the
174            tests won't pass
175        """
176       
177        self.assertEqual(self.data.run[0], "1234")
178        self.assertEqual(self.data.meta_data['loader'], "CanSAS 1D")
179        self.assertEqual(len(self.data.errors), 0)
180       
181        # Data
182        self.assertEqual(len(self.data.x), 2)
183        self.assertEqual(self.data.x_unit, '1/A')
184        self.assertEqual(self.data.y_unit, '1/cm')
185        self.assertAlmostEqual(self.data.x[0], 0.02, 6)
186        self.assertAlmostEqual(self.data.y[0], 1000, 6)
187        self.assertAlmostEqual(self.data.dx[0], 0.01, 6)
188        self.assertAlmostEqual(self.data.dy[0], 3, 6)
189        self.assertAlmostEqual(self.data.x[1], 0.03, 6)
190        self.assertAlmostEqual(self.data.y[1], 1001.0)
191        self.assertAlmostEqual(self.data.dx[1], 0.02, 6)
192        self.assertAlmostEqual(self.data.dy[1], 4, 6)
193        self.assertEqual(self.data.run_name['1234'], 'run name')
194        self.assertEqual(self.data.title, "Test title")
195       
196        # Sample info
197        self.assertEqual(self.data.sample.ID, "SI600-new-long")
198        self.assertEqual(self.data.sample.name, "my sample")
199        self.assertEqual(self.data.sample.thickness_unit, 'mm')
200        self.assertEqual(self.data.sample.thickness, 1.03)
201       
202        self.assertEqual(self.data.sample.transmission, 0.327)
203       
204        self.assertEqual(self.data.sample.temperature_unit, 'C')
205        self.assertEqual(self.data.sample.temperature, 0)
206
207        self.assertEqual(self.data.sample.position_unit, 'mm')
208        self.assertEqual(self.data.sample.position.x, 10)
209        self.assertEqual(self.data.sample.position.y, 0)
210
211        self.assertEqual(self.data.sample.orientation_unit, 'degree')
212        self.assertEqual(self.data.sample.orientation.x, 22.5)
213        self.assertEqual(self.data.sample.orientation.y, 0.02)
214
215        self.assertEqual(self.data.sample.details[0], "http://chemtools.chem.soton.ac.uk/projects/blog/blogs.php/bit_id/2720") 
216        self.assertEqual(self.data.sample.details[1], "Some text here") 
217       
218        # Instrument info
219        self.assertEqual(self.data.instrument, "canSAS instrument")
220       
221        # Source
222        self.assertEqual(self.data.source.radiation, "neutron")
223       
224        self.assertEqual(self.data.source.beam_size_unit, "mm")
225        self.assertEqual(self.data.source.beam_size_name, "bm")
226        self.assertEqual(self.data.source.beam_size.x, 12)
227        self.assertEqual(self.data.source.beam_size.y, 13)
228       
229        self.assertEqual(self.data.source.beam_shape, "disc")
230       
231        self.assertEqual(self.data.source.wavelength_unit, "A")
232        self.assertEqual(self.data.source.wavelength, 6)
233       
234        self.assertEqual(self.data.source.wavelength_max_unit, "nm")
235        self.assertEqual(self.data.source.wavelength_max, 1.0)
236        self.assertEqual(self.data.source.wavelength_min_unit, "nm")
237        self.assertEqual(self.data.source.wavelength_min, 0.22)
238        self.assertEqual(self.data.source.wavelength_spread_unit, "percent")
239        self.assertEqual(self.data.source.wavelength_spread, 14.3)
240       
241        # Collimation
242        _found1 = False
243        _found2 = False
244        self.assertEqual(self.data.collimation[0].length, 123.)
245        self.assertEqual(self.data.collimation[0].name, 'test coll name')
246       
247        for item in self.data.collimation[0].aperture:
248            self.assertEqual(item.size_unit,'mm')
249            self.assertEqual(item.distance_unit,'mm')
250           
251            if item.size.x==50 \
252                and item.distance==11000.0 \
253                and item.name=='source' \
254                and item.type=='radius':
255                _found1 = True
256            elif item.size.x==1.0 \
257                and item.name=='sample' \
258                and item.type=='radius':
259                _found2 = True
260               
261        if _found1==False or _found2==False:
262            print item.distance
263            raise RuntimeError, "Could not find all data %s %s" % (_found1, _found2) 
264           
265        # Detector
266        self.assertEqual(self.data.detector[0].name, "fictional hybrid")
267        self.assertEqual(self.data.detector[0].distance_unit, "mm")
268        self.assertEqual(self.data.detector[0].distance, 4150)
269       
270        self.assertEqual(self.data.detector[0].orientation_unit, "degree")
271        self.assertEqual(self.data.detector[0].orientation.x, 1.0)
272        self.assertEqual(self.data.detector[0].orientation.y, 0.0)
273        self.assertEqual(self.data.detector[0].orientation.z, 0.0)
274       
275        self.assertEqual(self.data.detector[0].offset_unit, "m")
276        self.assertEqual(self.data.detector[0].offset.x, .001)
277        self.assertEqual(self.data.detector[0].offset.y, .002)
278        self.assertEqual(self.data.detector[0].offset.z, None)
279       
280        self.assertEqual(self.data.detector[0].beam_center_unit, "mm")
281        self.assertEqual(self.data.detector[0].beam_center.x, 322.64)
282        self.assertEqual(self.data.detector[0].beam_center.y, 327.68)
283        self.assertEqual(self.data.detector[0].beam_center.z, None)
284       
285        self.assertEqual(self.data.detector[0].pixel_size_unit, "mm")
286        self.assertEqual(self.data.detector[0].pixel_size.x, 5)
287        self.assertEqual(self.data.detector[0].pixel_size.y, 5)
288        self.assertEqual(self.data.detector[0].pixel_size.z, None)
289       
290        # Process
291        _found_term1 = False
292        _found_term2 = False
293        for item in self.data.process:
294            self.assertTrue(item.name in ['NCNR-IGOR', 'spol'])
295            self.assertTrue(item.date in ['04-Sep-2007 18:35:02',
296                                          '03-SEP-2006 11:42:47'])
297            for t in item.term:
298                if t['name']=="ABS:DSTAND" \
299                    and t['unit']=='mm' \
300                    and float(t['value'])==1.0:
301                    _found_term2 = True
302                elif t['name']=="radialstep" \
303                    and t['unit']=='mm' \
304                    and float(t['value'])==10.0:
305                    _found_term1 = True
306                   
307        if _found_term1==False or _found_term2==False:
308            raise RuntimeError, "Could not find all process terms %s %s" % (_found_term1, _found_term2) 
309           
310       
311       
312       
313    def test_writer(self):
314        from sans.dataloader.readers.cansas_reader import Reader
315        r = Reader()
316        x = numpy.ones(5)
317        y = numpy.ones(5)
318        dy = numpy.ones(5)
319       
320        filename = "write_test.xml"
321        r.write(filename, self.data)
322        self.data = Loader().load(filename)
323        self.assertEqual(self.data.filename, filename)
324        self._checkdata()
325       
326    def test_units(self):
327        """
328            Check units.
329            Note that not all units are available.
330        """
331        filename = "cansas1d_units.xml"
332        self.data = Loader().load(filename)
333        self.assertEqual(self.data.filename, filename)
334        self._checkdata()
335       
336    def test_badunits(self):
337        """
338            Check units.
339            Note that not all units are available.
340        """
341        filename = "cansas1d_badunits.xml"
342        self.data = Loader().load(filename)
343        self.assertEqual(self.data.filename, filename)
344        # The followed should not have been loaded
345        self.assertEqual(self.data.sample.thickness, None)
346        # This one should
347        self.assertEqual(self.data.sample.transmission, 0.327)
348       
349        self.assertEqual(self.data.meta_data['loader'], "CanSAS 1D")
350        self.assertEqual(len(self.data.errors), 1)
351       
352       
353    def test_slits(self):
354        """
355            Check slit data
356        """
357        filename = "cansas1d_slit.xml"
358        self.data = Loader().load(filename)
359        self.assertEqual(self.data.filename, filename)
360        self.assertEqual(self.data.run[0], "1234")
361       
362        # Data
363        self.assertEqual(len(self.data.x), 2)
364        self.assertEqual(self.data.x_unit, '1/A')
365        self.assertEqual(self.data.y_unit, '1/cm')
366        self.assertEqual(self.data.x[0], 0.02)
367        self.assertEqual(self.data.y[0], 1000)
368        self.assertEqual(self.data.dxl[0], 0.005)
369        self.assertEqual(self.data.dxw[0], 0.001)
370        self.assertEqual(self.data.dy[0], 3)
371        self.assertEqual(self.data.x[1], 0.03)
372        self.assertAlmostEquals(self.data.y[1], 1001.0)
373        self.assertEqual(self.data.dx[1], 0.0)
374        self.assertEqual(self.data.dxl[1], 0.005)
375        self.assertEqual(self.data.dxw[1], 0.001)
376        self.assertEqual(self.data.dy[1], 4)
377        self.assertEqual(self.data.run_name['1234'], 'run name')
378        self.assertEqual(self.data.title, "Test title")
379
380           
381
382if __name__ == '__main__':
383    unittest.main(testRunner=unittest.TextTestRunner(verbosity=2))
Note: See TracBrowser for help on using the repository browser.