Skip to content

Commit

Permalink
bug fix: dir_save must be specified to do visualizations
Browse files Browse the repository at this point in the history
  • Loading branch information
RichieHakim committed Aug 10, 2024
1 parent c67c02c commit 799c9e6
Showing 1 changed file with 69 additions and 69 deletions.
138 changes: 69 additions & 69 deletions roicat/pipelines.py
Original file line number Diff line number Diff line change
Expand Up @@ -306,75 +306,75 @@ def choose_clustering_method(method='automatic', n_sessions_switch=8, n_sessions
)


## Visualize results
### Save some figures

#### Save FOV_images as .png files
def save_image(array, path, normalize=True):
## Use PIL to save the image
from PIL import Image
Path(path).parent.mkdir(parents=True, exist_ok=True)
Image.fromarray((np.array(array / array.max() if normalize else array) * 255).astype(np.uint8)).save(path)
[save_image(array, str(Path(dir_save).resolve() / 'visualization' / 'FOV_images' / f'FOV_images_{ii}.png') ) for ii, array in enumerate(data.FOV_images)]
[save_image(array, str(Path(dir_save).resolve() / 'visualization' / 'FOV_images_aligned_geometric' / f'FOV_images_aligned_geometric_{ii}.png') ) for ii, array in enumerate(aligner.ims_registered_geo)]
[save_image(array, str(Path(dir_save).resolve() / 'visualization' / 'FOV_images_aligned_nonrigid' / f'FOV_images_aligned_nonrigid_{ii}.png') ) for ii, array in enumerate(aligner.ims_registered_nonrigid)]
[save_image(array, str(Path(dir_save).resolve() / 'visualization' / 'ROIs' / f'ROIs_{ii}.png') ) for ii, array in enumerate(data.get_maxIntensityProjection_spatialFootprints())]
[save_image(array, str(Path(dir_save).resolve() / 'visualization' / 'ROIs_aligned' / f'ROIs_aligned_{ii}.png') ) for ii, array in enumerate(aligner.get_ROIsAligned_maxIntensityProjection(normalize=True))]
[save_image(array, str(Path(dir_save).resolve() / 'visualization' / 'ROIs_aligned_blurred' / f'ROIs_aligned_blurred_{ii}.png') ) for ii, array in enumerate(blurrer.get_ROIsBlurred_maxIntensityProjection())]

#### Save some sample ROI images
[save_image(array, str(Path(dir_save).resolve() / 'visualization' / 'ROIs_sample' / f'ROIs_sample_{ii}.png') ) for ii, array in enumerate(roinet.ROI_images_rs[:100])]

#### Save the similarity graphy blocks
fig = sim.visualize_blocks()
(Path(dir_save).resolve() / 'visualization' / 'similarity_graph').mkdir(parents=True, exist_ok=True)
fig.savefig(str(Path(dir_save).resolve() / 'visualization' / 'similarity_graph' / 'blocks.png'))

#### Save the similarity / distance plots for the given conjunctive distance matrix kwargs
fig = clusterer.plot_distSame(kwargs_makeConjunctiveDistanceMatrix=kwargs_makeConjunctiveDistanceMatrix_best)
(Path(dir_save).resolve() / 'visualization' / 'clustering').mkdir(parents=True, exist_ok=True)
fig.savefig(str(Path(dir_save).resolve() / 'visualization' / 'clustering' / 'dist.png'))
fig, axs = clusterer.plot_similarity_relationships(
plots_to_show=[1,2,3],
max_samples=100000, ## Make smaller if it is running too slow
kwargs_scatter={'s':1, 'alpha':0.2},
kwargs_makeConjunctiveDistanceMatrix=kwargs_makeConjunctiveDistanceMatrix_best
)
(Path(dir_save).resolve() / 'visualization' / 'clustering').mkdir(parents=True, exist_ok=True)
fig.savefig(str(Path(dir_save).resolve() / 'visualization' / 'clustering' / 'similarity_relationships.png'))

#### Save the clustering results
fig, axs = tracking.clustering.plot_quality_metrics(
quality_metrics=quality_metrics,
labels=labels_squeezed,
n_sessions=data.n_sessions,
)
(Path(dir_save).resolve() / 'visualization' / 'clustering').mkdir(parents=True, exist_ok=True)
fig.savefig(str(Path(dir_save).resolve() / 'visualization' / 'clustering' / 'quality_metrics.png'))

