1 | """ |
---|
2 | Unit tests for fitting module |
---|
3 | """ |
---|
4 | import unittest |
---|
5 | from sans.guitools.plottables import Theory1D |
---|
6 | from sans.guitools.plottables import Data1D |
---|
7 | from sans.fit.ScipyFitting import Parameter |
---|
8 | import math |
---|
9 | class testFitModule(unittest.TestCase): |
---|
10 | |
---|
11 | def test2models2dataonconstraint(self): |
---|
12 | """ test fitting for two set of data and one model""" |
---|
13 | from sans.fit.Loader import Load |
---|
14 | load= Load() |
---|
15 | #Load the first set of data |
---|
16 | load.set_filename("testdata1.txt") |
---|
17 | load.set_values() |
---|
18 | data1 = Data1D(x=[], y=[],dx=None, dy=None) |
---|
19 | load.load_data(data1) |
---|
20 | |
---|
21 | #Load the second set of data |
---|
22 | load.set_filename("testdata2.txt") |
---|
23 | load.set_values() |
---|
24 | data2 = Data1D(x=[], y=[],dx=None, dy=None) |
---|
25 | load.load_data(data2) |
---|
26 | |
---|
27 | #Importing the Fit module |
---|
28 | from sans.fit.Fitting import Fit |
---|
29 | fitter= Fit() |
---|
30 | # Receives the type of model for the fitting |
---|
31 | from sans.guitools.LineModel import LineModel |
---|
32 | model1 = LineModel() |
---|
33 | model2 = LineModel() |
---|
34 | #set engine for scipy |
---|
35 | fitter.fit_engine('park') |
---|
36 | engine = fitter.returnEngine() |
---|
37 | #Do the fit |
---|
38 | engine.set_param( model1,"M1", {'A':2.5,'B':4}) |
---|
39 | engine.set_model(model1,1) |
---|
40 | engine.set_data(data1,1) |
---|
41 | |
---|
42 | import numpy |
---|
43 | #print engine.fit({'A':2,'B':1},None,None) |
---|
44 | #engine.remove_data(2,data2) |
---|
45 | #engine.remove_model(2) |
---|
46 | |
---|
47 | engine.set_param( model2,"M2", {'A':2.5,'B':4}) |
---|
48 | engine.set_model(model2,2) |
---|
49 | engine.set_data(data2,2) |
---|
50 | print engine.fit({'A':2,'B':1},None,None) |
---|
51 | |
---|
52 | if True: |
---|
53 | import pylab |
---|
54 | x1 = engine.problem[0].data.x |
---|
55 | x2 = engine.problem[1].data.x |
---|
56 | y1 = engine.problem[0].data.y |
---|
57 | y2 = engine.problem[1].data.y |
---|
58 | fx1 = engine.problem[0].data.fx |
---|
59 | fx2 = engine.problem[1].data.fx |
---|
60 | pylab.plot(x1,y1,'xb',x1,fx1,'-b',x2,y2,'xr',x2,fx2,'-r') |
---|
61 | pylab.show() |
---|
62 | if False: |
---|
63 | print "current" |
---|
64 | print engine.problem.chisq |
---|
65 | print engine.problem.residuals |
---|
66 | print "M1.y",engine.problem[0].data.y |
---|
67 | print "M1.fx",engine.problem[0].data.fx |
---|
68 | print "M1 delta",numpy.asarray(engine.problem[0].data.y)-engine.problem[0].data.fx |
---|
69 | print "M2.y",engine.problem[0].data.y |
---|
70 | print "M2.fx",engine.problem[0].data.fx |
---|
71 | print "M2 delta",numpy.asarray(engine.problem[1].data.y)-engine.problem[1].data.fx |
---|
72 | print "target" |
---|
73 | engine.problem(numpy.array([4,2.5,4,2.5])) |
---|
74 | print engine.problem.chisq |
---|
75 | print engine.problem.residuals |
---|
76 | print "M1.y",engine.problem[0].data.y |
---|
77 | print "M1.fx",engine.problem[0].data.fx |
---|
78 | print "M1 delta",numpy.asarray(engine.problem[0].data.y)-engine.problem[0].data.fx |
---|
79 | print "M2.y",engine.problem[0].data.y |
---|
80 | print "M2.fx",engine.problem[0].data.fx |
---|
81 | print "M2 delta",numpy.asarray(engine.problem[1].data.y)-engine.problem[1].data.fx |
---|
82 | |
---|