Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
PyNutil
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Harry Carey
PyNutil
Commits
4464958b
Commit
4464958b
authored
1 year ago
by
Harry Carey
Browse files
Options
Downloads
Patches
Plain Diff
removed redundant functions introduced by copilot
parent
20f21c5b
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
PyNutil/counting_and_load.py
+1
-1
1 addition, 1 deletion
PyNutil/counting_and_load.py
PyNutil/main.py
+122
-21
122 additions, 21 deletions
PyNutil/main.py
PyNutil/read_and_write.py
+1
-1
1 addition, 1 deletion
PyNutil/read_and_write.py
with
124 additions
and
23 deletions
PyNutil/counting_and_load.py
+
1
−
1
View file @
4464958b
...
...
@@ -92,4 +92,4 @@ def flat_to_array(flat_file):
with open(base+
"
.flat
"
,
"
rb
"
) as f:
b,w,h=struct.unpack(
"
>BII
"
,f.read(9))
data=struct.unpack(
"
>
"
+(
"
xBH
"
[b]*(w*h)),f.read(b*w*h))
"""
\ No newline at end of file
"""
This diff is collapsed.
Click to expand it.
PyNutil/main.py
+
122
−
21
View file @
4464958b
...
...
@@ -8,6 +8,68 @@ from datetime import datetime
class
PyNutil
:
"""
A utility class for working with brain atlases and segmentation data.
Parameters
----------
segmentation_folder : str
The path to the folder containing the segmentation data.
alignment_json : str
The path to the alignment JSON file.
colour : int
The colour of the segmentation data to extract.
volume_path : str
The name of the atlas volume to use.
settings_file : str, optional
The path to a JSON file containing the above parameters.
Raises
------
ValueError
If any of the required parameters are None.
Attributes
----------
segmentation_folder : str
The path to the folder containing the segmentation data.
alignment_json : str
The path to the alignment JSON file.
colour : int
The colour of the segmentation data to extract.
atlas : str
The name of the atlas volume being used.
atlas_volume : numpy.ndarray
The 3D array representing the atlas volume.
atlas_labels : pandas.DataFrame
A DataFrame containing the labels for the atlas volume.
pixel_points : numpy.ndarray
An array of pixel coordinates extracted from the segmentation data.
labeled_points : numpy.ndarray
An array of labeled pixel coordinates.
label_df : pandas.DataFrame
A DataFrame containing the pixel counts per region.
Methods
-------
load_atlas_data()
Loads the atlas volume and labels from disk.
get_coordinates(non_linear=True, method=
'
all
'
)
Extracts pixel coordinates from the segmentation data.
extract_coordinates(non_linear, method)
Extracts pixel coordinates from the segmentation data but is only used internally.
quantify_coordinates()
Quantifies the pixel coordinates by region.
label_points()
Labels the pixel coordinates by region but is only used internally.
count_pixels_per_region(labeled_points)
Counts the number of pixels per region but is only used internally.
save_analysis(output_folder)
Saves the pixel coordinates and pixel counts to disk.
write_points_to_meshview(output_folder)
Writes the pixel coordinates and labels to a JSON file for visualization but is only used internally.
"""
def
__init__
(
self
,
segmentation_folder
=
None
,
...
...
@@ -46,6 +108,14 @@ class PyNutil:
self
.
atlas_volume
,
self
.
atlas_labels
=
self
.
load_atlas_data
()
def
load_atlas_data
(
self
):
"""
Loads the atlas volume and labels from disk.
Returns
-------
tuple
A tuple containing the atlas volume as a numpy.ndarray and the atlas labels as a pandas.DataFrame.
"""
# load the metadata json as well as the path to stored data files
# this could potentially be moved into init
atlas_root_path
=
self
.
config
[
"
annotation_volume_directory
"
]
...
...
@@ -62,6 +132,22 @@ class PyNutil:
return
atlas_volume
,
atlas_labels
def
get_coordinates
(
self
,
non_linear
=
True
,
method
=
"
all
"
):
"""
Extracts pixel coordinates from the segmentation data.
Parameters
----------
non_linear : bool, optional
Whether to use non-linear registration. Default is True.
method : str, optional
The method to use for extracting coordinates. Valid options are
'
per_pixel
'
,
'
per_object
'
, or
'
all
'
.
Default is
'
all
'
.
Raises
------
ValueError
If the specified method is not recognized.
"""
if
not
hasattr
(
self
,
"
atlas_volume
"
):
raise
ValueError
(
"
Please run build_quantifier before running get_coordinates
"
...
...
@@ -71,37 +157,55 @@ class PyNutil:
f
"
method
{
method
}
not recognised, valid methods are: per_pixel, per_object, or all
"
)
print
(
"
extracting coordinates
"
)
pixel_points
=
self
.
extract_coordinates
(
non_linear
,
method
)
self
.
pixel_points
=
pixel_points
def
extract_coordinates
(
self
,
non_linear
,
method
):
return
folder_to_atlas_space
(
pixel_points
=
folder_to_atlas_space
(
self
.
segmentation_folder
,
self
.
alignment_json
,
pixel_id
=
self
.
colour
,
non_linear
=
non_linear
,
method
=
method
,
)
self
.
pixel_points
=
pixel_points
def
quantify_coordinates
(
self
):
"""
Quantifies the pixel coordinates by region.
Raises
------
ValueError
If the pixel coordinates have not been extracted.
"""
if
not
hasattr
(
self
,
"
pixel_points
"
):
raise
ValueError
(
"
Please run get_coordinates before running quantify_coordinates
"
)
print
(
"
quantifying coordinates
"
)
labeled_points
=
self
.
label_points
()
self
.
label_df
=
self
.
count_pixels_per_region
(
labeled_points
)
labeled_points
=
label_points
(
self
.
pixel_points
,
self
.
atlas_volume
,
scale_factor
=
1
)
self
.
label_df
=
pixel_count_per_region
(
labeled_points
,
self
.
atlas_labels
)
self
.
labeled_points
=
labeled_points
print
(
"
quantification complete ✅
"
)
def
label_points
(
self
):
return
label_points
(
self
.
pixel_points
,
self
.
atlas_volume
,
scale_factor
=
1
)
def
count_pixels_per_region
(
self
,
labeled_points
):
return
pixel_count_per_region
(
labeled_points
,
self
.
atlas_labels
)
def
save_analysis
(
self
,
output_folder
):
"""
Saves the pixel coordinates and pixel counts to different files in the specified
output folder.
Parameters
----------
output_folder : str
The path to the output folder.
Raises
------
ValueError
If the pixel coordinates have not been extracted.
"""
if
not
hasattr
(
self
,
"
pixel_points
"
):
raise
ValueError
(
"
Please run get_coordinates before running save_analysis
"
)
...
...
@@ -116,13 +220,10 @@ class PyNutil:
)
else
:
self
.
write_points_to_meshview
(
output_folder
)
print
(
"
analysis saved ✅
"
)
def
write_points_to_meshview
(
self
,
output_folder
):
write_points_to_meshview
(
self
.
pixel_points
,
self
.
labeled_points
,
output_folder
+
"
/pixels_meshview.json
"
,
self
.
atlas_labels
,
)
\ No newline at end of file
write_points_to_meshview
(
self
.
pixel_points
,
self
.
labeled_points
,
output_folder
+
"
/pixels_meshview.json
"
,
self
.
atlas_labels
,
)
print
(
"
analysis saved ✅
"
)
\ No newline at end of file
This diff is collapsed.
Click to expand it.
PyNutil/read_and_write.py
+
1
−
1
View file @
4464958b
...
...
@@ -112,4 +112,4 @@ def files_in_directory(directory):
def
read_atlas_volume
(
atlas_volume_path
):
data
,
header
=
nrrd
.
read
(
atlas_volume_path
)
return
data
\ No newline at end of file
return
data
This diff is collapsed.
Click to expand it.
Preview
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment