Пример #1
0
 def prepare_plots_file(n_clicks, file_format_values, width, height,
                        units, dpi):
     opls_data = OPLSModel()
     OPLSDashboard.check_clicks(n_clicks)
     if not opls_data.results_file_ready:
         return 3600000
     job = opls_data.download_plots(file_format_values, width, height,
                                    units, dpi)
     print(f'Started ')
     rds.set_value(f'{OPLSModel.redis_prefix}_job_id', job.id)
     return [500]
 def set_file_info(self):
     rds.set_value(f'{self.redis_prefix}_dataframe_filename',
                   self._dataframe_filename.encode('utf-8'))
     rds.set_value(f'{self.redis_prefix}_results_filename',
                   self._results_filename.encode('utf-8'))
     rds.set_value(f'{self.redis_prefix}_loaded_collection_ids',
                   msgpack.dumps(self._loaded_collection_ids))
Пример #3
0
 def download_plots(self, file_formats, width, height, units, dpi):
     rds.set_value(f'{self.redis_prefix}_image_save_progress', 0)
     rds.set_value(f'{self.redis_prefix}_image_save_label', 'Starting job')
     rds.set_value(f'{self.redis_prefix}_image_save_progress_fraction',
                   f'0/0')
     if self.results_file_ready:
         base_filename = f'opls_results_{self.results_collection_id}'
         root_dir = tempfile.mkdtemp()
         plot_dir = os.path.join(root_dir, f'{base_filename}_plots')
         os.mkdir(plot_dir)
         file_formats = file_formats or []
         if self.results_file_ready:
             groups = h5py.File(self.results_filename).keys()
             figure_data = {}
             for group in groups:
                 is_discrimination = 'accuracy' in h5py.File(
                     self.results_filename)[group].attrs
                 quality_graph, score_graph = self.get_quality_plot(
                     group, 'plotly_white', False)
                 if is_discrimination:
                     (q_squared_graph, discriminant_q_squared_graph,
                      accuracy_graph,
                      roc_auc_graph) = self.get_metric_kde_plot(
                          group, 'plotly_white', False)
                 else:
                     q_squared_graph = self.get_metric_kde_plot(
                         group, 'plotly_white', False)
                     discriminant_q_squared_graph = accuracy_graph = roc_auc_graph = None
                 figure_data.update({
                     f'{group}_quality_metrics':
                     quality_graph.to_plotly_json()['props']['figure'],
                     f'{group}_scores':
                     score_graph.to_plotly_json()['props']['figure'],
                     f'{group}_q_squared_kde':
                     q_squared_graph.to_plotly_json()['props']['figure']
                 })
                 if is_discrimination:
                     figure_data.update({
                         f'{group}_discriminant_q_squared_kde':
                         discriminant_q_squared_graph.to_plotly_json()
                         ['props']['figure'],
                         f'{group}_accuracy_kde':
                         accuracy_graph.to_plotly_json()['props']['figure'],
                         f'{group}_roc_auc_kde':
                         roc_auc_graph.to_plotly_json()['props']['figure']
                     })
                 return save_figures.queue(figure_data, file_formats, width,
                                           height, units, dpi, plot_dir,
                                           f'user{current_user.id}',
                                           self.redis_prefix)
     raise RuntimeError('Plots not ready!')
Пример #4
0
 def special_numeric_df_label(self, value):
     value = value.encode('utf-8') if isinstance(value, str) else value
     rds.set_value(f'{self._redis_prefix}_special_numeric_df_label', value)
Пример #5
0
 def region_n_clicks(self, value):
     rds.set_value(f'{self._redis_prefix}_region_n_clicks', value)
Пример #6
0
 def baseline_n_clicks(self, value):
     rds.set_value(f'{self._redis_prefix}_baseline_n_clicks', value)
Пример #7
0
 def normalize_n_clicks(self, value):
     rds.set_value(f'{self._redis_prefix}_normalize_n_clicks', value)
Пример #8
0
 def y_axis_range(self, value):
     rds.set_value(f'{self._redis_prefix}_y_axis_range', msgpack.dumps(value))
Пример #9
0
 def processing_log(self, value):
     value = value.encode('utf-8') if isinstance(value, str) else value
     rds.set_value(f'{self._redis_prefix}_processing_log', value)
Пример #10
0
def save_figures(figure_data, file_formats, width, height, units, dpi,
                 output_dir, redis_hash_name, redis_prefix):
    archive_name = pathlib.Path(output_dir).with_suffix('.zip')
    output_path = pathlib.Path(output_dir)
    n_steps = len(figure_data) * len(file_formats) + 1
    progress = 0
    rds.set_value(f'{redis_prefix}_image_save_progress', 0, redis_hash_name)
    rds.set_value(f'{redis_prefix}_image_save_progress_fraction',
                  f'0/{n_steps}', redis_hash_name)
    rds.set_value(f'{redis_prefix}_image_save_label', 'Saving images',
                  redis_hash_name)
    i = 0
    for file_format in file_formats:
        format_path = output_path.joinpath(file_format)
        format_path.mkdir(parents=True, exist_ok=True)
        for name, figure in figure_data.items():
            path = format_path.joinpath(name).with_suffix(f'.{file_format}')
            rds.set_value(f'{redis_prefix}_image_save_label',
                          f'Saving {path.name}', redis_hash_name)
            progress += 100 / n_steps
            save_figure(figure, file_format, width, height, units, dpi, path)
            i += 1
            rds.set_value(f'{redis_prefix}_image_save_progress', progress,
                          redis_hash_name)
            rds.set_value(f'{redis_prefix}_image_save_progress_fraction',
                          f'{i}/{n_steps}', redis_hash_name)
    rds.set_value(f'{redis_prefix}_image_save_label',
                  f'Creating archive {archive_name}', redis_hash_name)
    out_filename = shutil.make_archive(output_path, 'zip', output_path.parent,
                                       output_path.stem)
    shutil.rmtree(output_path)
    rds.set_value(f'{redis_prefix}_image_save_progress', 100, redis_hash_name)
    rds.set_value(f'{redis_prefix}_image_save_progress_fraction',
                  f'{n_steps}/{n_steps}', redis_hash_name)
    rds.set_value(f'{redis_prefix}_image_save_label',
                  f'Created archive {archive_name}', redis_hash_name)
    return out_filename
 def set_plot_data(cls, plot_data: Dict[str, List[Dict[str, Any]]]) -> None:
     rds.set_value(f'{cls.redis_prefix}_plot_data',
                   msgpack.dumps(plot_data))
Пример #12
0
 def job_id(self, value):
     rds.set_value(f'{self.redis_prefix}_job_id', value)
Пример #13
0
 def results_collection_id(self, value):
     rds.set_value(f'{self.redis_prefix}_results_collection_id',
                   msgpack.dumps(value))