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()
|