source: sasview/sansview/perspectives/fitting/console.py @ 59a59fa

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

oops need import sys

  • Property mode set to 100644
File size: 4.6 KB
Line 
1
2
3
4from sans.guiframe.events import StatusEvent
5import time
6import wx
7import park
8from park.fitresult import FitHandler
9import sys
10IS_MAC = True
11if sys.platform.count("win32") > 0:
12    IS_MAC = False
13class ConsoleUpdate(FitHandler):
14    """
15    Print progress to the console.
16    """
17    isbetter = False
18    """Record whether results improved since last update"""
19    progress_delta =  60
20    """Number of seconds between progress updates"""
21    improvement_delta = 5
22    """Number of seconds between improvement updates"""
23    def __init__(self, parent, manager=None,
24                 quiet=False,progress_delta=60,improvement_delta=5):
25        """
26        If quiet is true, only print out final summary, not progress and
27        improvements.
28       
29        :attr parent: the object that handle the messages
30       
31        """
32        self.parent= parent
33        self.manager = manager
34        self.progress_time = time.time()
35        self.progress_percent = 0
36        self.improvement_time = self.progress_time
37        self.isbetter = False
38        self.quiet = quiet
39        self.progress_delta = progress_delta
40        self.improvement_delta = improvement_delta
41        self.elapsed_time = self.progress_time
42       
43    def progress(self, k, n):
44        """
45        Report on progress.
46        """
47        if self.quiet: return
48
49        t = time.time()
50        p = int((100*k)//n)
51       
52        # Show improvements if there are any
53        dt = t - self.improvement_time
54        if self.isbetter and dt > self.improvement_delta:
55            self.result.print_summary()
56            self.isbetter = False
57            self.improvement_time = t
58           
59            wx.PostEvent(self.parent, StatusEvent(status=\
60             "%d%% complete ..."%(p),type="progress"))
61       
62        # Update percent complete
63        dp = p-self.progress_percent
64        if dp < 1: return
65        dt = t - self.progress_time
66        if dt > self.progress_delta:
67            if 1 <= dp <= 2:
68                self.progress_percent = p
69                self.progress_time = t
70                wx.PostEvent(self.parent, StatusEvent(status=\
71                                                      "%d%% complete ..."%(p),
72                                                      type="progress"))
73       
74            elif 2 < dp <= 5:
75                if p//5 != self.progress_percent//5:
76                    wx.PostEvent(self.parent, StatusEvent(status=\
77                        "%d%% complete ..."%(5*(p//5)),type="progress"))
78                    self.progress_percent = p
79                    self.progress_time = t
80            else:
81                if p//10 != self.progress_percent//10:
82                    self.progress_percent = p
83                    self.progress_time = t
84                    wx.PostEvent(self.parent, StatusEvent(status=\
85                   "%d%% complete ..."%(10*(p//10)),type="progress"))
86       
87    def improvement(self):
88        """
89        Called when a result is observed which is better than previous
90        results from the fit.
91        """
92        self.isbetter = True
93   
94    def error(self, msg):
95        """
96        Model had an error; print traceback
97        """
98        if self.isbetter:
99            self.result.print_summary()
100        message = "Fit Abort:"
101        message = str(msg)+ " \n %s"%self.result.__str__()
102        wx.PostEvent(self.parent, StatusEvent(status=message,
103                                   info="error", type="stop"))
104    def finalize(self):
105        """
106        """
107        if self.isbetter:
108            self.result.print_summary()
109
110    def abort(self):
111        """
112        """
113        if self.isbetter:
114            self.result.print_summary()
115           
116       
117    def update_fit(self, msg=""):
118        """
119        """
120        self.elapsed_time = time.time() - self.elapsed_time
121        if IS_MAC:
122            msg = ''
123        else:
124            msg = " Updating fit ...\n result:\n %s \n"%self.result.__str__()
125        wx.PostEvent(self.parent, StatusEvent(status=msg, info="info",
126                                              type="progress"))
127        time.sleep(0.01)
128       
129    def starting_fit(self):
130        """
131        """
132        wx.PostEvent(self.parent, StatusEvent(status="Starting the Fit...",
133                                        info="info",type="progress"))
134       
135    def set_result(self, result):
136        """
137        """
138        self.result = result
139   
140    def get_result(self):
141        """
142        """
143        return self.result
144       
145   
Note: See TracBrowser for help on using the repository browser.