def create_group_cluster_maps(gsm_file, clusters_G_file, roi_mask_file): """ Loops through every row of cluster_voxel_scores and creates nifti files Parameters ---------- gsm_file- a cluster number by voxel measure of the stability of group level solutions. clusters_G_file- taken from igcm output roi_mask_file- file you want to transform the data back into. Returns ------- Creates NIFTI files for all the gsm file for the group across all clusters """ import numpy as np import basc import utils group_stability_mat = np.asarray([np.load(gsm_file)]) group_stability_set = group_stability_mat[0] #nSubjects = indiv_stability_set.shape[0] nVoxels = group_stability_set.shape[1] clusters_G = np.load(clusters_G_file) group_cluster_stability = [] cluster_ids = np.unique(clusters_G) nClusters = cluster_ids.shape[0] print("igcm debug 2") # cluster_voxel_scores = np.zeros((nSubjects,nClusters, nVoxels)) # k_mask=np.zeros((nSubjects,nVoxels, nVoxels)) group_cluster_voxel_scores = np.zeros((nClusters, nVoxels)) k_mask = np.zeros((nVoxels, nVoxels)) #for i in range(nSubjects): group_cluster_voxel_scores[:, :], k_mask[:, :] = utils.cluster_matrix_average( group_stability_set, clusters_G) for i in cluster_ids: group_cluster_stability.append( group_cluster_voxel_scores[(i - 1), clusters_G == i].mean()) for k in cluster_ids: print( 'k equals \n\n', k, '\n\n' ) #Loops through every row of cluster_voxel_scores and creates nifti files print('clustervoxelscores equals \n\n', group_cluster_voxel_scores[k - 1, :], '\n\n') A, B = basc.ndarray_to_vol( group_cluster_voxel_scores[k - 1, :], roi_mask_file, roi_mask_file, 'group_level_cluster%i_stability.nii.gz' % k) print('Output A equals', A, '\n\n') return
def test_cluster_matrix_average(): import utils import basc import matplotlib.pyplot as plt roi_mask_nparray = 'empty' blobs = generate_blobs() n_clusters = 3 similarity_metric = 'correlation' ism = utils.individual_stability_matrix(blobs, 100, n_clusters, similarity_metric) y_predict = utils.cluster_timeseries(blobs, roi_mask_nparray, n_clusters, similarity_metric, affinity_threshold=0.0, neighbors=10) cluster_voxel_scores, K_mask = utils.cluster_matrix_average(ism, y_predict) plt.imshow(K_mask)
#CLUSTER THE RESULTING SIMILARITY MATRIX #PLOT THE HEAT MAP AND THE DENDROGRAM CLUSTERING import os import numpy as np import utils import basc gsm=np.load('/Users/aki.nikolaidis/Dropbox/1_Projects/1_Research/2_CMI_BG_DEV/1_BASC/Data/YeoNetworksGSMs/SelfGSM.npy') clusters_G=np.load('/Users/aki.nikolaidis/Dropbox/1_Projects/1_Research/2_CMI_BG_DEV/1_BASC/Data/YeoNetworksGSMs/Selfclusters_G.npy') nClusters=5 nVoxels=6171 cluster_voxel_scoresSelf = np.zeros((nClusters, nVoxels)) k_mask=np.zeros((nVoxels, nVoxels)) cluster_voxel_scoresSelf[:,:], k_mask[:,:] = utils.cluster_matrix_average(gsm, clusters_G) #Plotly Code import plotly import plotly.plotly as py from plotly.tools import FigureFactory as FF plotly.tools.set_credentials_file(username='******', api_key='WnYhFXtIHn2FHv1gbTLH') import numpy as np X = np.random.rand(15, 15) dendro = FF.create_dendrogram(X) dendro['layout'].update({'width':800, 'height':500}) py.plot(dendro, filename='simple_dendrogram')
def ism_nifti(roi_mask_file, n_clusters, out_dir): import utils import basc import numpy as np import os #Individual subject ISM to NIFTI and individual #Inputs Subject ISM, ROIFile, #for i in range(nSubjects): ismdir = out_dir + '/workflow_output/basc_workflow_runner/basc/individual_stability_matrices/mapflow/' os.chdir(ismdir) os.chdir( out_dir + '/workflow_output/basc_workflow_runner/basc/individual_stability_matrices/mapflow/' ) subdirs_all = [x[1] for x in os.walk(ismdir)] subdirs = subdirs_all[0] for subdir in subdirs: os.chdir(ismdir + subdir) ism = np.load(ismdir + subdir + '/individual_stability_matrix.npy') clusters_ism = utils.cluster_timeseries( ism, n_clusters, similarity_metric='correlation', affinity_threshold=0.0) clusters_ism = clusters_ism + 1 niftifilename = ismdir + subdir + '/ism_clust.nii.gz' clusters_ism_file = ismdir + subdir + '/clusters_ism.npy' #Saving Individual Level Cluster Solution ndarray_to_vol(clusters_ism, roi_mask_file, roi_mask_file, niftifilename) np.save(clusters_ism_file, clusters_ism) cluster_ids = np.unique(clusters_ism) nClusters = cluster_ids.shape[0] nVoxels = clusters_ism.shape[0] ism_cluster_voxel_scores = np.zeros((nClusters, nVoxels)) k_mask = np.zeros((nVoxels, nVoxels)) ism_cluster_voxel_scores[:, :], k_mask[:, :] = utils.cluster_matrix_average( ism, clusters_ism) ism_cluster_voxel_scores = ism_cluster_voxel_scores.astype("uint8") ind_cluster_stability = [] ind_cluster_INSTABILITY = [] ind_cluster_stability_Diff = [] ind_cluster_stability_file = os.path.join(os.getcwd(), 'ind_cluster_stability.npy') ind_cluster_INSTABILITY_file = os.path.join( os.getcwd(), 'ind_cluster_INSTABILITY.npy') ind_cluster_stability_Diff_file = os.path.join( os.getcwd(), 'ind_cluster_stability_Diff.npy') ism_cluster_voxel_scores_file = os.path.join( os.getcwd(), 'ism_cluster_voxel_scores.npy') os.chdir(ismdir + '/' + subdir) for k in cluster_ids: ind_cluster_stability.append( ism_cluster_voxel_scores[(k - 1), clusters_ism == k].mean()) ind_cluster_INSTABILITY.append( ism_cluster_voxel_scores[(k - 1), clusters_ism != k].mean()) A, B = basc.ndarray_to_vol( ism_cluster_voxel_scores[k - 1, :], roi_mask_file, roi_mask_file, 'ism_single_cluster%i_stability.nii.gz' % k) ind_cluster_stability = np.asarray(ind_cluster_stability) ind_cluster_INSTABILITY = np.asarray(ind_cluster_INSTABILITY) ind_cluster_stability_Diff = ind_cluster_stability - ind_cluster_INSTABILITY np.save(ind_cluster_stability_file, ind_cluster_stability) np.save(ind_cluster_INSTABILITY_file, ind_cluster_INSTABILITY) np.save(ind_cluster_stability_Diff_file, ind_cluster_stability_Diff) np.save(ism_cluster_voxel_scores_file, ism_cluster_voxel_scores) return
def ism_nifti(roi_mask_file, n_clusters, out_dir): #NEED TO CHANGE THIS SCRIPT TO: #APPLY GROUP LEVEL CLUSTER LABELS TO INDIVIDUAL LEVELS # #EXTRACT VOXELWISE STABILITY INFO FOR THAT CLUSTER ACROSS ALL PARTICIPANTS #USE KMASK TO CREATE THAT CLUSTER INFORMATION # #Loop over all ISMs, # load ISM, # loop over all clusters, # perform calculation, # add calculation to running tabs. # #Calculate mean at each voxel and CV- # output a voxelwise mean stability and CV Nifti map for each cluster. """ Calculate the individual level stability and instability maps for each of the group clusters. Create Nifti files for each individual cluster's stability map Parameters ---------- roi_mask_file: the mask of the region to calculate stability for. n_clusters: the number of clusters calculated out_dir: the directory to output the saved nifti images Returns ------- Creates NIFTI files for all the ism cluster stability maps """ import utils import basc import numpy as np import os from pathlib import Path #*ACTION - FIGURE OUT IF CAN BE ADDED TO BASC WORKFLOW, OR DIFFERENT WORKFLOW? #Individual subject ISM to NIFTI and individual #Inputs Subject ISM, ROIFile, #for i in range(nSubjects): ismdir=out_dir + '/workflow_output/basc_workflow_runner/basc/individual_stability_matrices/mapflow/' os.chdir(ismdir) subdirs_all = [x[1] for x in os.walk(ismdir)] subdirs=subdirs_all[0] roi_mask_nparray = nb.load(roi_mask_file).get_data().astype('float32').astype('bool') for subdir in subdirs: os.chdir(ismdir + subdir) ind_cluster_stability_file = os.path.join(os.getcwd(), 'ind_cluster_stability.npy') ind_cluster_INSTABILITY_file = os.path.join(os.getcwd(), 'ind_cluster_INSTABILITY.npy') ind_cluster_stability_Diff_file = os.path.join(os.getcwd(), 'ind_cluster_stability_Diff.npy') ism_cluster_voxel_scores_file = os.path.join(os.getcwd(), 'ism_cluster_voxel_scores.npy') end_file = Path(ism_cluster_voxel_scores_file) if end_file.exists(): return else: ism=np.load(ismdir + subdir + '/individual_stability_matrix.npy') clusters_ism = utils.cluster_timeseries(ism, roi_mask_nparray, n_clusters, similarity_metric = 'correlation', affinity_threshold=0.0, cluster_method='ward') clusters_ism = clusters_ism+1 niftifilename = ismdir + subdir +'/ism_clust.nii.gz' clusters_ism_file = ismdir + subdir +'/clusters_ism.npy' #Saving Individual Level Cluster Solution ndarray_to_vol(clusters_ism, roi_mask_file, roi_mask_file, niftifilename) np.save(clusters_ism_file, clusters_ism) cluster_ids = np.unique(clusters_ism) nClusters = cluster_ids.shape[0] nVoxels = clusters_ism.shape[0] ism_cluster_voxel_scores = np.zeros((nClusters, nVoxels)) k_mask=np.zeros((nVoxels, nVoxels)) ism_cluster_voxel_scores[:,:], k_mask[:,:] = utils.cluster_matrix_average(ism, clusters_ism) ism_cluster_voxel_scores=ism_cluster_voxel_scores.astype("uint8") ind_cluster_stability=[] ind_cluster_INSTABILITY=[] ind_cluster_stability_Diff=[] # ind_cluster_stability_file = os.path.join(os.getcwd(), 'ind_cluster_stability.npy') # ind_cluster_INSTABILITY_file = os.path.join(os.getcwd(), 'ind_cluster_INSTABILITY.npy') # ind_cluster_stability_Diff_file = os.path.join(os.getcwd(), 'ind_cluster_stability_Diff.npy') # ism_cluster_voxel_scores_file = os.path.join(os.getcwd(), 'ism_cluster_voxel_scores.npy') # os.chdir(ismdir + '/' + subdir)
individual=path.split(os.sep)[15] matrices=individual.split('_')[3] subject=matrices[8:] for subdir in subdirs: ism=np.load(ismdir + subdir + '/individual_stability_matrix.npy') cluster_ids = np.unique(group_labels) nClusters = cluster_ids.shape[0] nVoxels = ism.shape[0] os.chdir(ismdir + subdir) k_mask=np.zeros((nVoxels, nVoxels)) ism_cluster_voxel_scores = np.zeros((nClusters, nVoxels)) ism_cluster_voxel_scores[:,:], k_mask[:,:] = utils.cluster_matrix_average(ism, group_labels) ism_cluster_voxel_scores=ism_cluster_voxel_scores.astype("uint8") ind_cluster_stability=[] ind_cluster_INSTABILITY=[] ind_cluster_stability_Diff=[] #import pdb; pdb.set_trace() for k in cluster_ids: ind_cluster_stability=ism_cluster_voxel_scores[(k-1),group_labels==k].mean() ind_cluster_INSTABILITY=ism_cluster_voxel_scores[(k-1),group_labels!=k].mean() ind_cluster_stability_Diff=ind_cluster_stability-ind_cluster_INSTABILITY #A, B = basc.ndarray_to_vol(gsm_cluster_voxel_scores[k-1,:], roi_mask_file, roi_mask_file, 'gsm_single_cluster%i_stability.nii.gz' % k) # PUT THE ADDING OF VALUES TO THE ALL_GROUP_CLUSTER_STABILITY DATAFRAME newdata=pd.DataFrame([[network, clusternum, k, subject, ind_cluster_stability, ind_cluster_INSTABILITY, ind_cluster_stability_Diff]],columns=['network', 'clusternum', 'k', 'subject', 'stability', 'instability', 'stability_Diff']) #import pdb; pdb.set_trace()
def gsm_nifti(roi_mask_file, n_clusters, out_dir): """ Calculate the group level stability and instability maps for each of the group clusters. Create Nifti files for each individual cluster's stability map Parameters ---------- roi_mask_file: the mask of the region to calculate stability for. n_clusters: the number of clusters calculated out_dir: the directory to output the saved nifti images Returns ------- Creates NIFTI files for all the gsm cluster stability maps """ import utils import basc import numpy as np import os #*ACTION - FIGURE OUT IF CAN BE ADDED TO BASC WORKFLOW, OR DIFFERENT WORKFLOW? #Individual subject ISM to NIFTI and individual #Inputs Subject ISM, ROIFile, roi_mask_nparray = nb.load(roi_mask_file).get_data().astype( 'float32').astype('bool') #for i in range(nSubjects): gsmdir = out_dir + '/workflow_output/basc_workflow_runner/basc/join_group_stability/' os.chdir(gsmdir) gsm = np.load(gsmdir + '/group_stability_matrix.npy') clusters_gsm = utils.cluster_timeseries(gsm, roi_mask_nparray, n_clusters, similarity_metric='correlation', affinity_threshold=0.0, cluster_method='ward') clusters_gsm = clusters_gsm + 1 #niftifilename = gsmdir +'/gsm_clust.nii.gz' #clusters_gsm_file = gsmdir +'/clusters_gsm.npy' #Saving Individual Level Cluster Solution # ndarray_to_vol(clusters_gsm, roi_mask_file, roi_mask_file, niftifilename) # np.save(clusters_gsm_file, clusters_gsm) cluster_ids = np.unique(clusters_gsm) nClusters = cluster_ids.shape[0] nVoxels = clusters_gsm.shape[0] gsm_cluster_voxel_scores = np.zeros((nClusters, nVoxels)) k_mask = np.zeros((nVoxels, nVoxels)) gsm_cluster_voxel_scores[:, :], k_mask[:, :] = utils.cluster_matrix_average( gsm, clusters_gsm) gsm_cluster_voxel_scores = gsm_cluster_voxel_scores.astype("uint8") grp_cluster_stability = [] grp_cluster_INSTABILITY = [] grp_cluster_stability_Diff = [] grp_cluster_stability_file = os.path.join(os.getcwd(), 'grp_cluster_stability.npy') grp_cluster_INSTABILITY_file = os.path.join(os.getcwd(), 'grp_cluster_INSTABILITY.npy') grp_cluster_stability_Diff_file = os.path.join( os.getcwd(), 'grp_cluster_stability_Diff.npy') gsm_cluster_voxel_scores_file = os.path.join( os.getcwd(), 'gsm_cluster_voxel_scores.npy') for k in cluster_ids: grp_cluster_stability.append( gsm_cluster_voxel_scores[(k - 1), clusters_gsm == k].mean()) grp_cluster_INSTABILITY.append( gsm_cluster_voxel_scores[(k - 1), clusters_gsm != k].mean()) A, B = basc.ndarray_to_vol(gsm_cluster_voxel_scores[k - 1, :], roi_mask_file, roi_mask_file, 'gsm_single_cluster%i_stability.nii.gz' % k) grp_cluster_stability = np.asarray(grp_cluster_stability) grp_cluster_INSTABILITY = np.asarray(grp_cluster_INSTABILITY) grp_cluster_stability_Diff = grp_cluster_stability - grp_cluster_INSTABILITY np.save(grp_cluster_stability_file, grp_cluster_stability) np.save(grp_cluster_INSTABILITY_file, grp_cluster_INSTABILITY) np.save(grp_cluster_stability_Diff_file, grp_cluster_stability_Diff) np.save(gsm_cluster_voxel_scores_file, gsm_cluster_voxel_scores) return
def ism_nifti(roi_mask_file, n_clusters, out_dir): """ Calculate the individual level stability and instability maps for each of the group clusters. Create Nifti files for each individual cluster's stability map Parameters ---------- roi_mask_file: the mask of the region to calculate stability for. n_clusters: the number of clusters calculated out_dir: the directory to output the saved nifti images Returns ------- Creates NIFTI files for all the ism cluster stability maps """ import utils import basc import numpy as np import os from pathlib import Path #*ACTION - FIGURE OUT IF CAN BE ADDED TO BASC WORKFLOW, OR DIFFERENT WORKFLOW? #Individual subject ISM to NIFTI and individual #Inputs Subject ISM, ROIFile, #for i in range(nSubjects): ismdir = out_dir + '/workflow_output/basc_workflow_runner/basc/individual_stability_matrices/mapflow/' os.chdir(ismdir) subdirs_all = [x[1] for x in os.walk(ismdir)] subdirs = subdirs_all[0] roi_mask_nparray = nb.load(roi_mask_file).get_data().astype( 'float32').astype('bool') for subdir in subdirs: os.chdir(ismdir + subdir) ind_cluster_stability_file = os.path.join(os.getcwd(), 'ind_cluster_stability.npy') ind_cluster_INSTABILITY_file = os.path.join( os.getcwd(), 'ind_cluster_INSTABILITY.npy') ind_cluster_stability_Diff_file = os.path.join( os.getcwd(), 'ind_cluster_stability_Diff.npy') ism_cluster_voxel_scores_file = os.path.join( os.getcwd(), 'ism_cluster_voxel_scores.npy') end_file = Path(ism_cluster_voxel_scores_file) if end_file.exists(): return else: ism = np.load(ismdir + subdir + '/individual_stability_matrix.npy') clusters_ism = utils.cluster_timeseries( ism, roi_mask_nparray, n_clusters, similarity_metric='correlation', affinity_threshold=0.0, cluster_method='ward') clusters_ism = clusters_ism + 1 niftifilename = ismdir + subdir + '/ism_clust.nii.gz' clusters_ism_file = ismdir + subdir + '/clusters_ism.npy' #Saving Individual Level Cluster Solution ndarray_to_vol(clusters_ism, roi_mask_file, roi_mask_file, niftifilename) np.save(clusters_ism_file, clusters_ism) cluster_ids = np.unique(clusters_ism) nClusters = cluster_ids.shape[0] nVoxels = clusters_ism.shape[0] ism_cluster_voxel_scores = np.zeros((nClusters, nVoxels)) k_mask = np.zeros((nVoxels, nVoxels)) ism_cluster_voxel_scores[:, :], k_mask[:, :] = utils.cluster_matrix_average( ism, clusters_ism) ism_cluster_voxel_scores = ism_cluster_voxel_scores.astype("uint8") ind_cluster_stability = [] ind_cluster_INSTABILITY = [] ind_cluster_stability_Diff = [] # ind_cluster_stability_file = os.path.join(os.getcwd(), 'ind_cluster_stability.npy') # ind_cluster_INSTABILITY_file = os.path.join(os.getcwd(), 'ind_cluster_INSTABILITY.npy') # ind_cluster_stability_Diff_file = os.path.join(os.getcwd(), 'ind_cluster_stability_Diff.npy') # ism_cluster_voxel_scores_file = os.path.join(os.getcwd(), 'ism_cluster_voxel_scores.npy') # os.chdir(ismdir + '/' + subdir) # for k in cluster_ids: # ind_cluster_stability.append(ism_cluster_voxel_scores[(k-1),clusters_ism==k].mean()) # ind_cluster_INSTABILITY.append(ism_cluster_voxel_scores[(k-1),clusters_ism!=k].mean()) # A, B = basc.ndarray_to_vol(ism_cluster_voxel_scores[k-1,:], roi_mask_file, roi_mask_file, 'ism_single_cluster%i_stability.nii.gz' % k) # ind_cluster_stability=np.asarray(ind_cluster_stability) # ind_cluster_INSTABILITY=np.asarray(ind_cluster_INSTABILITY) # ind_cluster_stability_Diff=ind_cluster_stability-ind_cluster_INSTABILITY # # np.save(ind_cluster_stability_file, ind_cluster_stability) # np.save(ind_cluster_INSTABILITY_file, ind_cluster_INSTABILITY) # np.save(ind_cluster_stability_Diff_file, ind_cluster_stability_Diff) # np.save(ism_cluster_voxel_scores_file, ism_cluster_voxel_scores) return
def individual_group_clustered_maps(indiv_stability_list, clusters_G, roi_mask_file): """ Calculate the individual stability maps of each subject based on the group stability clustering solution. Parameters ---------- indiv_stability_list : list of strings A length `N` list of file paths to numpy matrices of shape (`V`, `V`), `N` subjects, `V` voxels clusters_G : array_like Length `V` array of cluster assignments for each voxel Returns ------- individual_cluster_voxel_scores : list of strings A length `N` list of nifti files of the individual group clustered stability maps for each cluster. Temporal dimension of each file corresponds to each subject. """ ##*ACTION - CLEAN UP COMMENTED OUT CODE import os import numpy as np import utils import basc print('starting igcm') #import pdb; pdb.set_trace() print("igcm debug 1") # *REMOVE LINE* indiv_stability_set = np.asarray([np.load(ism_file) for ism_file in indiv_stability_list]) indiv_stability_mat = np.asarray([np.load(indiv_stability_list)]) indiv_stability_set = indiv_stability_mat[0] #*REMOVE LINE*nSubjects = indiv_stability_set.shape[0] nVoxels = indiv_stability_set.shape[1] cluster_ids = np.unique(clusters_G) nClusters = cluster_ids.shape[0] print("igcm debug 2") # *REMOVE LINE*cluster_voxel_scores = np.zeros((nSubjects,nClusters, nVoxels)) # *REMOVE LINE*k_mask=np.zeros((nSubjects,nVoxels, nVoxels)) cluster_voxel_scores = np.zeros((nClusters, nVoxels)) k_mask = np.zeros((nVoxels, nVoxels)) #*REMOVE LINE*for i in range(nSubjects): cluster_voxel_scores[:, :], k_mask[:, :] = utils.cluster_matrix_average( indiv_stability_set, clusters_G) #*REMOVE LINE*clust5[0,clusters_g==1].mean() print("igcm debug 3") #*REMOVE LINE*import pdb; pdb.set_trace() #*REMOVE LINE*cluster_voxel_scores[0,clusters_g==1].mean() ind_group_cluster_stability = [] icvs = [] icvs = np.asarray(1) icvs_idx = 0 print("igcm debug 4") #*REMOVE LINE*ind_group_cluster_stability.append(cluster_voxel_scores[(k-1),clusters_G==k].mean()) #*REMOVE LINE*icvs_idx += 1 for i in cluster_ids: ind_group_cluster_stability.append( cluster_voxel_scores[(i - 1), clusters_G == i].mean()) print("igcm debug 5") ind_group_cluster_stability = np.array(ind_group_cluster_stability) ind_group_cluster_stability = np.array([1, 2, 3, 4, 5]) #print( 'saving files: icvs') icvs_file = os.path.join(os.getcwd(), 'icvs.npy') #*REMOVE LINE*np.save(icvs_file, icvs) print('saving files: cluster_voxel_scores') cluster_voxel_scores = cluster_voxel_scores.astype("uint8") cluster_voxel_scores_file = os.path.join(os.getcwd(), 'cluster_voxel_scores.npy') #*REMOVE LINE*np.save(cluster_voxel_scores_file, cluster_voxel_scores) #REMOVE #import pdb; pdb.set_trace() #np.save(individualized_group_clusters_img_file, img) #return img_file, img #For each column, which row has the largest number? # Creates a single row with voxel labels. #print( 'saving files: k_mask') k_mask = k_mask.astype("bool_") k_mask_file = os.path.join(os.getcwd(), 'k_mask.npy') #*REMOVE LINE*np.save(k_mask_file, k_mask) #REMOVE #print( 'saving files: ind_group_cluster_stability') #ind_group_cluster_stability=ind_group_cluster_stability.astype("uint8") ind_group_cluster_stability_file = os.path.join( os.getcwd(), 'ind_group_cluster_stability.npy') np.save(ind_group_cluster_stability_file, ind_group_cluster_stability) #import pdb; pdb.set_trace() Individualized_Group_Cluster = np.argmax(cluster_voxel_scores, axis=0) + 1 individualized_group_clusters_img_file, img = basc.ndarray_to_vol( Individualized_Group_Cluster, roi_mask_file, roi_mask_file, os.path.join(os.getcwd(), 'IndividualizedGroupClusters.nii.gz')) img.to_filename(individualized_group_clusters_img_file) return icvs_file, cluster_voxel_scores_file, k_mask_file, ind_group_cluster_stability_file, individualized_group_clusters_img_file #icvs, cluster_voxel_scores, k_mask
def gsm_nifti(roi_mask_file, n_clusters, out_dir): import utils import basc import numpy as np import os #Individual subject ISM to NIFTI and individual #Inputs Subject ISM, ROIFile, #for i in range(nSubjects): gsmdir = out_dir + '/workflow_output/basc_workflow_runner/basc/join_group_stability/' os.chdir(gsmdir) gsm = np.load(gsmdir + '/group_stability_matrix.npy') clusters_gsm = utils.cluster_timeseries(gsm, n_clusters, similarity_metric='correlation', affinity_threshold=0.0) clusters_gsm = clusters_gsm + 1 #niftifilename = gsmdir +'/gsm_clust.nii.gz' #clusters_gsm_file = gsmdir +'/clusters_gsm.npy' #Saving Individual Level Cluster Solution # ndarray_to_vol(clusters_gsm, roi_mask_file, roi_mask_file, niftifilename) # np.save(clusters_gsm_file, clusters_gsm) cluster_ids = np.unique(clusters_gsm) nClusters = cluster_ids.shape[0] nVoxels = clusters_gsm.shape[0] gsm_cluster_voxel_scores = np.zeros((nClusters, nVoxels)) k_mask = np.zeros((nVoxels, nVoxels)) gsm_cluster_voxel_scores[:, :], k_mask[:, :] = utils.cluster_matrix_average( gsm, clusters_gsm) gsm_cluster_voxel_scores = gsm_cluster_voxel_scores.astype("uint8") grp_cluster_stability = [] grp_cluster_INSTABILITY = [] grp_cluster_stability_Diff = [] grp_cluster_stability_file = os.path.join(os.getcwd(), 'grp_cluster_stability.npy') grp_cluster_INSTABILITY_file = os.path.join(os.getcwd(), 'grp_cluster_INSTABILITY.npy') grp_cluster_stability_Diff_file = os.path.join( os.getcwd(), 'grp_cluster_stability_Diff.npy') gsm_cluster_voxel_scores_file = os.path.join( os.getcwd(), 'gsm_cluster_voxel_scores.npy') for k in cluster_ids: grp_cluster_stability.append( gsm_cluster_voxel_scores[(k - 1), clusters_gsm == k].mean()) grp_cluster_INSTABILITY.append( gsm_cluster_voxel_scores[(k - 1), clusters_gsm != k].mean()) A, B = basc.ndarray_to_vol(gsm_cluster_voxel_scores[k - 1, :], roi_mask_file, roi_mask_file, 'gsm_single_cluster%i_stability.nii.gz' % k) grp_cluster_stability = np.asarray(grp_cluster_stability) grp_cluster_INSTABILITY = np.asarray(grp_cluster_INSTABILITY) grp_cluster_stability_Diff = grp_cluster_stability - grp_cluster_INSTABILITY np.save(grp_cluster_stability_file, grp_cluster_stability) np.save(grp_cluster_INSTABILITY_file, grp_cluster_INSTABILITY) np.save(grp_cluster_stability_Diff_file, grp_cluster_stability_Diff) np.save(gsm_cluster_voxel_scores_file, gsm_cluster_voxel_scores) return