def _generate_bin_mapping(self, bin_table: dict) -> dict: binning_tuple = {} for bin_info in bin_table: binning_tuple.setdefault(bin_info[BinTableFieldName.HBin()], []).append( bin_info[BinTableFieldName.SBinNum()]) return binning_tuple
def get_binning_tuple(bin_table: list) -> dict: binning_tuple = {} for bin_info in bin_table: binning_tuple.setdefault(bin_info[BinTableFieldName.HBin()], []).append( bin_info[BinTableFieldName.SBinNum()]) return binning_tuple
def do_bin_mapping(standard_binning: list, external_bin_mapping: dict): for bin_info in standard_binning['bin-table']: mapped = False for hbin, sbins in external_bin_mapping.items(): if bin_info[BinTableFieldName.SBinNum()] in sbins: bin_info[BinTableFieldName.HBin()] = hbin mapped = True assert mapped, f'sbin "{bin_info[BinTableFieldName.SBinNum()]}" could not be mapped'
def generate_bin(self, sb_group: str, sb_desc: str) -> dict: bin = { BinTableFieldName.SBinNum(): str(self._alarm_bin_number), BinTableFieldName.SBinGroup(): sb_group, BinTableFieldName.SBinDescription(): sb_desc, BinTableFieldName.HBin(): '0' } self._alarm_bin_number += 1 return bin
def generate_site_infos(site_infos: dict) -> dict: ret_dict = {} for site_info in site_infos: ret_dict[site_info[BinTableFieldName.SBinNum()]] =\ BinInfo(site_info[BinTableFieldName.SBinName()], int(site_info[BinTableFieldName.SBinNum()]), int(site_info[BinTableFieldName.HBin()]), 0, 'F') return ret_dict
def add_bin(self, sb_name: str, sb_num: str, sb_group: str, sb_desc: str, h_bin: str = '0'): self._binning_table[sb_name] = { BinTableFieldName.SBinNum(): sb_num, BinTableFieldName.SBinGroup(): sb_group, BinTableFieldName.SBinDescription(): sb_desc, BinTableFieldName.HBin(): h_bin }
def get_bin_settings(bin_table: list) -> dict: settings = {} for bin_info in bin_table: settings.setdefault(bin_info[BinTableFieldName.SBinGroup()], { 'hbins': [], 'sbins': [] })['hbins'].append(bin_info[BinTableFieldName.HBin()]) settings.setdefault(bin_info[BinTableFieldName.SBinGroup()], { 'hbins': [], 'sbins': [] })['sbins'].append(bin_info[BinTableFieldName.SBinNum()]) return settings
def set_sites_information(self, site_infos: dict): self.bin_names = [ site_info[BinTableFieldName.SBinName()] for site_info in site_infos ] for site_id in self.sites_id: self.sites_info[site_id] = SiteInformation(site_id, site_infos)
def _generate_bin_table(self) -> dict: self._binning_table.update(self._alarm_binning_table) # TODO: is there a better way to integrade good bin 1 ? self.add_bin("Good_1", '1', 'Good1', '', h_bin='1') for sb_name in self._binning_table.keys(): self._binning_table[sb_name][ BinTableFieldName.SBinName()] = sb_name return self._binning_table.items()
def generate_bin_identrifiers(self, identifier_offset: int = 1): sb_num = 11 sb_name = f'Bin_{sb_num}' if not self._binning_table: return sb_name, str(sb_num) sb_num = max([ int(bin[BinTableFieldName.SBinNum()]) for _, bin in self._binning_table.items() ]) + identifier_offset sb_name = f'Bin_{sb_num}' if self._binning_table.get(sb_name): return self.generate_bin_identrifiers(identifier_offset + 1) return sb_name, str(sb_num)
def load_bin_table(self, file_name: str): data = self.read_binning_file(file_name) self._binning_table.clear() for bin_info in data: if int(bin_info[BinTableFieldName.SBinNum()]) in range(ALARM_BIN_MIN, ALARM_BIN_MAX + 1) or \ int(bin_info[BinTableFieldName.SBinNum()]) == GOOD_GRADE_BIN: continue self.add_bin(bin_info[BinTableFieldName.SBinName()], bin_info[BinTableFieldName.SBinNum()], bin_info[BinTableFieldName.SBinGroup()], bin_info[BinTableFieldName.SBinDescription()])
def update(self): self.binning_table.clear() self.binning_table.setRowCount(self._bin_container.get_bin_table_size()) for row, (sb_name, value) in enumerate(self._bin_container.get_bin_table().items()): self.add_bin(row, sb_name, str(value[BinTableFieldName.SBinNum()]), value[BinTableFieldName.SBinGroup()], value[BinTableFieldName.SBinDescription()])
def get_alarm_bin_num(self, sb_name: str) -> str: return self._alarm_binning_table[sb_name][BinTableFieldName.SBinNum()]
def update_bin_info(self, sb_name: str, sb_num: str, sb_group: str, sb_desc: str): self._binning_table[sb_name][BinTableFieldName.SBinNum()] = sb_num self._binning_table[sb_name][BinTableFieldName.SBinGroup()] = sb_group self._binning_table[sb_name][ BinTableFieldName.SBinDescription()] = sb_desc
def does_bin_num_exist(self, bin_num: str) -> bool: for _, value in self._binning_table.items(): if value[BinTableFieldName.SBinNum()] == bin_num: return True return False