File update interval switched to NumericProperty; changed do_update on PlotWidget to run a scheduled clock interval, default to every 5 seconds

This commit is contained in:
Kienan Stewart 2015-04-01 12:01:29 -04:00
parent 974a189e52
commit babac7ae2e
1 changed files with 14 additions and 4 deletions

18
main.py
View File

@ -376,6 +376,9 @@ class PlotWidget(Image):
show_protease = BooleanProperty(True) show_protease = BooleanProperty(True)
show_betaamylase = BooleanProperty(True) show_betaamylase = BooleanProperty(True)
show_alphaamylase = BooleanProperty(True) show_alphaamylase = BooleanProperty(True)
file_write_interval = NumericProperty(15)
image_update_interval = NumericProperty(5)
# Common data that we should only instantiate once # Common data that we should only instantiate once
# Source : http://www.howtobrew.com/section3/chapter14-1.html # Source : http://www.howtobrew.com/section3/chapter14-1.html
@ -402,9 +405,16 @@ class PlotWidget(Image):
self.image_data = None self.image_data = None
self._image_raw_data = None self._image_raw_data = None
self.reference_profile = None self.reference_profile = None
Clock.schedule_interval(self.do_update, self.image_update_interval)
self.do_update() self.do_update()
def on_image_update_interval(self, *args):
# Reschedule the update function.
Clock.unschedule(self.do_update, True)
Clock.schedule_interval(self.do_update, self.image_update_interval)
def update_patches(self, tmax = None): def update_patches(self, tmax = None):
items = [ items = [
(self.show_betaglucan, self.betaglucan_vertices), (self.show_betaglucan, self.betaglucan_vertices),
@ -444,7 +454,7 @@ class PlotWidget(Image):
self.do_update() self.do_update()
def do_update(self): def do_update(self, *args):
image_data = self.to_image_data() image_data = self.to_image_data()
# We can't use ImageLoaders since they assume it's a file on disk. # We can't use ImageLoaders since they assume it's a file on disk.
# This replicates code from ImageLoaderPygame.load() and ImageLoaderBase.populate() # This replicates code from ImageLoaderPygame.load() and ImageLoaderBase.populate()
@ -466,6 +476,7 @@ class PlotWidget(Image):
# @TODO Add in an update interval so the disk isn't hammered on every single update # @TODO Add in an update interval so the disk isn't hammered on every single update
self.update_output_files() self.update_output_files()
def to_image_data(self): def to_image_data(self):
# Add in polygons for hilightning particular temperature ranges of interest. # Add in polygons for hilightning particular temperature ranges of interest.
plot_args = [] plot_args = []
@ -515,7 +526,7 @@ class PlotWidget(Image):
def update_output_files(self, force = False): def update_output_files(self, force = False):
# Do this only once every 15 seconds to avoid hitting the disk frequently # Do this only once every 15 seconds to avoid hitting the disk frequently
Logger.debug('update_output_files called') Logger.debug('update_output_files called')
if force or time.time() - self.lastSave > 15: if force or time.time() - self.lastSave > self.file_write_interval:
Logger.debug('update_output_files going ahead') Logger.debug('update_output_files going ahead')
self.update_raw_data_output_file() self.update_raw_data_output_file()
self.update_image_output_file() self.update_image_output_file()
@ -559,13 +570,12 @@ class PlotWidget(Image):
#Logger.debug('self.data: ' + str(self.data)) #Logger.debug('self.data: ' + str(self.data))
#Logger.debug('newpoint: ' + str(newpoint)) #Logger.debug('newpoint: ' + str(newpoint))
self.data = numpy.vstack((self.data, newpoint)) self.data = numpy.vstack((self.data, newpoint))
self.do_update()
def on_reference_profile_file(self, *args, **kwargs): def on_reference_profile_file(self, *args, **kwargs):
Logger.debug('PlotWidget: on_reference_profile_file ' + str(self.reference_profile_file)) Logger.debug('PlotWidget: on_reference_profile_file ' + str(self.reference_profile_file))
self.load_reference_profile() self.load_reference_profile()
self.do_update() Clock.schedule_once(self.do_update)
def load_reference_profile(self): def load_reference_profile(self):