def get_num_samples_by_keeping_total_samples(srs_table, new_num_samples): """Redistribute the samples number by area based proportion keeping the total of samples, this occur when one num sample is changed """ for idx, (old_ns, new_ns) in enumerate( zip(srs_table["num_samples"], new_num_samples)): if old_ns != new_ns: sample_idx = idx sample_diff = float(old_ns) - float(new_ns) break distribute_on = list(srs_table["On"]) distribute_on[sample_idx] = False total_pixel_count = float( sum(mask(srs_table["pixel_count"], distribute_on))) ratio_pixel_count = [ p_c / total_pixel_count for p_c in mask(srs_table["pixel_count"], distribute_on) ] num_samples = [] idx = 0 for global_idx, item_enable in enumerate(distribute_on): if item_enable: num_samples.append( str( int( round( int(new_num_samples[global_idx]) + ratio_pixel_count[idx] * sample_diff)))) idx += 1 else: num_samples.append(str(new_num_samples[global_idx])) return num_samples
def get_num_samples_by_area_based_proportion(srs_table, total_std_error): total_pixel_count = float( sum(mask(srs_table["pixel_count"], srs_table["On"]))) ratio_pixel_count = [ p_c / total_pixel_count for p_c in mask(srs_table["pixel_count"], srs_table["On"]) ] Si = [(float(std_error) * (1 - float(std_error)))**0.5 for std_error in mask(srs_table["std_error"], srs_table["On"])] total_num_samples = ( sum([rpc * si for rpc, si in zip(ratio_pixel_count, Si)]) / total_std_error)**2 num_samples = [] idx = 0 for item_enable in srs_table["On"]: if item_enable: num_samples.append( str(int(round(ratio_pixel_count[idx] * total_num_samples)))) idx += 1 else: num_samples.append(str("0")) return num_samples
def update_srs_table_content(dockwidget, srs_table): with block_signals_to(dockwidget.QTableW_StraRS): # init table dockwidget.QTableW_StraRS.setRowCount(srs_table["row_count"]) dockwidget.QTableW_StraRS.setColumnCount(srs_table["column_count"]) # enter data onto Table for n, key in enumerate(srs_table["header"]): if key == "Pix Val": for m, item in enumerate( srs_table["color_table"]["Pixel Value"]): item_table = QTableWidgetItem(str(item)) item_table.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_table.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) dockwidget.QTableW_StraRS.setItem(m, n, item_table) if key == "Color": for m in range(srs_table["row_count"]): item_table = QTableWidgetItem() item_table.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) item_table.setBackground( QColor(srs_table["color_table"]["Red"][m], srs_table["color_table"]["Green"][m], srs_table["color_table"]["Blue"][m], srs_table["color_table"]["Alpha"][m])) dockwidget.QTableW_StraRS.setItem(m, n, item_table) if key == "Num Samples": for m in range(srs_table["row_count"]): item_table = QTableWidgetItem(srs_table["num_samples"][m]) item_table.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) if not srs_table["On"][m]: item_table.setForeground(QColor("lightGrey")) item_table.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) dockwidget.QTableW_StraRS.setItem(m, n, item_table) if key == "Std Error": for m in range(srs_table["row_count"]): item_table = QTableWidgetItem(srs_table["std_error"][m]) item_table.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) if not srs_table["On"][m]: item_table.setForeground(QColor("lightGrey")) item_table.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled) dockwidget.QTableW_StraRS.setItem(m, n, item_table) if key == "On": for m in range(srs_table["row_count"]): item_table = QTableWidgetItem() item_table.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled) item_table.setTextAlignment(Qt.AlignCenter | Qt.AlignVCenter) if srs_table["On"][m]: item_table.setCheckState(Qt.Checked) else: item_table.setCheckState(Qt.Unchecked) dockwidget.QTableW_StraRS.setItem(m, n, item_table) # hidden row labels dockwidget.QTableW_StraRS.verticalHeader().setVisible(False) # add Header dockwidget.QTableW_StraRS.setHorizontalHeaderLabels( srs_table["header"]) # adjust size of Table dockwidget.QTableW_StraRS.resizeColumnsToContents() dockwidget.QTableW_StraRS.resizeRowsToContents() # set label total samples total_num_samples = sum( [int(x) for x in mask(srs_table["num_samples"], srs_table["On"])]) dockwidget.TotalNumSamples.setText(str(total_num_samples)) # set maximum and reset the value in progress bar status dockwidget.widget_generate_StraRS.QPBar_GenerateSampling.setValue(0) dockwidget.widget_generate_StraRS.QPBar_GenerateSampling.setMaximum( total_num_samples)