Source code for crtomo.notebook.steps.raw_data_visualization

from .base_step import base_step
import pylab as plt

from IPython.display import display
import ipywidgets as widgets
# from ipywidgets import GridspecLayout


[docs] class step_raw_visualization(base_step): def __init__(self, persistent_directory=None): super().__init__(persistent_directory=persistent_directory) self.name = 'raw_vis' self.title = 'Data Visualisation/Filtering' self.help_page = 'filtering.html' self.required_steps = [ 'data_import', ] self.input_skel = { "filters": { 'r_min': 0, 'r_max': None, 'rhoa_min': None, 'rhoa_max': None, 'pha_min': None, 'pha_max': None, }, }
[docs] def apply_next_input(self): """ """ if not self.can_run(): return step_import = self.find_previous_step(self, 'data_import') # note: we already checked that the previous step finished cr = step_import.results['cr_merge'].create_copy() # apply filters if (filt_rmin := self.input_new['filters'].get("r_min", None)): print('Applying rmin filter', filt_rmin) cr.filter("r <= {}".format(filt_rmin)) if (filt_rmax := self.input_new['filters'].get("r_max", None)): print('Applying rmax filter', filt_rmax) cr.filter("r >= {}".format(filt_rmax)) # if(filt_rhoa_min := self.input_new['filters'].get("rhoa_min", None)): # cr.filter("rho_a <= {}".format(filt_rhoa_min)) # if(filt_rhoa_max := self.input_new['filters'].get("rhoa_max", None)): # cr.filter("rho_a <= {}".format(filt_rhoa_max)) # TODO: Phase plot_r = cr.plot_histogram(column='r') self.results['hist_r_log10'] = plot_r if 'rpha' in cr.data.columns: plot_rpha = cr.plot_histogram(column='rpha') self.results['hist_rpha'] = plot_rpha fig_pseudo_log10_r = cr.pseudosection_type1(column='r', log10=True) self.results['ps_log10_r'] = fig_pseudo_log10_r self.results['cr'] = cr self.transfer_input_new_to_applied() self.has_run = True
[docs] def create_ipywidget_gui(self): self.widgets['label_intro'] = widgets.Label( 'This tab visualises the raw data and allows you to apply data ' + 'filters' ) # filter widgets self.widgets['filter_r_min_useit'] = widgets.Checkbox( value=True, description="Use this filter", ) self.widgets['filter_r_min'] = widgets.FloatText( value=0, description="Filter R min", ) self.widgets['filter_r_max_useit'] = widgets.Checkbox( value=False, description="Use this filter", ) self.widgets['filter_r_max'] = widgets.FloatText( value=None, description="Filter R max", ) self.widgets['filter_vbox'] = widgets.VBox( [ widgets.HBox([ self.widgets['filter_r_min'], self.widgets['filter_r_min_useit'], ]), widgets.HBox([ self.widgets['filter_r_max'], self.widgets['filter_r_max_useit'], ]), ], ) # the visualization output self.widgets['output'] = widgets.Output() self.widgets['button_plot'] = widgets.Button( description='Plot', disabled=False, # 'success', 'info', 'warning', 'danger' or '' button_style='', tooltip='Click me', icon='check' # (FontAwesome names without the `fa-` prefix) ) self.widgets['button_plot'].on_click( self.apply_next_input_from_gui ) self.widgets['label_feedback'] = widgets.Label('') self.jupyter_gui = widgets.VBox([ self.widgets['label_intro'], self.widgets['filter_vbox'], self.widgets['button_plot'], self.widgets['label_feedback'], self.widgets['output'], ])
[docs] def apply_next_input_from_gui(self, button): """Generate an input dict from the gui elements and apply those new inputs """ print('Applying input from GUI') feedback = self.widgets['label_feedback'] settings = { "filters": {}, } if self.widgets['filter_r_min_useit'].value: settings['filters']['r_min'] = self.widgets['filter_r_min'].value if self.widgets['filter_r_max_useit'].value: settings['filters']['r_max'] = self.widgets['filter_r_max'].value print('Submitting new settings:', settings) self.set_input_new(settings) # do not plot anything interactively with plt.ioff(): self.apply_next_input() self.widgets['output'].clear_output() with self.widgets['output']: fig_rmag = self.results['hist_r_log10']['all'] display(fig_rmag) if 'hist_rpha' in self.results: display(self.results['hist_rpha']['all']) if 'ps_log10_r' in self.results: # first entry is the fig object display(self.results['ps_log10_r'][0]) feedback.value = 'Plots were generated' # notify external objects if self.callback_step_ran is not None: self.callback_step_ran(self)