def _data_dialog(self): ''' a dialog for data processing ''' self.progress_processing.setHidden(True) self.progress_processing.setMinimum(0) self.progress_processing.setValue(0) self.tasks = transport.get_result_files(self.work_dir, self.substances) n_tas = len(self.tasks) self.solutions = transport.parse_task_dirs(self.work_dir, FNAME_ELEMS) n_sols = len(self.solutions) if n_tas - n_sols == 0: self.button_process_newonly.setHidden(True) self.button_process_all.setText('Start') else: self.button_process_newonly.setVisible(True) self.button_process_all.setText('All') msg = "Found {} tasks to analyze. It may take a while\n".format(n_tas) msg += "{} tasks was already processed (compressed file found), {} still need processing\n".format( n_sols, n_tas - n_sols) if self.substances and n_sols > 0: msg += "\n\nYour task works with multiple substances. Now you close this primary task and open result for single substance in subfolder." self.label_processing_text.setText(msg) self.progress_processing.setMaximum(n_tas * 4)
def _analyze_data_selected(self): ''' action for button_process_newonly takes only unprocessed tasks in work_dir to process ''' if not self.tasks: self.tasks = transport.get_result_files( self.work_dir, self.substances) if not self.solutions: self.solutions = transport.parse_task_dirs( self.work_dir, FNAME_ELEMS) dir1 = [path.split(sol)[0] for sol in self.solutions] dir2 = [path.split(sol)[0] for sol in self.tasks] unproc_list = [transport.get_result_files(i, self.substances)[0] for i in dir2 if i not in dir1] self.messenger('Processing data, it may take a while') self._analyze_data_routine(unproc_list) self.messenger('Processing successfully finished', 300) self._data_dialog()
def __compare_selected_conc(self, elm_list=None): ''' wrapper for selected method parses all dirs and sums concentrations for all/selected elements output a table with sum ''' sname, filename = self.__get_proper_filename_suma() master = path.join(self.work_dir, 'master', filename) mas_conc_suma = transport.load_vysledek(master) mas_total = concentrations.sum_conc(mas_conc_suma, elm_list) list_of_conc = [] task_numbers = [] conc = transport.parse_task_dirs(self.work_dir, FNAME_SUMA, sname) for fname in conc: conc_suma = transport.load_vysledek(fname) task_nr = path.split(fname)[0] task_name = task_nr.split('\\')[-1] if task_name == 'master': task_name = '9999999' task_numbers.append(task_name) list_of_conc.append(concentrations.sum_conc(conc_suma, elm_list)) grade_vector = concentrations.grade_result(mas_total, list_of_conc) table_rows = zip(task_numbers, list_of_conc, grade_vector) table_rows = sorted( table_rows, key=lambda grade: grade[2], reverse=True) self.__display_table_rslt(table_rows) # enable export self.comparation_table = table_rows self.button_export_csv.setEnabled(True) self.spin_grade_filter.setEnabled(True) self.button_grade_filter.setEnabled(True)
def merge_result_files(self): ''' Method for merging result files parses all task dirs, opens result json files and merge values to one big table discards results in master dir ''' sname, filename = self.__get_proper_filename_suma() conc = transport.parse_task_dirs(self.work_dir, FNAME_ELEMS, sname) merged_table = {} minval = self.edit_merge_minval.text() try: minval = float(minval) except ValueError: minval = 0.0 for fname in conc: elem_conc = transport.load_vysledek(fname) if not 'master' in fname: for elid, time_dict in elem_conc.items(): if merged_table.has_key(elid): merged_table[elid].append(time_dict) else: merged_table[elid] = [time_dict, ] else: master_conc = elem_conc output_file = self.work_dir + SEPAR + FNAME_MERGE self.messenger( 'Merging the results to one file / it may take a while...') merger.table_to_file( merged_table, master_conc, output_file, len(conc) - 1, minval) self.messenger( 'Data has been successfully merged and exported to CSV file')