source: sasview/sansview/perspectives/fitting/gui_thread.py @ 35c9d31

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 35c9d31 was 425ef040, checked in by Gervaise Alina <gervyh@…>, 15 years ago

guithread change on data2D

  • Property mode set to 100644
File size: 4.4 KB
Line 
1
2
3import time
4import numpy
5import copy
6import math
7import sys
8import wx
9
10from data_util.calcthread import CalcThread
11from sans.fit.AbstractFitEngine import FitData2D, FitData1D, SansAssembly
12
13
14class CalcChisqr1D(CalcThread):
15    """
16       Compute chisqr
17    """
18    def __init__(self, data1d, model,
19                 smearer=None,
20                 qmin=None,
21                 qmax=None,
22                 completefn = None,
23                 updatefn   = None,
24                 yieldtime  = 0.01,
25                 worktime   = 0.01
26                 ):
27        CalcThread.__init__(self,completefn,
28                 updatefn,
29                 yieldtime,
30                 worktime)
31       
32        if model ==None or data1d ==None:
33            raise ValueError, "Need data and model to compute chisqr"
34       
35        if data1d.__class__.__name__ !="Data1D":
36            msg= str(data1d.__class__.__name__)
37            raise ValueError, "need Data1D to compute chisqr. Current class %s"%msg
38
39        self.fitdata= FitData1D(x=data1d.x,y=data1d.y,dx=data1d.dx,dy=data1d.dy, smearer=smearer)
40        self.fitdata.setFitRange(qmin=qmin,qmax=qmax)
41        self.model = model
42       
43        self.starttime = 0 
44       
45    def isquit(self):
46        """
47             @raise KeyboardInterrupt: when the thread is interrupted
48        """
49        try:
50            CalcThread.isquit(self)
51        except KeyboardInterrupt:
52            raise KeyboardInterrupt   
53       
54       
55    def compute(self):
56        """
57            Compute the data given a model function
58        """
59        self.starttime = time.time()
60       
61        output= None
62        res=[]
63        try:
64            res = self.fitdata.residuals(self.model.evalDistribution)
65            sum=0
66            for item in res:
67                # Check whether we need to bail out
68                self.isquit() 
69                if numpy.isfinite(item):
70                    sum +=item*item
71            if len(res)>0:
72                output = sum/ len(res)
73           
74            elapsed = time.time()-self.starttime
75            self.complete(output= output,  elapsed=elapsed)
76           
77        except KeyboardInterrupt:
78            # Thread was interrupted, just proceed and re-raise.
79            # Real code should not print, but this is an example...
80            raise
81     
82       
83class CalcChisqr2D(CalcThread):
84    """
85       Compute chisqr
86    """
87   
88    def __init__(self,data2d, model,
89                 qmin,
90                 qmax,
91                 completefn = None,
92                 updatefn   = None,
93                 yieldtime  = 0.01,
94                 worktime   = 0.01
95                 ):
96        CalcThread.__init__(self,completefn,
97                 updatefn,
98                 yieldtime,
99                 worktime)
100       
101        if model ==None or data2d ==None:
102            raise ValueError, "Need data and model to compute chisqr"
103       
104        if data2d.__class__.__name__ !="Data2D":
105            msg= str(data2d.__class__.__name__)
106            raise ValueError, "need Data2D to compute chisqr. Current class %s"%msg
107       
108        self.fitdata = FitData2D(sans_data2d=data2d ,data=data2d.data, err_data=data2d.err_data)
109        self.fitdata.setFitRange(qmin=qmin,qmax=qmax)
110     
111        self.model = model
112     
113        self.starttime = 0 
114       
115    def isquit(self):
116        """
117             @raise KeyboardInterrupt: when the thread is interrupted
118        """
119        try:
120            CalcThread.isquit(self)
121        except KeyboardInterrupt:
122            raise KeyboardInterrupt   
123       
124       
125    def compute(self):
126        """
127            Compute the data given a model function
128        """
129        self.starttime = time.time()
130       
131        output= None
132        res=[]
133        try:
134            res = self.fitdata.residuals(self.model.evalDistribution)
135            sum=0
136            for item in res:
137                # Check whether we need to bail out
138                self.isquit() 
139                if numpy.isfinite(item):
140                    sum +=item*item
141            if len(res)>0:
142                output = sum/ len(res)
143           
144            elapsed = time.time()-self.starttime
145            self.complete(output= output,  elapsed=elapsed)
146           
147        except KeyboardInterrupt:
148            # Thread was interrupted, just proceed and re-raise.
149            # Real code should not print, but this is an example...
150            raise 
151       
Note: See TracBrowser for help on using the repository browser.