### Save a gif of the ROIs
FOV_clusters = visualization.compute_colored_FOV(
spatialFootprints=[r.power(1.0) for r in results['ROIs']['ROIs_aligned']], ## Spatial footprint sparse arrays
FOV_height=results['ROIs']['frame_height'],
FOV_width=results['ROIs']['frame_width'],
labels=results["clusters"]["labels_bySession"], ## cluster labels
# labels=(np.array(results["clusters"]["labels"])!=-1).astype(np.int64), ## cluster labels
# alphas_labels=confidence*1.5, ## Set brightness of each cluster based on some 1-D array
# alphas_labels=(clusterer.quality_metrics['cluster_silhouette'] > 0) * (clusterer.quality_metrics['cluster_intra_means'] > 0.4),
# alphas_sf=clusterer.quality_metrics['sample_silhouette'], ## Set brightness of each ROI based on some 1-D array
)
helpers.save_gif(
array=helpers.add_text_to_images(
images=[(f * 255).astype(np.uint8) for f in FOV_clusters],
text=[[f"{ii}",] for ii in range(len(FOV_clusters))],
font_size=3,
line_width=10,
position=(30, 90),
),
path=str(Path(dir_save).resolve() / 'visualization' / 'FOV_clusters.gif'),
frameRate=10.0,
loop=0,
)
## Visualize results
### Save some figures
#### Save FOV_images as .png files
def save_image(array, path, normalize=True):
## Use PIL to save the image
from PIL import Image
Path(path).parent.mkdir(parents=True, exist_ok=True)
Image.fromarray((np.array(array / array.max() if normalize else array) * 255).astype(np.uint8)).save(path)
[save_image(array, str(Path(dir_save).resolve() / 'visualization' / 'FOV_images' / f'FOV_images_{ii}.png') ) for ii, array in enumerate(data.FOV_images)]
[save_image(array, str(Path(dir_save).resolve() / 'visualization' / 'FOV_images_aligned_geometric' / f'FOV_images_aligned_geometric_{ii}.png') ) for ii, array in enumerate(aligner.ims_registered_geo)]
[save_image(array, str(Path(dir_save).resolve() / 'visualization' / 'FOV_images_aligned_nonrigid' / f'FOV_images_aligned_nonrigid_{ii}.png') ) for ii, array in enumerate(aligner.ims_registered_nonrigid)]
[save_image(array, str(Path(dir_save).resolve() / 'visualization' / 'ROIs' / f'ROIs_{ii}.png') ) for ii, array in enumerate(data.get_maxIntensityProjection_spatialFootprints())]
[save_image(array, str(Path(dir_save).resolve() / 'visualization' / 'ROIs_aligned' / f'ROIs_aligned_{ii}.png') ) for ii, array in enumerate(aligner.get_ROIsAligned_maxIntensityProjection(normalize=True))]
[save_image(array, str(Path(dir_save).resolve() / 'visualization' / 'ROIs_aligned_blurred' / f'ROIs_aligned_blurred_{ii}.png') ) for ii, array in enumerate(blurrer.get_ROIsBlurred_maxIntensityProjection())]
#### Save some sample ROI images
[save_image(array, str(Path(dir_save).resolve() / 'visualization' / 'ROIs_sample' / f'ROIs_sample_{ii}.png') ) for ii, array in enumerate(roinet.ROI_images_rs[:100])]
#### Save the similarity graphy blocks
fig = sim.visualize_blocks()
(Path(dir_save).resolve() / 'visualization' / 'similarity_graph').mkdir(parents=True, exist_ok=True)
fig.savefig(str(Path(dir_save).resolve() / 'visualization' / 'similarity_graph' / 'blocks.png'))
#### Save the similarity / distance plots for the given conjunctive distance matrix kwargs
fig = clusterer.plot_distSame(kwargs_makeConjunctiveDistanceMatrix=kwargs_makeConjunctiveDistanceMatrix_best)
(Path(dir_save).resolve() / 'visualization' / 'clustering').mkdir(parents=True, exist_ok=True)
fig.savefig(str(Path(dir_save).resolve() / 'visualization' / 'clustering' / 'dist.png'))
fig, axs = clusterer.plot_similarity_relationships(
plots_to_show=[1,2,3],
max_samples=100000, ## Make smaller if it is running too slow
kwargs_scatter={'s':1, 'alpha':0.2},
kwargs_makeConjunctiveDistanceMatrix=kwargs_makeConjunctiveDistanceMatrix_best
)
(Path(dir_save).resolve() / 'visualization' / 'clustering').mkdir(parents=True, exist_ok=True)
fig.savefig(str(Path(dir_save).resolve() / 'visualization' / 'clustering' / 'similarity_relationships.png'))
#### Save the clustering results
fig, axs = tracking.clustering.plot_quality_metrics(
quality_metrics=quality_metrics,
labels=labels_squeezed,
n_sessions=data.n_sessions,
)
(Path(dir_save).resolve() / 'visualization' / 'clustering').mkdir(parents=True, exist_ok=True)
fig.savefig(str(Path(dir_save).resolve() / 'visualization' / 'clustering' / 'quality_metrics.png'))
### Save a gif of the ROIs
FOV_clusters = visualization.compute_colored_FOV(
spatialFootprints=[r.power(1.0) for r in results['ROIs']['ROIs_aligned']], ## Spatial footprint sparse arrays
FOV_height=results['ROIs']['frame_height'],
FOV_width=results['ROIs']['frame_width'],
labels=results["clusters"]["labels_bySession"], ## cluster labels
# labels=(np.array(results["clusters"]["labels"])!=-1).astype(np.int64), ## cluster labels
# alphas_labels=confidence*1.5, ## Set brightness of each cluster based on some 1-D array
# alphas_labels=(clusterer.quality_metrics['cluster_silhouette'] > 0) * (clusterer.quality_metrics['cluster_intra_means'] > 0.4),
# alphas_sf=clusterer.quality_metrics['sample_silhouette'], ## Set brightness of each ROI based on some 1-D array
)
helpers.save_gif(
array=helpers.add_text_to_images(
images=[(f * 255).astype(np.uint8) for f in FOV_clusters],
text=[[f"{ii}",] for ii in range(len(FOV_clusters))],
font_size=3,
line_width=10,
position=(30, 90),
),
path=str(Path(dir_save).resolve() / 'visualization' / 'FOV_clusters.gif'),
frameRate=10.0,
loop=0,
)



Expand Down

0 comments on commit 799c9e6

Please sign in to comment.