Beispiel #1
0
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
Beispiel #2
0
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()