From 649e08a09d85f986e75bb67e5c14959ad59c6f27 Mon Sep 17 00:00:00 2001 From: Constantin Pape <constantin.pape@iwr.uni-heidelberg.de> Date: Thu, 7 Nov 2019 15:39:36 +0100 Subject: [PATCH] Implement preliminary cilia analysis --- analysis/cilia/analyse_cilia.py | 88 +++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 analysis/cilia/analyse_cilia.py diff --git a/analysis/cilia/analyse_cilia.py b/analysis/cilia/analyse_cilia.py new file mode 100644 index 0000000..4ee31cd --- /dev/null +++ b/analysis/cilia/analyse_cilia.py @@ -0,0 +1,88 @@ +import numpy as np +import pandas as pd +from make_cell_table import right_nephr_ids, left_nephr_ids +from matplotlib import pyplot as plt + +TABLE_PATH = '../../data/0.6.2/tables/sbem-6dpf-1-whole-segmented-cilia-labels/cell_mapping.csv' + + +def check_cell_ids(): + table = pd.read_csv(TABLE_PATH, sep='\t') + cell_ids = table['cell_id'].values + + matched_right = [] + matched_left = [] + for cell_id in cell_ids: + if cell_id in right_nephr_ids: + matched_right.append(cell_id) + elif cell_id in left_nephr_ids: + matched_left.append(cell_id) + else: + assert cell_id == 0 or np.isnan(cell_id), str(cell_id) + + matched_right = set(matched_right) + matched_left = set(matched_left) + + # unmatched_right = set(right_nephr_ids) - matched_right + # unmatched_left = set(left_nephr_ids) - matched_left + + print("Number of cells right:") + print("Total:", len(right_nephr_ids)) + print("With cilia:", len(matched_right)) + + print("Number of cells left:") + print("Total:", len(left_nephr_ids)) + print("With cilia:", len(matched_left)) + + +def plot_cilia_per_cell(): + counts_left = [] + counts_right = [] + + table = pd.read_csv(TABLE_PATH, sep='\t') + cell_ids = table['cell_id'] + cell_ids = cell_ids[cell_ids != 0] + cell_ids = cell_ids[~np.isnan(cell_ids)] + cell_ids = cell_ids.astype('uint32') + + unique_cell_ids = np.unique(cell_ids) + + total_count = 0 + for cell_id in unique_cell_ids: + n_cilia = np.sum(cell_ids == cell_id) + total_count += n_cilia + if cell_id in right_nephr_ids: + counts_right.append(n_cilia) + elif cell_id in left_nephr_ids: + counts_left.append(n_cilia) + else: + print(cell_id) + + counts_right.sort(reverse=True) + counts_left.sort(reverse=True) + assert len(counts_right) == len(counts_left) + print("Total number of cilia:", total_count) + print("Right counts:") + print(sum(counts_right)) + print("Left counts:") + print(sum(counts_left)) + + fig, axes = plt.subplots(2) + x = np.arange(7) + + ax = axes[0] + ax.set_title('Right nephridium') + ax.bar(x, height=counts_right) + ax.set_ylabel('Cilia per cell') + + ax = axes[1] + ax.set_title('Left nephridium') + ax.bar(x, height=counts_left) + ax.set_ylabel('Cilia per cell') + + plt.show() + + +if __name__ == '__main__': + check_cell_ids() + plot_cilia_per_cell() -- GitLab