File: utest_corfunc.py

package info (click to toggle)
sasview 6.1.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 152,244 kB
  • sloc: python: 58,639; cpp: 6,412; javascript: 173; makefile: 167; sh: 67; xml: 40
file content (83 lines) | stat: -rw-r--r-- 2,537 bytes parent folder | download
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
"""
Unit Tests for CorfuncCalculator class
"""


import os.path
import unittest

import numpy as np

from sasdata.dataloader.data_info import Data1D

from sas.sascalc.corfunc.calculation_data import SettableExtrapolationParameters
from sas.sascalc.corfunc.corfunc_calculator import CorfuncCalculator, extract_lamellar_parameters


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


class TestCalculator(unittest.TestCase):

    def setUp(self):
        self.data = load_data()

        self.parameters = SettableExtrapolationParameters(0.013, 0.15, 0.24)

        self.expected_results = [np.loadtxt(find(filename+"_out.txt")).T[2]
                                 for filename in ("gamma1", "gamma3", "idf")]

    def test_extrapolation(self):

        calculator = CorfuncCalculator(self.data, self.parameters)
        # calculator._background.data = 0.3
        # calculator._background.allow_fit = False

        calculator.run()

        self.assertAlmostEqual(calculator.guinier.A, 4.18970, places=1)
        self.assertAlmostEqual(calculator.guinier.B, -25469.9, delta=2000)
        self.assertAlmostEqual(calculator.porod.K, 4.44660e-5, places=10)

        # Ensure the extraplation tends to the background value
        self.assertIsNotNone(calculator._extrapolation_data)
        if calculator._extrapolation_data is not None:
            self.assertAlmostEqual(calculator._extrapolation_data.y[-1], calculator.background)


    def test_transform(self):

        calculator = CorfuncCalculator(self.data, self.parameters)
        # calculator._background.data = 0.3
        # calculator._background.allow_fit = False

        calculator.run()

        self.assertIsNotNone(calculator.transformed)

        if calculator.transformed is not None:

            self.assertIsNotNone(calculator.transformed.gamma_1)
            self.assertAlmostEqual(calculator.transformed.gamma_1.y[0], 1)
            self.assertAlmostEqual(calculator.transformed.gamma_1.y[-1], 0, 5)

    def test_extract(self):
        params = extract_lamellar_parameters(
                    self.data,
                    self.parameters.point_1,
                    self.parameters.point_2,
                    self.parameters.point_3)

        self.assertLess(abs(params.long_period-75), 2.5) # L_p ~= 75


def load_data(filename="98929.txt"):
    data = np.loadtxt(find(filename), dtype=np.float64)
    q = data[:,0]
    iq = data[:,1]
    return Data1D(x=q, y=iq)


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