1 | """ |
---|
2 | Implementation of the use-case from a usage perspective. |
---|
3 | TODO: check the return values to perform actual unit testing. |
---|
4 | """ |
---|
5 | import unittest |
---|
6 | from DataLoader.loader import Loader |
---|
7 | from sans.invariant import invariant |
---|
8 | |
---|
9 | |
---|
10 | class TestInvPolySphere(unittest.TestCase): |
---|
11 | """ |
---|
12 | Test unsmeared data for invariant computation |
---|
13 | """ |
---|
14 | def setUp(self): |
---|
15 | self.data = Loader().load("PolySpheres.txt") |
---|
16 | |
---|
17 | def test_use_case_1(self): |
---|
18 | """ |
---|
19 | Invariant without extrapolation |
---|
20 | """ |
---|
21 | # Create invariant object. Background and scale left as defaults. |
---|
22 | inv = invariant.InvariantCalculator(data=self.data) |
---|
23 | |
---|
24 | # We have to be able to tell the InvariantCalculator whether we want the |
---|
25 | # extrapolation or not. By default, when the user doesn't specify, we |
---|
26 | # should compute Q* without extrapolation. That's what should be done in __init__. |
---|
27 | |
---|
28 | # We call get_qstar() with no argument, which signifies that we do NOT |
---|
29 | # want extrapolation. |
---|
30 | qstar = inv.get_qstar() |
---|
31 | |
---|
32 | # The volume fraction and surface use Q*. That means that the following |
---|
33 | # methods should check that Q* has been computed. If not, it should |
---|
34 | # compute it by calling get_qstare(), leaving the parameters as default. |
---|
35 | volume_fraction = inv.get_volume_fraction(contrast=1.0) |
---|
36 | surface = inv.get_surface(contrast=1.0, porod_const=1.0) |
---|
37 | |
---|
38 | def test_use_case_2(self): |
---|
39 | """ |
---|
40 | Invariant without extrapolation. Invariant, volume fraction and surface |
---|
41 | are given with errors. |
---|
42 | """ |
---|
43 | # Create invariant object. Background and scale left as defaults. |
---|
44 | inv = invariant.InvariantCalculator(data=self.data) |
---|
45 | |
---|
46 | # Get the invariant with errors |
---|
47 | qstar, qstar_err = inv.get_qstar_with_error() |
---|
48 | v, dv = inv.get_volume_fraction_with_error(contrast=1.0) |
---|
49 | s, ds = inv.get_surface_with_error(contrast=1.0, porod_const=1.0) |
---|
50 | |
---|
51 | def test_use_case_3(self): |
---|
52 | """ |
---|
53 | Invariant with low-Q extrapolation |
---|
54 | """ |
---|
55 | # Create invariant object. Background and scale left as defaults. |
---|
56 | inv = invariant.InvariantCalculator(data=self.data) |
---|
57 | |
---|
58 | # Set the extrapolation parameters for the low-Q range |
---|
59 | |
---|
60 | # The npts parameter should have a good default. |
---|
61 | # The range parameter should be 'high' or 'low' |
---|
62 | # The function parameter should default to None. If it is None, |
---|
63 | # the method should pick a good default (Guinier at low-Q and 1/q^4 at high-Q). |
---|
64 | # The method should also check for consistency of the extrapolate and function |
---|
65 | # parameters. For instance, you might not want to allow 'high' and 'guinier'. |
---|
66 | # The power parameter (not shown below) should default to 4. |
---|
67 | inv.set_extraplotation(range='low', npts=5, function='guinier') |
---|
68 | |
---|
69 | # The version of the call without error |
---|
70 | # At this point, we could still compute Q* without extrapolation by calling |
---|
71 | # get_qstar with arguments, or with extrapolate=None. |
---|
72 | qstar = inv.get_qstar(extrapolate='low') |
---|
73 | |
---|
74 | # The version of the call with error |
---|
75 | qstar, qstar_err = inv.get_qstar_with_error(extrapolate='low') |
---|
76 | |
---|
77 | # Get the volume fraction and surface |
---|
78 | v, dv = inv.get_volume_fraction_with_error(contrast=1.0) |
---|
79 | s, ds = inv.get_surface_with_error(contrast=1.0, porod_const=1.0) |
---|
80 | |
---|
81 | def test_use_case_4(self): |
---|
82 | """ |
---|
83 | Invariant with high-Q extrapolation |
---|
84 | """ |
---|
85 | # Create invariant object. Background and scale left as defaults. |
---|
86 | inv = invariant.InvariantCalculator(data=self.data) |
---|
87 | |
---|
88 | |
---|
89 | # Set the extrapolation parameters for the high-Q range |
---|
90 | |
---|
91 | # The npts parameter should have a good default. |
---|
92 | # The range parameter should be 'high' or 'low'. Those should be stored separately. |
---|
93 | # The function parameter should default to None. If it is None, |
---|
94 | # the method should pick a good default (Guinier at low-Q and 1/q^4 at high-Q). |
---|
95 | # The method should also check for consistency of the extrapolate and function |
---|
96 | # parameters. For instance, you might not want to allow 'high' and 'guinier'. |
---|
97 | # The power parameter should default to 4. |
---|
98 | inv.set_extraplotation(range='high', npts=5, function='power_law', power=4) |
---|
99 | |
---|
100 | |
---|
101 | # The version of the call without error |
---|
102 | # The function parameter defaults to None, then is picked to be 'power_law' for extrapolate='high' |
---|
103 | qstar = inv.get_qstar(extrapolate='high') |
---|
104 | |
---|
105 | # The version of the call with error |
---|
106 | qstar, qstar_err = inv.get_qstar_with_error(extrapolate='high') |
---|
107 | |
---|
108 | # Get the volume fraction and surface |
---|
109 | v, dv = inv.get_volume_fraction_with_error(contrast=1.0) |
---|
110 | s, ds = inv.get_surface_with_error(contrast=1.0, porod_const=1.0) |
---|
111 | |
---|
112 | def test_use_case_5(self): |
---|
113 | """ |
---|
114 | Invariant with both high- and low-Q extrapolation |
---|
115 | """ |
---|
116 | # Create invariant object. Background and scale left as defaults. |
---|
117 | inv = invariant.InvariantCalculator(data=self.data) |
---|
118 | |
---|
119 | # Set the extrapolation parameters for the low- and high-Q ranges |
---|
120 | inv.set_extraplotation(range='low', npts=5, function='guinier') |
---|
121 | inv.set_extraplotation(range='high', npts=5, function='power_law', power=4) |
---|
122 | |
---|
123 | # The version of the call without error |
---|
124 | # The function parameter defaults to None, then is picked to be 'power_law' for extrapolate='high' |
---|
125 | qstar = inv.get_qstar(extrapolate='both') |
---|
126 | |
---|
127 | # The version of the call with error |
---|
128 | qstar, qstar_err = inv.get_qstar_with_error(extrapolate='both') |
---|
129 | |
---|
130 | # Get the volume fraction and surface |
---|
131 | v, dv = inv.get_volume_fraction_with_error(contrast=1.0) |
---|
132 | s, ds = inv.get_surface_with_error(contrast=1.0, porod_const=1.0) |
---|
133 | |
---|
134 | |
---|