source: sasview/fittingview/src/sans/perspectives/fitting/fit_thread.py @ dafc36f

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 dafc36f was 7db52f1, checked in by Jae Cho <jhjcho@…>, 13 years ago

now able to reset the model init param values in batch model

  • Property mode set to 100644
File size: 3.5 KB
Line 
1
2import sys
3from data_util.calcthread import CalcThread
4
5def map_getattr(classInstance, classFunc, *args):
6    """
7    Take an instance of a class and a function name as a string.
8    Execute class.function and return result
9    """
10    return  getattr(classInstance,classFunc)(*args)
11
12def map_apply(arguments):
13    return apply(arguments[0], arguments[1:])
14
15class FitThread(CalcThread):
16    """Thread performing the fit """
17   
18    def __init__(self, 
19                  fn,
20                  page_id,
21                   handler,
22                    batch_outputs,
23                    batch_inputs=None,             
24                  pars=None,
25                 completefn = None,
26                 updatefn   = None,
27                 yieldtime  = 0.01,
28                 worktime   = 0.01,
29                 ftol       = None,
30                 reset_flag = False):
31        CalcThread.__init__(self,completefn,
32                 updatefn,
33                 yieldtime,
34                 worktime)
35        self.handler = handler
36        self.fitter = fn
37        self.pars = pars
38        self.batch_inputs = batch_inputs
39        self.batch_outputs = batch_outputs
40        self.page_id = page_id
41        self.starttime = 0
42        self.updatefn = updatefn
43        #Relative error desired in the sum of squares.
44        self.ftol = ftol
45        self.reset_flag = reset_flag
46   
47    def isquit(self):
48        """
49        :raise KeyboardInterrupt: when the thread is interrupted
50       
51        """
52        try:
53            CalcThread.isquit(self)
54        except KeyboardInterrupt:
55            raise KeyboardInterrupt
56       
57    def compute(self):
58        """
59        Perform a fit
60        """
61        msg = ""
62        try:
63            import copy
64            list_handler = []
65            list_curr_thread = [] 
66            list_ftol = []
67            list_reset_flag = []
68            list_map_get_attr = []
69            list_fit_function = []
70            list_q = []
71            for i in range(len(self.fitter)):
72                list_handler.append(None)
73                list_q.append(None)
74                list_curr_thread.append(None)
75                list_ftol.append(self.ftol)
76                list_reset_flag.append(self.reset_flag)
77                list_fit_function.append('fit')
78                list_map_get_attr.append(map_getattr)
79            #from multiprocessing import Pool
80            inputs = zip(list_map_get_attr,self.fitter, list_fit_function,
81                         list_handler, list_q, list_curr_thread,list_ftol,
82                         list_reset_flag)
83            result =  map(map_apply, inputs)
84            self.complete(result=result,
85                          batch_inputs=self.batch_inputs,
86                           batch_outputs=self.batch_outputs,
87                          page_id=self.page_id,
88                          pars = self.pars)
89           
90        except KeyboardInterrupt, msg:
91            # Thread was interrupted, just proceed and re-raise.
92            # Real code should not print, but this is an example...
93            #print "keyboard exception"
94            #Stop on exception during fitting. Todo: need to put
95            #some mssg and reset progress bar.
96            raise
97            #if self.handler is not None:
98            #    self.handler.error(msg=msg)
99        except:
100            raise
101            if self.handler is not None:
102                self.handler.error(msg=str(sys.exc_value))
103           
104       
105   
Note: See TracBrowser for help on using the repository browser.