diff --git a/.gitignore b/.gitignore index a5bc312c13cbc0b20920de4c9e80d5ba31f77a2a..4fbc4487c88932c89a5bb078b3074d80e92d6a97 100644 --- a/.gitignore +++ b/.gitignore @@ -160,6 +160,11 @@ cython_debug/ #.idea/ +#inputs +test_data/tTA_2877_NOP +test_data/tTA_2877_NOP_horizontal_final_2017.json + + outputs/ fileForMessingAround.py \ No newline at end of file diff --git a/PyNutil/folder_of_segmentations_to_meshview_multithreaded.py b/PyNutil/folder_of_segmentations_to_meshview_multithreaded.py index 273c163a144cd342a882f7ae0b60b771a1e76478..bc0a0721b8b8220cbed2267c7bd4f9fff2e4e360 100644 --- a/PyNutil/folder_of_segmentations_to_meshview_multithreaded.py +++ b/PyNutil/folder_of_segmentations_to_meshview_multithreaded.py @@ -16,10 +16,10 @@ data, header = nrrd.read(volume_path) startTime = datetime.now() -segmentation_folder = "../test_data/ext-d000033_PVMouseExtraction_pub-Nutil_Quantifier_analysis-81264-Input_dir/" -alignment_json = "../test_data/PVMouse_81264_nonlin.json" +segmentation_folder = "../test_data/tTA_2877_NOP/" +alignment_json = "../test_data/tTA_2877_NOP_horizontal_final_2017.json" #now we can use our function to convert the folder of segmentations to points -points = FolderToAtlasSpaceMultiThreaded(segmentation_folder,alignment_json, pixelID=[255, 0, 0], nonLinear=True) +points = FolderToAtlasSpaceMultiThreaded(segmentation_folder,alignment_json, pixelID=[0, 0, 255], nonLinear=True) time_taken = datetime.now() - startTime diff --git a/PyNutil/folder_of_segmentations_to_meshview_sharon_comments.py b/PyNutil/folder_of_segmentations_to_meshview_sharon_comments.py new file mode 100644 index 0000000000000000000000000000000000000000..f74da47c3bcde970797b28649aa443efbc62dbda --- /dev/null +++ b/PyNutil/folder_of_segmentations_to_meshview_sharon_comments.py @@ -0,0 +1,94 @@ + +#pandas is used for working with csv files +import pandas as pd +#nrrd just lets us open nrrd files +import nrrd +import numpy as np +import csv + +from datetime import datetime + +#import our function for converting a folder of segmentations to points +from PyNutil import FolderToAtlasSpace, labelPoints, WritePointsToMeshview + +volume_path = "../annotation_volumes//annotation_10_reoriented.nrrd" +data, header = nrrd.read(volume_path) + +startTime = datetime.now() + +segmentation_folder = "../test_data/tTA_2877_NOP/" +alignment_json = "../test_data/tTA_2877_NOP_horizontal_final_2017.json" +#now we can use our function to convert the folder of segmentations to points +# colour is BGR (not RGB) +points = FolderToAtlasSpace(segmentation_folder,alignment_json, pixelID=[0, 0, 255], nonLinear=True) +#first we need to find the label file for the volume +label_path = "../annotation_volumes//allen2022_colours.csv" +#then the path to the volume + +#read the label files +label_df = pd.read_csv(label_path) +#read the annotation volume, it also has a header but we don't need it +#now we can get the labels for each point +labels = labelPoints(points, data, scale_factor=2.5) +#save points to a meshview json +WritePointsToMeshview(points, labels,"../outputs/points.json", label_df) + +#Task: +# Make a pandas dataframe +# Column 1: counted_labels +# Column 2: label_counts +# Column 3: region_name (look up by reading Allen2022_colours.csv, look up name and RGB) +# Save dataframe in output as CSV +# next task is to create functions from this. +counted_labels, label_counts = np.unique(labels, return_counts=True) +counts_per_label = list(zip(counted_labels,label_counts)) + +df_counts_per_label = pd.DataFrame(counts_per_label, columns=["allenID","pixel count"]) + +allen_colours = "../annotation_volumes//allen2022_colours.csv" + +df_allen_colours =pd.read_csv(allen_colours, sep=",") +df_allen_colours + +#look up name, r, g, b in df_allen_colours in df_counts_per_label based on "allenID" +new_rows = [] +for index, row in df_counts_per_label.iterrows(): + mask = df_allen_colours["allenID"] == row["allenID"] + current_region_row = df_allen_colours[mask] + current_region_name = current_region_row["name"].values + current_region_red = current_region_row["r"].values + current_region_green = current_region_row["g"].values + current_region_blue = current_region_row["b"].values + + row["name"] = current_region_name[0] + row["r"] = current_region_red[0] + row["g"] = current_region_green[0] + row["b"] = current_region_blue[0] + + new_rows.append(row) + +df_counts_per_label_name = pd.DataFrame(new_rows) +#df_counts_per_label_name + +# write to csv file +df_counts_per_label_name.to_csv("../outputs/counts_per_allenID.csv", sep=";", na_rep='', index= False) + +#r = df_allen_colours["r"] +#g = df_allen_colours["g"] +#b = df_allen_colours["b"] +#region_name = df_allen_colours["name"] + +#while we havent added it here it would be good to next quantify the number of cells for each label. + +time_taken = datetime.now() - startTime + +print(f"time taken was: {time_taken}") + + +#get centroids and areas returns a list of objects and the center coordinate. + +#we need to deform the center coordinate according to visualign deformations¨ + +#we need to then transform the coordinate into atlas space + +#and then save labels like before. \ No newline at end of file