def pair_augment(mg): pair_df = pd.read_csv( "maggot_models/data/raw/Maggot-Brain-Connectome/pairs/bp-pairs-2020-01-13_continuedAdditions.csv" ) skeleton_labels = mg.meta.index.values # extract valid node pairings left_nodes = pair_df["leftid"].values right_nodes = pair_df["rightid"].values left_right_pairs = list(zip(left_nodes, right_nodes)) left_nodes_unique, left_nodes_counts = np.unique(left_nodes, return_counts=True) left_duplicate_inds = np.where(left_nodes_counts >= 2)[0] left_duplicate_nodes = left_nodes_unique[left_duplicate_inds] right_nodes_unique, right_nodes_counts = np.unique(right_nodes, return_counts=True) right_duplicate_inds = np.where(right_nodes_counts >= 2)[0] right_duplicate_nodes = right_nodes_unique[right_duplicate_inds] left_nodes = [] right_nodes = [] for left, right in left_right_pairs: if left not in left_duplicate_nodes and right not in right_duplicate_nodes: if left in skeleton_labels and right in skeleton_labels: left_nodes.append(left) right_nodes.append(right) pair_nodelist = np.concatenate((left_nodes, right_nodes)) not_paired = np.setdiff1d(skeleton_labels, pair_nodelist) sorted_nodelist = np.concatenate((pair_nodelist, not_paired)) # sort the graph and metadata according to this sort_map = dict(zip(sorted_nodelist, range(len(sorted_nodelist)))) inv_perm_inds = np.array(itemgetter(*skeleton_labels)(sort_map)) perm_inds = invert_permutation(inv_perm_inds) mg.reindex(perm_inds) side_labels = mg["Hemisphere"] side_labels = side_labels.astype("<U2") for i, l in enumerate(side_labels): if mg.meta.index.values[i] in not_paired: side_labels[i] = "U" + l mg["Hemisphere"] = side_labels n_pairs = len(left_nodes) return mg, n_pairs
left_nodes = [] right_nodes = [] for left, right in left_right_pairs: if left in skeleton_labels and right in skeleton_labels: left_nodes.append(left) right_nodes.append(right) pair_nodelist = np.concatenate((left_nodes, right_nodes)) not_paired = np.setdiff1d(skeleton_labels, pair_nodelist) sorted_nodelist = np.concatenate((pair_nodelist, not_paired)) # sort the graph and metadata according to this sort_map = dict(zip(sorted_nodelist, range(len(sorted_nodelist)))) inv_perm_inds = np.array(itemgetter(*skeleton_labels)(sort_map)) perm_inds = invert_permutation(inv_perm_inds) mg.reindex(perm_inds) side_labels = mg["Hemisphere"] side_labels = side_labels.astype("<U2") for i, l in enumerate(side_labels): if mg.meta.index.values[i] in not_paired: side_labels[i] = "U" + l mg["Hemisphere"] = side_labels n_pairs = len(left_nodes) assert (side_labels[:n_pairs] == "L").all() assert (side_labels[n_pairs:2 * n_pairs] == "R").all() # %% [markdown] # # mg.verify()