Nearest Neighbor Analysis#
[1]:
%load_ext autoreload
%autoreload 2
[2]:
import numpy as np
import pandas as pd
from cryocat.core import cryomotl
from cryocat.utils import geom
from cryocat.analysis import visplot
from cryocat.analysis import nnana as nn
from cryocat.analysis import ribana as ra
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib import colors
from matplotlib import gridspec
from matplotlib import rc
import matplotlib as mtl
[3]:
mtl.rcParams['font.sans-serif'] = "Arial"
mtl.rcParams['font.family'] = "sans-serif"
plt.rcParams['svg.fonttype'] = 'none'
sns.set_palette('colorblind')
[4]:
import warnings
warnings.filterwarnings('ignore')
[6]:
#motl_ribo2: ribosome center
#Expected run time for demo on a "normal" desktop computer: less than 30 minutes.
motl_tric = cryomotl.Motl.load('./inputs/tric.em')
motl_ribo2 = cryomotl.Motl.load('./inputs/ribosome.em')
pixel_size = 0.2446
[7]:
stats_ribo2 = nn.get_nn_stats(motl_ribo2, motl_tric, pixel_size = pixel_size)
[8]:
df2 = stats_ribo2
#Grouping by 'subtomo_nn_idx' and finding the row with the smallest distance
stats_ribo2min = df2.loc[df2.groupby('subtomo_nn_idx')['distance'].idxmin()]
[9]:
stats_ribo2min70 = stats_ribo2min[stats_ribo2min['distance'] < 70]
[10]:
nn.plot_nn_rot_coord_df(stats_ribo2min70, displ_threshold=70, marker_size=2, title = 'Ribo stats - rotated', output_name = 'wtribocen_tricop-70nm.svg')
[11]:
stats_tric_tric = ra.get_nn_stats(motl_tric, motl_tric, pixel_size = pixel_size)
visplot.plot_orientational_distribution(stats_tric_tric[['rot_x','rot_y', 'rot_z']].values, graph_title='tric-tric angle', radius_bin=11, theta_bin=13)