import os
import numpy as np
import pandas as pd
import nibabel as nib
from vtk import vtkPolyDataNormals
from ..mesh.mesh_io import read_surface
from ..mesh.mesh_operations import combine_surfaces
from ..vtk_interface import wrap_vtk, serial_connect
[docs]def load_mask(name='midline', surface_name="fsa5", join=False):
"""Load mask for surface template (authors: @OualidBenkarim, @saratheriver)
Parameters
----------
name : {'midline'} or None, optional
Region name. If 'midline', load mask for all cortex.
Default is 'midline'
surface_name : {'fsa5', 'fsa5_with_sctx', 'conte69'}
Default is fsa5
join : bool, optional
If False, return one array for each hemisphere. Otherwise,
return a single array for both left and right hemispheres.
Default is False
Returns
-------
mask : tuple of ndarrays or ndarray
Boolean masks for left and right hemispheres. If ``join == True``, one
mask with both hemispheres
"""
root_pth = os.path.dirname(__file__)
if surface_name == "conte69":
ipth = os.path.join(root_pth, 'surfaces', 'conte69_32k_{0}{1}_mask.csv')
if name == 'midline':
name = ''
else:
name = '_' + name
mask_lh = np.loadtxt(ipth.format('lh', name), dtype=np.bool)
mask_rh = np.loadtxt(ipth.format('rh', name), dtype=np.bool)
if join:
return np.concatenate([mask_lh, mask_rh])
else:
ipth = os.path.join(root_pth, 'surfaces', surface_name + '_{0}{1}_mask.csv')
if name == 'midline':
name = ''
else:
print('sorry there\'s no other option for now')
mask_lh = np.loadtxt(ipth.format('lh', name), dtype=np.bool)
mask_rh = np.loadtxt(ipth.format('rh', name), dtype=np.bool)
if join:
return np.concatenate([mask_lh, mask_rh])
return mask_lh, mask_rh
[docs]def load_conte69(as_sphere=False, with_normals=True, join=False):
"""Load conte69 surfaces (author: @OualidBenkarim)
Parameters
----------
as_sphere : bool, optional
Return spheres instead of cortical surfaces. Default is False.
with_normals : bool, optional
Whether to compute surface normals. Default is True.
join : bool, optional
If False, return one surface for left and right hemispheres. Otherwise, return a single surface
as a combination of both left and right surfaces. Default is False.
Returns
-------
surf : tuple of BSPolyData or BSPolyData
Surfaces for left and right hemispheres. If ``join == True``, one surface with both hemispheres.
"""
root_pth = os.path.dirname(__file__)
if as_sphere:
fname = 'conte69_32k_{}_sphere.gii'
else:
fname = 'conte69_32k_{}.gii'
ipth = os.path.join(root_pth, 'surfaces', fname)
surfs = [None] * 2
for i, side in enumerate(['lh', 'rh']):
surfs[i] = read_surface(ipth.format(side))
if with_normals:
nf = wrap_vtk(vtkPolyDataNormals, splitting=False,
featureAngle=0.1)
surfs[i] = serial_connect(surfs[i], nf)
if join:
return combine_surfaces(*surfs)
return surfs[0], surfs[1]
[docs]def load_fsa5(as_sphere=False, with_normals=True, join=False, with_sctx=False):
"""Load fsaverage5 surfaces (author: @saratheriver)
Parameters
----------
as_sphere : bool, optional
Return spheres instead of cortical surfaces. Default is False.
with_normals : bool, optional
Whether to compute surface normals. Default is True.
join : bool, optional
If False, return one surface for left and right hemispheres. Otherwise,
return a single surface as a combination of both left and right
surfaces. Default is False.
with_sctx : bool, optional
If False, returns cortical surfaces/spheres only, if True, returns combined
cortical+subcortical surfaces. Default is False
Returns
-------
surf : tuple of BSPolyData or BSPolyData
Surfaces for left and right hemispheres. If ``join == True``, one surface with both hemispheres.
"""
root_pth = os.path.dirname(__file__)
if as_sphere is True and with_sctx is not True:
fname = 'fsa5_sphere_{}.gii'
elif as_sphere is True and with_sctx is True:
fname = 'fsa5_with_sctx_sphere_{}.gii'
elif as_sphere is not True and with_sctx is not True:
fname = 'fsa5_{}.gii'
elif as_sphere is not True and with_sctx is True:
fname = 'fsa5_with_sctx_{}.gii'
ipth = os.path.join(root_pth, 'surfaces', fname)
surfs = [None] * 2
for i, side in enumerate(['lh', 'rh']):
surfs[i] = read_surface(ipth.format(side))
if with_normals:
nf = wrap_vtk(vtkPolyDataNormals, splitting=False,
featureAngle=0.1)
surfs[i] = serial_connect(surfs[i], nf)
if join:
return combine_surfaces(*surfs)
return surfs[0], surfs[1]
def load_fsa(as_sphere=False, with_normals=True, join=False):
"""Load fsaverage surfaces (author: @saratheriver)
Parameters
----------
as_sphere : bool, optional
Return spheres instead of cortical surfaces. Default is False.
with_normals : bool, optional
Whether to compute surface normals. Default is True.
join : bool, optional
If False, return one surface for left and right hemispheres. Otherwise,
return a single surface as a combination of both left and right
surfaces. Default is False.
Returns
-------
surf : tuple of BSPolyData or BSPolyData
Surfaces for left and right hemispheres. If ``join == True``, one surface with both hemispheres.
"""
root_pth = os.path.dirname(__file__)
if as_sphere is True:
fname = 'fsa_sphere_{}.gii'
elif as_sphere is not True:
fname = 'fsa_{}.gii'
ipth = os.path.join(root_pth, 'surfaces', fname)
surfs = [None] * 2
for i, side in enumerate(['lh', 'rh']):
surfs[i] = read_surface(ipth.format(side))
if with_normals:
nf = wrap_vtk(vtkPolyDataNormals, splitting=False,
featureAngle=0.1)
surfs[i] = serial_connect(surfs[i], nf)
if join:
return combine_surfaces(*surfs)
return surfs[0], surfs[1]
[docs]def load_subcortical(with_normals=False, join=False):
"""Load subcortical surfaces (author: @saratheriver)
Parameters
----------
with_normals : bool, optional
Whether to compute surface normals. Default is False.
join : bool, optional
If False, return one surface for left and right hemispheres. Otherwise,
return a single surface as a combination of both left and right
surfaces. Default is False
Returns
-------
surf : tuple of BSPolyData or BSPolyData
Surfaces for left and right hemispheres. If ``join == True``, one surface with both hemispheres.
"""
root_pth = os.path.dirname(__file__)
fname = 'sctx_{}.gii'
ipth = os.path.join(root_pth, 'surfaces', fname)
surfs = [None] * 2
for i, side in enumerate(['lh', 'rh']):
surfs[i] = read_surface(ipth.format(side))
if with_normals:
nf = wrap_vtk(vtkPolyDataNormals, splitting=False,
featureAngle=0.1)
surfs[i] = serial_connect(surfs[i], nf)
if join:
return combine_surfaces(*surfs)
return surfs[0], surfs[1]
[docs]def load_sc(parcellation='aparc'):
"""Load structural connectivity data (author: @saratheriver)
Parameters
----------
parcellation : str, optional
Parcellation name {'aparc', 'schaefer_100', 'schaefer_200', 'schaefer_300', 'schaefer_400', 'glasser_360'}.
Default is 'aparc' with n cortical regions.
Returns
-------
strucMatrix_ctx : 2D ndarray
Cortico-cortical connectivity, shape = (n, n)
strucLabels_ctx : 1D ndarray
Cortical labels, shape = (n,)
strucMatrix_sctx : 2D ndarray
Subcortico-cortical connectivity, shape = (14, n)
strucLabels_sctx : 1D ndarray
Subcortical labels, shape = (14,)
"""
root_pth = os.path.dirname(__file__)
if parcellation is 'aparc':
ctx = 'strucMatrix_ctx.csv'
ctx_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctx)
ctxL = 'strucLabels_ctx.csv'
ctxL_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctxL)
sctx = 'strucMatrix_sctx.csv'
sctx_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', sctx)
sctxL = 'strucLabels_sctx.csv'
sctxL_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', sctxL)
else:
ctx = 'strucMatrix_ctx_' + parcellation + '.csv'
ctx_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctx)
ctxL = 'strucLabels_ctx_' + parcellation + '.csv'
ctxL_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctxL)
sctx = 'strucMatrix_sctx_' + parcellation + '.csv'
sctx_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', sctx)
sctxL = 'strucLabels_sctx_' + parcellation + '.csv'
sctxL_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', sctxL)
return np.loadtxt(ctx_ipth, dtype=np.float, delimiter=','), \
np.loadtxt(ctxL_ipth, dtype='str', delimiter=','), \
np.loadtxt(sctx_ipth, dtype=np.float, delimiter=','), \
np.loadtxt(sctxL_ipth, dtype='str', delimiter=',')
[docs]def load_fc(parcellation='aparc'):
"""Load functional connectivity data (author: @saratheriver)
Parameters
----------
parcellation : str, optional
Parcellation name {'aparc', 'schaefer_100', 'schaefer_200', 'schaefer_300', 'schaefer_400', 'glasser_360'}.
Default is 'aparc' with n cortical regions.
Returns
-------
funcMatrix_ctx : 2D ndarray
Cortico-cortical connectivity, shape = (n, n)
funcLabels_ctx : 1D ndarray
Cortical labels, shape = (n,)
funcMatrix_sctx : 2D ndarray
Subcortico-cortical connectivity, shape = (14, n)
funcLabels_sctx : 1D ndarray
Subcortical labels, shape = (14,)
"""
root_pth = os.path.dirname(__file__)
if parcellation is 'aparc':
ctx = 'funcMatrix_ctx.csv'
ctx_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctx)
ctxL = 'funcLabels_ctx.csv'
ctxL_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctxL)
sctx = 'funcMatrix_sctx.csv'
sctx_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', sctx)
sctxL = 'funcLabels_sctx.csv'
sctxL_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', sctxL)
else:
ctx = 'funcMatrix_ctx_' + parcellation + '.csv'
ctx_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctx)
ctxL = 'funcLabels_ctx_' + parcellation + '.csv'
ctxL_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctxL)
sctx = 'funcMatrix_sctx_' + parcellation + '.csv'
sctx_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', sctx)
sctxL = 'funcLabels_sctx_' + parcellation + '.csv'
sctxL_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', sctxL)
return np.loadtxt(ctx_ipth, dtype=np.float, delimiter=','), \
np.loadtxt(ctxL_ipth, dtype='str', delimiter=','), \
np.loadtxt(sctx_ipth, dtype=np.float, delimiter=','), \
np.loadtxt(sctxL_ipth, dtype='str', delimiter=',')
[docs]def load_sc_as_one(parcellation='aparc'):
"""Load structural connectivity data (cortical + subcortical in one matrix; author: @saratheriver)
Parameters
----------
parcellation : str, optional
Parcellation name {'aparc', 'schaefer_100', 'schaefer_200', 'schaefer_300', 'schaefer_400', 'glasser'}.
Default is 'aparc' with n cortical regions.
Returns
-------
strucMatrix_ctx : 2D ndarray
Structural connectivity, shape = (n+14, n+14)
strucLabels_ctx : 1D ndarray
Region labels, shape = (n+14,)
"""
root_pth = os.path.dirname(__file__)
if parcellation == 'aparc':
ctx = 'strucMatrix_with_sctx.csv'
ctx_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctx)
ctxL = 'strucLabels_with_sctx.csv'
ctxL_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctxL)
else:
ctx = 'strucMatrix_with_sctx_' + parcellation + '.csv'
ctx_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctx)
ctxL = 'strucLabels_with_sctx_' + parcellation + '.csv'
ctxL_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctxL)
return np.loadtxt(ctx_ipth, dtype=np.float, delimiter=','), \
np.loadtxt(ctxL_ipth, dtype='str', delimiter=','), \
[docs]def load_fc_as_one(parcellation='aparc'):
"""Load functional connectivity data (cortical + subcortical in one matrix; author: @saratheriver)
Parameters
----------
parcellation : str, optional
Parcellation name {'aparc', 'schaefer_100', 'schaefer_200', 'schaefer_300', 'schaefer_400', 'glasser'}.
Default is 'aparc' with n cortical regions.
Returns
-------
funcMatrix_ctx : 2D ndarray
Functional connectivity, shape = (n+14, n+14)
funcLabels_ctx : 1D ndarray
Region labels, shape = (n+14,)
"""
root_pth = os.path.dirname(__file__)
if parcellation is 'aparc':
ctx = 'funcMatrix_with_sctx.csv'
ctx_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctx)
ctxL = 'funcLabels_with_sctx.csv'
ctxL_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctxL)
else:
ctx = 'funcMatrix_with_sctx_' + parcellation + '.csv'
ctx_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctx)
ctxL = 'funcLabels_with_sctx_' + parcellation + '.csv'
ctxL_ipth = os.path.join(root_pth, 'matrices', 'hcp_connectivity', ctxL)
return np.loadtxt(ctx_ipth, dtype=np.float, delimiter=','), \
np.loadtxt(ctxL_ipth, dtype='str', delimiter=','), \
def structural_covariance(zdata):
"""Construction of intra-individual brain structural covariance networks
Parameters
----------
zdata : z-scored matrix (#subjects x #features) of morphological features
(e.g., cortical thickness + subcortical volume)
Returns
-------
joint_var_matrix : ndarray #features x #features x #subjects
"""
joint_var_matrix = np.zeros((zdata.shape[1], zdata.shape[1], zdata.shape[0]))
for kk in range(zdata.shape[0]):
for ii in range(zdata.shape[1]):
for jj in range(zdata.shape[1]):
joint_var_matrix[ii, jj, kk] = 1 / np.exp(np.square(zdata[kk, ii] - zdata[kk, jj]))
return joint_var_matrix
[docs]def fetch_ahba(csvfile=None):
"""Fetch Allen Human Brain Atlas microarray expression data from all donors and all genes (author: @saratheriver)
Parameters
----------
csvfile : None or string, optional
Path to downloaded csvfile. For more threshold and parcellation options, download csvfile from here:
https://github.com/saratheriver/enigma-extra/tree/master/ahba
If None (default), fetches microarray expression data from the internet (aparc and stable r > 0.2).
Returns
-------
genes : pandas.DataFrame
Table of gene co-expression data, shape = (82, 15633)
"""
if csvfile is None:
url = 'https://raw.githubusercontent.com/saratheriver/enigma-extra/master/ahba/allgenes_stable_r0.2.csv'
return pd.read_csv(url, error_bad_lines=False)
else:
return pd.read_csv(csvfile, error_bad_lines=False)
[docs]def risk_genes(disorder=None):
"""Outputs names of GWAS-derived risk genes for a given disorder (author: @saratheriver)
Parameters
----------
disorder : {'adhd', 'asd', 'bipolar', 'depression', 'epilepsy', 'hippocampal_volume', 'ocd', 'schizophrenia', 'tourette'}
Name of disorder, default is None
Returns
-------
risk_genes : set
Names of genes for a given disorder
"""
if disorder == "adhd":
return {'ST3GAL3', 'KDM4A', 'KDM4A-AS1', 'PTPRF', 'SLC6A9', 'ARTN', 'DPH2',
'ATP6V0B', 'B4GALT2', 'CCDC24', 'IPO13', 'SPAG16', 'PCDH7', 'LINC02497',
'LINC00461', 'MIR9-2', 'LINC02060', 'TMEM161B-AS1', 'FOXP2', 'MIR3666',
'LINC01288', 'SORCS3', 'DUSP6', 'POC1B', 'SEMA6D', 'LINC01572'};
elif disorder == "asd":
return {'NEGR1', 'PTBP2', 'CADPS', 'FEZF2', 'TMEM33', 'DCAF4L1',
'SLC30A9', 'BEND4', 'NUDT12', 'KCNN2', 'MMS22L', 'POU3F2',
'KMT2E', 'SRPK2', 'C8orf74', 'SOX7', 'PINX1', 'MROH5',
'MARK3', 'CKB', 'TRMT61A', 'BAG5', 'APOPT1', 'KLC1',
'XRCC3', 'MACROD2', 'XRN2', 'KIZ', 'NKX2-4', 'NKX2-2'}
elif disorder == "bipolar":
return {'PLEKHO1', 'LMAN2L', 'SCN2A', 'PCGEM1', 'TRANK1', 'ITIH1',
'CD47', 'FSTL5', 'ADCY2', 'SSBP2', 'RIMS1', 'POU3F2',
'RPS6KA2', 'THSD7A', 'SRPK2', 'MRPS33', 'ANK3', 'ADD3',
'FADS2', 'PACS1', 'PC', 'SHANK2', 'CACNA1C', 'STARD9',
'ZNF592', 'GRIN2A', 'HDAC5', 'ZCCHC2', 'NCAN', 'STK4'}
elif disorder == "depression":
return {'SORCS3', 'RBFOX1', 'GRM5', 'HIST1H2BN', 'SHISA9', 'TCF4', 'NEGR1', 'HIST1H3J', 'DENND1A',
'DCC', 'RSRC1', 'TENM2', 'TMEM161B', 'DRD2', 'PGBD1', 'ZKSCAN4', 'HIST1H1B', 'ERBB4', 'ZKSCAN8',
'BTN3A2', 'PCLO', 'ZSCAN16', 'ZSCAN9', 'TMEM106B', 'MEF2C', 'OLFM4', 'GRM8', 'ZNF165', 'LRFN5',
'OR2B2', 'HIST1H2BL', 'ZCCHC7', 'B3GALTL', 'BTN2A1', 'ZSCAN26', 'RERE', 'CDH13', 'ASTN2', 'CACNA1E',
'HIST1H2AL', 'HLA-B', 'HIST1H4L', 'ZSCAN12', 'CHD6', 'CTNNA3', 'METTL9', 'MEGF11', 'ZSCAN31', 'ZNF197',
'KLC1', 'ZNF660', 'SPPL3', 'YLPM1', 'PCDH9', 'ZNF445', 'ZKSCAN7', 'HIST1H3I', 'LIN28B', 'PAX5', 'PROX2',
'FAM172A', 'CELF4', 'DLST', 'NRG1', 'SGCZ', 'OR12D3', 'RAB27B', 'IGSF6', 'GPC6', 'PAX6', 'SGIP1', 'KDM3A',
'C16orf45', 'DCDC5', 'ESR2', 'LRP1B', 'EMILIN3', 'TRMT61A', 'XRCC3', 'SOX5', 'CNTNAP5', 'SEMA6D', 'ANKK1',
'ZFHX4', 'LST1', 'PRSS16', 'TYR', 'RFWD2', 'PQLC2L', 'BTN1A1', 'DCDC1', 'ZDHHC21', 'TTC12', 'SDK1', 'APOPT1',
'VRK2', 'CABP1', 'ZKSCAN3', 'SAMD5', 'ADCK3', 'DENND1B', 'TAOK3', 'HS6ST3', 'MYRF', 'RTN1', 'PSORS1C1', 'CKB',
'SF3B1', 'FADS2', 'GTF2IRD1', 'NRD1', 'ZC3H7B', 'AREL1', 'RANGAP1', 'ZNF184', 'ZDHHC5', 'HIST1H2BF', 'FAM120A',
'KIF15', 'NKAPL', 'FCF1', 'SORBS3', 'PCDHA2', 'PCDHA1', 'PRR34', 'SCYL1', 'MR1', 'BTN3A3', 'TCTEX1D1', 'CELF2', 'CTNND1',
'HSPA1A', 'ASCC3', 'ELAVL2', 'HIST1H2BO', 'RPS6KL1', 'PCDHA3', 'TRMT10C', 'ABT1', 'SCAI', 'FADS1', 'CTTNBP2', 'KMT2A',
'BEND4', 'ESRRG', 'BAZ2B', 'GPC5', 'IQCJ-SCHIP1', 'TCAIM', 'TMX2', 'SLC17A3', 'MED19', 'ZNF638', 'CDH22', 'GRIK5', 'HARS',
'HSPE1-MOB4', 'EP300', 'HLA-DQB1', 'PCNP', 'ZHX3', 'BCHE', 'CRB1', 'C3orf84', 'MICB', 'SLC30A9', 'MARK3', 'FHIT', 'MARCH10',
'CDK14', 'PLCG1', 'PSORS1C2', 'AP3B1', 'POGZ', 'TRAF3', 'CSMD1', 'TMEM67', 'PCDHA4', 'TOPAZ1', 'PMFBP1', 'CNTN5', 'INPP4B',
'ZNF322', 'ASIC2', 'PLA2R1', 'CHMP3', 'SOX6', 'PCDHA5', 'FANCL', 'ZNF35', 'TMEM42', 'KIAA1143', 'C11orf31',
'ACVR1B', 'ZNF501', 'RFTN2', 'TMEM258', 'TAL1', 'NICN1', 'HLA-DQA1', 'ACTL8', 'MOB4', 'CCDC36', 'PCDHA6', 'STK19',
'RHOA', 'MAP9', 'FNIP2', 'RBMS3', 'PLCL1', 'SLC44A4', 'LTBP3', 'SPRY2', 'C7orf72', 'HTT', 'UBE2M', 'OTX2', 'BAG5', 'CDH9',
'LPIN3', 'EPHB2', 'HMGN4', 'PPP6C', 'NOX4', 'PRR16', 'EXT1', 'MGAT4C', 'EYS', 'STAU1', 'HARS2', 'BAD', 'MYBPC3', 'ETFDH', 'SIM1',
'FH', 'ANKS1B', 'ITPR3', 'RABEPK', 'RHOBTB1', 'BSN', 'RAB3B', 'ZNF536', 'TOP1', 'CAMKK2', 'MANEA', 'ARHGEF25', 'VPS41',
'ATP1A3', 'ITGB6', 'ASXL3', 'ANKHD1', 'PCDHA7', 'PTPRS', 'CCS', 'PHF2', 'IK', 'KYNU', 'PPID', 'FAM120AOS', 'ZMAT2', 'SERPING1',
'USP3', 'CACNA2D1', 'ANKHD1-EIF4EBP3', 'GINM1', 'C1QTNF7', 'MIER1', 'SLC4A9', 'PSEN2'}
elif disorder == "epilepsy":
allepilepsy = ['FANCL', 'BCL11A', 'SCN3A', 'SCN2A', 'TTC21B', 'SCN1A', 'HEATR3', 'BRD7']
focalepilepsy = ['SCN3A', 'SCN2A', 'TTC21B', 'SCN1A']
generalizedepilepsy = ['FANCL', 'BCL11A', 'SCN3A', 'SCN2A', 'TTC21B', 'SCN1A', 'STAT4', 'PCDH7', 'GABRA2', 'KCNN2',
'ATXN1', 'PNPO', 'GRIK1']
jme = ['STX1B']
cae = ['FANCL', 'BCL11A', 'ZEB2']
focalhs = ['C3orf33', 'SLC33A1', 'KCNAB1', 'GJA1']
return {'allepilepsy': allepilepsy, 'focalepilepsy': focalepilepsy,
'generalizedepilepsy': generalizedepilepsy, 'jme': jme,
'cae': cae, 'focalhs': focalhs}
elif disorder == "hippocampal_volume":
return {'TESC','ACVR1','MSRB3','DPP4'}
elif disorder == "ocd":
return print("aye aye aye I've got nothin'")
elif disorder == "schizophrenia":
return {'xMHC','DPYD','MIR137','ARL3','AS3MT','C10orf32','CNNM2','CYP17A1','INA','NT5C2','PCGF6','PDCD11','SFXN2','TAF5','TRIM8',
'USMG5','WBP1L','CACNA1C','TSNARE1','SLC39A8','MAD1L1','ZSWIM6','ABCB9','ARL6IP4','C12orf65','CDK2AP1','MPHOSPH9','OGFOD2',
'PITPNM2','RILPL2','SBNO1','SETD8','AC073043.2','C2orf47','C2orf69','TYW5','FES','FURIN','MAN2A2','TRANK1','AL049840.1','APOPT1',
'BAG5','CKB','KLC1','PPP1R13B','TRMT61A','XRCC3','ZFYVE21','AC027228.1','AGPHD1','CHRNA3','CHRNA5','CHRNB4','IREB2','PSMA4','IMMP2L',
'SNX19','ZNF804A','CNKSR2','CACNB2','LRP1','MYO1A','NAB2','NDUFA4L2','NXPH4','R3HDM2','SHMT2','STAC3','STAT6','TAC3','TMEM194A','LRRIQ3',
'C2orf82','EFHD1','GIGYF2','KCNJ13','NGEF','ESAM','MSANTD2','NRGN','VSIG2','TCF4','AMBRA1','ARHGAP1','ATG13','CHRM4','CKAP5','CREB3L1',
'DGKZ','F2','HARBI1','MDK','ZNF408','CCDC39','DNAJC19','FXR1','ACTR5','PPP1R16B','SLC32A1','FANCL','VRK2','ADAMTSL3','GOLGA6L4','ZSCAN2',
'TCF4','ANKRD44','BOLL','COQ10B','HSPD1','HSPE1','MARS2','PLCL1','RFTN2','SF3B1','CHADL','EP300','L3MBTL2','RANGAP1','KCNV1','CNTN4','DRD2',
'IGSF9B','GLT8D1','GNL3','ITIH1','ITIH3','ITIH4','MUSTN1','NEK4','NISCH','NT5DC2','PBRM1','SMIM4','SPCS1','STAB1','TMEM110','TMEM110-MUSTN1',
'ALDOA','ASPHD1','C16orf92','DOC2A','FAM57B','GDPD3','HIRIP3','INO80E','KCTD13','MAPK3','PPP4C','SEZ6L2','TAOK2','TBX6','TMEM219','YPEL3',
'CACNA1I','MSL2','NCK1','PCCB','PPP2R3A','SLC35G2','STAG1','GRIA1 ','PJA1','SGSM2','SMG6','SRR','TSR1','GRM3','VPS14C','KDM4A','PTPRF','CILP2',
'GATAD2A','HAPLN4','MAU2','NCAN','NDUFA13','PBX4','SUGP1','TM6SF2','TSSK6','ANP32E','APH1A','C1orf51','C1orf54','CA14','OTUD7B','PLEKHO1','VPS45',
'SNAP91','PLCH2','ERCC4','MLL5','PUS7','SRPK2','RERE','SLC45A1','ATP2A2','C4orf27','CLCN3','NEK1','FUT9','CENPM','CYP2D6','FAM109B','NAGA','NDUFA6',
'SEPT3','SHISA8','SMDT1','SREBF2','TCF20','TNFRSF13C','WBP2NL'}
elif disorder == "tourette":
return {'FLT3', 'OTUD1', 'LINC01122', 'MIR2113', 'CSMD3', 'MIR2053', 'EPB41', 'MECR', 'OPRD1',
'PTPRU', 'SRSF4', 'TMEM200B', 'CDKN1A', 'KCTD20', 'MIR3925', 'PANDAR', 'PXT1', 'RAB44',
'SRSF3', 'STK38', 'LOC402160', 'RNF4', 'ZFYVE28', 'AHCTF1P1', 'BAZ2B', 'CD302', 'DPP4',
'ITGB6', 'LOC643072', 'LOC100505984', 'LOC100996579', 'LOC101929512', 'LY75', 'LY75-CD302',
'MARCH7', 'MIR4785', 'PLA2R1', 'PSMD14', 'RBMS1', 'SLC4A10', 'TANC1', 'TANK', 'TBR1', 'WDSUB1',
'FPR1', 'FPR2', 'FPR3', 'HCCAT3', 'LOC101928571', 'ZNF350', 'ZNF432', 'ZNF577', 'ZNF613',
'ZNF614', 'ZNF615', 'ZNF616', 'ZNF649', 'ZNF841'}
else:
raise ValueError("must specify a valid disorder... but just one!")
[docs]def load_example_data():
"""Loads the ENIGMA example dataset (from one site - MICA-MNI Montreal; author: @saratheriver)
Returns
-------
cov : pandas.DataFrame
Contains information on covariates
metr1 : pandas.DataFrame
Contains information on subcortical volume
metr2 : pandas.DataFrame
Contains information on cortical thickness
metr3 : pandas.DataFrame
Contains information on surface area
"""
root_pth = os.path.dirname(__file__)
cov = os.path.join(root_pth, 'xdata', 'cov.csv')
metr1 = os.path.join(root_pth, 'xdata', 'metr1_SubVol.csv')
metr2 = os.path.join(root_pth, 'xdata', 'metr2_CortThick.csv')
metr3 = os.path.join(root_pth, 'xdata', 'metr3_CortSurf.csv')
return pd.read_csv(cov, error_bad_lines=False), \
pd.read_csv(metr1, error_bad_lines=False), \
pd.read_csv(metr2, error_bad_lines=False), \
pd.read_csv(metr3, error_bad_lines=False)
[docs]def load_summary_stats(disorder=None):
"""Outputs summary statistics for a given disorder (author: @saratheriver)
Parameters
----------
disorder : {'22q', 'adhd', 'asd', 'bipolar', 'depression', 'epilepsy', 'ocd', 'schizophrenia'}
Disorder name, default is None
Returns
-------
summary_stats : pandas.DataFrame
Available summary statistics
"""
root_pth = os.path.dirname(__file__)
if disorder == "22q":
CortThick_case_controls = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'22q_case-controls_CortThick.csv'), error_bad_lines=False)
CortSurf_case_controls = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'22q_case-controls_CortSurf.csv'), error_bad_lines=False)
CortThick_psychP_psychN = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'22q_psych+-psych-_CortThick.csv'), error_bad_lines=False)
CortSurf_psychP_psychN = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'22q_psych+-psych-_CortSurf.csv'), error_bad_lines=False)
SubVol_case_controls = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'22q_case-controls_SubVol.csv'), error_bad_lines=False)
SubVol_case_controls_AB = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'22q_case-controls_SubVol_AB.csv'), error_bad_lines=False)
SubVol_case_controls_AD = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'22q_case-controls_SubVol_AD.csv'), error_bad_lines=False)
SubVol_AB_AD = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'22q_AB-AD_SubVol.csv'), error_bad_lines=False)
SubVol_psychP_psychN = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'22q_psych+-psych-_SubVol.csv'), error_bad_lines=False)
return {'CortThick_case_vs_controls': CortThick_case_controls,
'CortSurf_case_vs_controls': CortSurf_case_controls,
'CortThick_psychP_vs_psychN': CortThick_psychP_psychN,
'CortSurf_psychP_vs_psychN': CortSurf_psychP_psychN,
'SubVol_case_vs_controls': SubVol_case_controls,
'SubVol_case_vs_controls_AD': SubVol_case_controls_AD,
'SubVol_case_vs_controls_AB': SubVol_case_controls_AB,
'SubVol_AB_vs_AD': SubVol_AB_AD,
'SubVol_psychP_vs_psychN': SubVol_psychP_psychN}
elif disorder == "adhd":
CortThick_case_controls_allages = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'adhdallages_case-controls_CortThick.csv'),
error_bad_lines=False)
CortSurf_case_controls_allages = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'adhdallages_case-controls_CortSurf.csv'),
error_bad_lines=False)
CortThick_case_controls_adult = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'adhdadult_case-controls_CortThick.csv'),
error_bad_lines=False)
CortSurf_case_controls_adult = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'adhdadult_case-controls_CortSurf.csv'),
error_bad_lines=False)
CortThick_case_controls_adolescent = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'adhdadolescent_case-controls_CortThick.csv'),
error_bad_lines=False)
CortSurf_case_controls_adolescent = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'adhdadolescent_case-controls_CortSurf.csv'),
error_bad_lines=False)
CortThick_case_controls_pediatric = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'adhdpediatric_case-controls_CortThick.csv'),
error_bad_lines=False)
CortSurf_case_controls_pediatric = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'adhdpediatric_case-controls_CortSurf.csv'),
error_bad_lines=False)
SubVol_case_controls_allages = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'adhdallages_case-controls_SubVol.csv'),
error_bad_lines=False)
SubVol_case_controls_adult = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'adhdadult_case-controls_SubVol.csv'),
error_bad_lines=False)
SubVol_case_controls_adolescent = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'adhdadolescent_case-controls_SubVol.csv'),
error_bad_lines=False)
SubVol_case_controls_pediatric = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'adhdpediatric_case-controls_SubVol.csv'),
error_bad_lines=False)
return {'CortThick_case_vs_controls_allages': CortThick_case_controls_allages,
'CortSurf_case_vs_controls_allages': CortSurf_case_controls_allages,
'CortThick_case_vs_controls_adult': CortThick_case_controls_adult,
'CortSurf_case_vs_controls_adult': CortSurf_case_controls_adult,
'CortThick_case_vs_controls_adolescent': CortThick_case_controls_adolescent,
'CortSurf_case_vs_controls_adolescent': CortSurf_case_controls_adolescent,
'CortThick_case_vs_controls_pediatric': CortThick_case_controls_pediatric,
'CortSurf_case_vs_controls_pediatric': CortSurf_case_controls_pediatric,
'SubVol_case_vs_controls_allages':SubVol_case_controls_allages,
'SubVol_case_vs_controls_adult':SubVol_case_controls_adult,
'SubVol_case_vs_controls_adolescent':SubVol_case_controls_adolescent,
'SubVol_case_vs_controls_pediatric':SubVol_case_controls_pediatric}
elif disorder == "asd":
CortThick_case_controls_meta_analysis = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'asd_meta-analysis_case-controls_CortThick.csv'),
error_bad_lines=False)
CortThick_case_controls_mega_analysis = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'asd_mega-analysis_case-controls_CortThick.csv'),
error_bad_lines=False)
SubVol_case_controls_meta_analysis = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'asd_meta-analysis_case-controls_SubVol.csv'),
error_bad_lines=False)
return {'CortThick_case_vs_controls_meta_analysis': CortThick_case_controls_meta_analysis,
'CortThick_case_vs_controls_mega_analysis': CortThick_case_controls_mega_analysis,
'SubVol_case_vs_controls_meta_analysis': SubVol_case_controls_meta_analysis}
elif disorder == "bipolar":
CortThick_case_controls_adult = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'bd_case-controls_CortThick_adult.csv'), error_bad_lines=False)
CortSurf_case_controls_adult = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'bd_case-controls_CortSurf_adult.csv'), error_bad_lines=False)
CortThick_typeI_typeII_adult = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'bd_typeI-typeII_CortThick_adult.csv'), error_bad_lines=False)
CortSurf_typeI_typeII_adult = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'bd_typeI-typeII_CortSurf_adult.csv'), error_bad_lines=False)
CortThick_case_controls_adolescent = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'bd_case-controls_CortThick_adolescent.csv'), error_bad_lines=False)
CortSurf_case_controls_adolescent = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'bd_case-controls_CortSurf_adolescent.csv'), error_bad_lines=False)
CortThick_typeI_typeII_adolescent = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'bd_typeI-typeII_CortThick_adolescent.csv'), error_bad_lines=False)
CortSurf_typeI_typeII_adolescent = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'bd_typeI-typeII_CortSurf_adolescent.csv'), error_bad_lines=False)
SubVol_case_controls_typeI = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'bd_case-controls_SubVol_typeI.csv'), error_bad_lines=False)
SubVol_case_controls_typeII = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'bd_case-controls_SubVol_typeII.csv'), error_bad_lines=False)
SubVol_typeII_typeI = pd.read_csv(
os.path.join(root_pth, 'summary_statistics', 'bd_typeII-typeI_SubVol.csv'), error_bad_lines=False)
return {'CortThick_case_vs_controls_adult': CortThick_case_controls_adult,
'CortSurf_case_vs_controls_adult': CortSurf_case_controls_adult,
'CortThick_typeI_vs_typeII_adult': CortThick_typeI_typeII_adult,
'CortSurf_typeI_vs_typeII_adult': CortSurf_typeI_typeII_adult,
'CortThick_case_vs_controls_adolescent': CortThick_case_controls_adolescent,
'CortSurf_case_vs_controls_adolescent': CortSurf_case_controls_adolescent,
'CortThick_typeI_vs_typeII_adolescent': CortThick_typeI_typeII_adolescent,
'CortSurf_typeI_vs_typeII_adolescent': CortSurf_typeI_typeII_adolescent,
'SubVol_case_vs_controls_typeI': SubVol_case_controls_typeI,
'SubVol_case_vs_controls_typeII': SubVol_case_controls_typeII,
'SubVol_typeII_vs_typeI': SubVol_typeII_typeI}
elif disorder == "depression":
CortThick_case_vs_controls_adult = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadult_case-controls_CortThick.csv'),
error_bad_lines=False)
CortSurf_case_vs_controls_adult = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadult_case-controls_CortSurf.csv'),
error_bad_lines=False)
CortThick_case_vs_controls_adult_firstepisode = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadult_case-controls_CortThick_firstepisode.csv'),
error_bad_lines=False)
CortSurf_case_vs_controls_adult_firstepisode = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadult_case-controls_CortSurf_firstepisode.csv'),
error_bad_lines=False)
CortThick_case_vs_controls_adult_recurrent = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadult_case-controls_CortThick_recurrent.csv'),
error_bad_lines=False)
CortSurf_case_vs_controls_adult_recurrent = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadult_case-controls_CortSurf_recurrent.csv'),
error_bad_lines=False)
CortThick_firstepisode_vs_recurrent_adult = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadult_firstepisode-recurrent_CortThick.csv'),
error_bad_lines=False)
CortSurf_firstepisode_vs_recurrent_adult = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadult_firstepisode-recurrent_CortSurf.csv'),
error_bad_lines=False)
CortThick_case_vs_controls_adult_early = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadult_case-controls_CortThick_early.csv'),
error_bad_lines=False)
CortSurf_case_vs_controls_adult_early = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadult_case-controls_CortSurf_early.csv'),
error_bad_lines=False)
CortThick_case_vs_controls_adult_late = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadult_case-controls_CortThick_late.csv'),
error_bad_lines=False)
CortSurf_case_vs_controls_adult_late = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadult_case-controls_CortSurf_late.csv'),
error_bad_lines=False)
CortThick_early_vs_late_adult = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadult_early-late_CortThick.csv'),
error_bad_lines=False)
CortSurf_early_vs_late_adult = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadult_early-late_CortSurf.csv'),
error_bad_lines=False)
CortThick_case_vs_controls_adolescent = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadolescent_case-controls_CortThick.csv'),
error_bad_lines=False)
CortSurf_case_vs_controls_adolescent = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadolescent_case-controls_CortSurf.csv'),
error_bad_lines=False)
CortThick_case_vs_controls_adolescent_firstepisode = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadolescent_case-controls_CortThick_firstepisode.csv'),
error_bad_lines=False)
CortSurf_case_vs_controls_adolescent_firstepisode = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadolescent_case-controls_CortSurf_firstepisode.csv'),
error_bad_lines=False)
CortThick_case_vs_controls_adolescent_recurrent = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadolescent_case-controls_CortThick_recurrent.csv'),
error_bad_lines=False)
CortSurf_case_vs_controls_adolescent_recurrent = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadolescent_case-controls_CortSurf_recurrent.csv'),
error_bad_lines=False)
CortThick_firstepisode_vs_recurrent_adolescent = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadolescent_firstepisode-recurrent_CortThick.csv'),
error_bad_lines=False)
CortSurf_firstepisode_vs_recurrent_adolescent = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddadolescent_firstepisode-recurrent_CortSurf.csv'),
error_bad_lines=False)
SubVol_case_vs_controls = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mdd_case-controls_SubVol.csv'), error_bad_lines=False)
SubVol_case_vs_controls_late = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddlate_case-controls_SubVol.csv'),
error_bad_lines=False)
SubVol_case_vs_controls_early = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddearly_case-controls_SubVol.csv'),
error_bad_lines=False)
SubVol_late_vs_early = pd.read_csv(os.path.join(root_pth, 'summary_statistics', 'mdd_late-early_SubVol.csv'),
error_bad_lines=False)
SubVol_case_vs_controls_firstepisode = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddfirstepisode_case-controls_SubVol.csv'),
error_bad_lines=False)
SubVol_case_vs_controls_recurrent = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mddrecurrent_case-controls_SubVol.csv'),
error_bad_lines=False)
SubVol_recurrrent_vs_firstepisode = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'mdd_recurrent-firstepisode_SubVol.csv'),
error_bad_lines=False)
return {'CortThick_case_vs_controls_adult': CortThick_case_vs_controls_adult,
'CortSurf_case_vs_controls_adult': CortSurf_case_vs_controls_adult,
'CortThick_case_vs_controls_adult_firstepisode': CortThick_case_vs_controls_adult_firstepisode,
'CortSurf_case_vs_controls_adult_firstepisode': CortSurf_case_vs_controls_adult_firstepisode,
'CortThick_case_vs_controls_adult_recurrent': CortThick_case_vs_controls_adult_recurrent,
'CortSurf_case_vs_controls_adult_recurrent': CortSurf_case_vs_controls_adult_recurrent,
'CortThick_firstepisode_vs_recurrent_adult': CortThick_firstepisode_vs_recurrent_adult,
'CortSurf_firstepisode_vs_recurrent_adult': CortSurf_firstepisode_vs_recurrent_adult,
'CortThick_case_vs_controls_adult_early': CortThick_case_vs_controls_adult_early,
'CortSurf_case_vs_controls_adult_early': CortSurf_case_vs_controls_adult_early,
'CortThick_case_vs_controls_adult_late': CortThick_case_vs_controls_adult_late,
'CortSurf_case_vs_controls_adult_late': CortSurf_case_vs_controls_adult_late,
'CortThick_early_vs_late_adult': CortThick_early_vs_late_adult,
'CortSurf_early_vs_late_adult': CortSurf_early_vs_late_adult,
'CortThick_case_vs_controls_adolescent': CortThick_case_vs_controls_adolescent,
'CortSurf_case_vs_controls_adolescent': CortSurf_case_vs_controls_adolescent,
'CortThick_case_vs_controls_adolescent_firstepisode': CortThick_case_vs_controls_adolescent_firstepisode,
'CortSurf_case_vs_controls_adolescent_firstepisode': CortSurf_case_vs_controls_adolescent_firstepisode,
'CortThick_case_vs_controls_adolescent_recurrent': CortThick_case_vs_controls_adolescent_recurrent,
'CortSurf_case_vs_controls_adolescent_recurrent': CortSurf_case_vs_controls_adolescent_recurrent,
'CortThick_firstepisode_vs_recurrent_adolescent': CortThick_firstepisode_vs_recurrent_adolescent,
'CortSurf_firstepisode_vs_recurrent_adolescent': CortSurf_firstepisode_vs_recurrent_adolescent,
'SubVol_case_vs_controls': SubVol_case_vs_controls,
'SubVol_case_vs_controls_late': SubVol_case_vs_controls_late,
'SubVol_case_vs_controls_early': SubVol_case_vs_controls_early,
'SubVol_late_vs_early': SubVol_late_vs_early,
'SubVol_case_vs_controls_firstepisode': SubVol_case_vs_controls_firstepisode,
'SubVol_case_vs_controls_recurrent': SubVol_case_vs_controls_recurrent,
'SubVol_recurrrent_vs_firstepisode': SubVol_recurrrent_vs_firstepisode}
elif disorder == "epilepsy":
CortThick_case_controls_allepilepsy = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'allepi_case-controls_CortThick.csv'),
error_bad_lines=False)
SubVol_case_controls_allepilepsy = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'allepi_case-controls_SubVol.csv'),
error_bad_lines=False)
CortThick_case_controls_gge = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'gge_case-controls_CortThick.csv'),
error_bad_lines=False)
SubVol_case_controls_gge = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'gge_case-controls_SubVol.csv'),
error_bad_lines=False)
CortThick_case_controls_ltle = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'tlemtsl_case-controls_CortThick.csv'),
error_bad_lines=False)
SubVol_case_controls_ltle = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'tlemtsl_case-controls_SubVol.csv'),
error_bad_lines=False)
CortThick_case_controls_rtle = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'tlemtsr_case-controls_CortThick.csv'),
error_bad_lines=False)
SubVol_case_controls_rtle = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'tlemtsr_case-controls_SubVol.csv'),
error_bad_lines=False)
CortThick_case_controls_allotherepilepsy = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'allotherepi_case-controls_CortThick.csv'),
error_bad_lines=False)
SubVol_case_controls_allotherepilepsy = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'allotherepi_case-controls_SubVol.csv'),
error_bad_lines=False)
return {'CortThick_case_vs_controls_allepilepsy': CortThick_case_controls_allepilepsy,
'SubVol_case_vs_controls_allepilepsy': SubVol_case_controls_allepilepsy,
'CortThick_case_vs_controls_gge': CortThick_case_controls_gge,
'SubVol_case_vs_controls_gge': SubVol_case_controls_gge,
'CortThick_case_vs_controls_ltle': CortThick_case_controls_ltle,
'SubVol_case_vs_controls_ltle': SubVol_case_controls_ltle,
'CortThick_case_vs_controls_rtle': CortThick_case_controls_rtle,
'SubVol_case_vs_controls_rtle': SubVol_case_controls_rtle,
'CortThick_case_vs_controls_allotherepilepsy': CortThick_case_controls_allotherepilepsy,
'SubVol_case_vs_controls_allotherepilepsy': SubVol_case_controls_allotherepilepsy}
elif disorder == "ocd":
CortThick_case_controls_adult = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'ocdadults_case-controls_CortThick.csv'),
error_bad_lines=False)
CortSurf_case_controls_adult = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'ocdadults_case-controls_CortSurf.csv'),
error_bad_lines=False)
CortThick_medicatedcase_controls_adult = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'ocdadults_medicatedcase-controls_CortThick.csv'),
error_bad_lines=False)
CortSurf_medicatedcase_controls_adult = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'ocdadults_medicatedcase-controls_CortSurf.csv'),
error_bad_lines=False)
CortThick_case_controls_pediatric = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'ocdpediatric_case-controls_CortThick.csv'),
error_bad_lines=False)
CortSurf_case_controls_pediatric = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'ocdpediatric_case-controls_CortSurf.csv'),
error_bad_lines=False)
CortThick_medicatedcase_controls_pediatric = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'ocdpediatric_medicatedcase-controls_CortThick.csv'),
error_bad_lines=False)
CortSurf_medicatedcase_controls_pediatric = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'ocdpediatric_medicatedcase-controls_CortSurf.csv'),
error_bad_lines=False)
SubVol_case_vs_controls_adult = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdadult_case-controls_SubVol.csv'),
error_bad_lines=False)
SubVol_medicatedcase_vs_controls_adult = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdadult_medicatedcase-controls_SubVol.csv'),
error_bad_lines=False)
SubVol_unmedicatedcase_vs_controls_adult = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdadult_unmedicatedcase-controls_SubVol.csv'),
error_bad_lines=False)
SubVol_medicatedcase_vs_unmedicated_adult = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdadult_medicatedcase-unmedicatedcase_SubVol.csv'),
error_bad_lines=False)
SubVol_case_vs_controls_adult_late = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdadult_case-controls_SubVol_late.csv'),
error_bad_lines=False)
SubVol_case_vs_controls_adult_early = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdadult_case-controls_SubVol_early.csv'),
error_bad_lines=False)
SubVol_late_vs_early_adult = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdadult_late-early_SubVol.csv'),
error_bad_lines=False)
SubVol_case_vs_controls_adult_depression = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdadult_case-controls_SubVol_depression.csv'),
error_bad_lines=False)
SubVol_case_vs_controls_adult_nodepression = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdadult_case-controls_SubVol_nodepression.csv'),
error_bad_lines=False)
SubVol_depression_vs_nodepression_adult = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdadult_depression-nodepression_SubVol.csv'),
error_bad_lines=False)
SubVol_case_vs_controls_adult_anxiety = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdadult_case-controls_SubVol_anxiety.csv'),
error_bad_lines=False)
SubVol_case_vs_controls_adult_noanxiety = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdadult_case-controls_SubVol_noanxiety.csv'),
error_bad_lines=False)
SubVol_anxiety_vs_noanxiety_adult = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdadult_anxiety-noanxiety_SubVol.csv'),
error_bad_lines=False)
SubVol_case_vs_controls_pediatric = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdpediatric_case-controls_SubVol.csv'),
error_bad_lines=False)
SubVol_medicatedcase_vs_controls_pediatric = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdpediatric_medicatedcase-controls_SubVol.csv'),
error_bad_lines=False)
SubVol_unmedicatedcase_vs_controls_pediatric = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdpediatric_unmedicatedcase-controls_SubVol.csv'),
error_bad_lines=False)
SubVol_medicatedcase_vs_unmedicated_pediatric = pd.read_csv(os.path.join(root_pth,
'summary_statistics',
'ocdpediatric_medicatedcase-unmedicatedcase_SubVol.csv'),
error_bad_lines=False)
return {'CortThick_case_vs_controls_adult': CortThick_case_controls_adult,
'CortSurf_case_vs_controls_adult': CortSurf_case_controls_adult,
'CortThick_medicatedcase_vs_controls_adult': CortThick_medicatedcase_controls_adult,
'CortSurf_medicatedcase_vs_controls_adult': CortSurf_medicatedcase_controls_adult,
'CortThick_case_vs_controls_pediatric': CortThick_case_controls_pediatric,
'CortSurf_case_vs_controls_pediatric': CortSurf_case_controls_pediatric,
'CortThick_medicatedcase_vs_controls_pediatric': CortThick_medicatedcase_controls_pediatric,
'CortSurf_medicatedcase_vs_controls_pediatric': CortSurf_medicatedcase_controls_pediatric,
'SubVol_case_vs_controls_adult': SubVol_case_vs_controls_adult,
'SubVol_medicatedcase_vs_controls_adult': SubVol_medicatedcase_vs_controls_adult,
'SubVol_unmedicatedcase_vs_controls_adult': SubVol_unmedicatedcase_vs_controls_adult,
'SubVol_medicatedcase_vs_unmedicated_adult': SubVol_medicatedcase_vs_unmedicated_adult,
'SubVol_case_vs_controls_adult_late': SubVol_case_vs_controls_adult_late,
'SubVol_case_vs_controls_adult_early': SubVol_case_vs_controls_adult_early,
'SubVol_late_vs_early_adult': SubVol_late_vs_early_adult,
'SubVol_case_vs_controls_adult_depression': SubVol_case_vs_controls_adult_depression,
'SubVol_case_vs_controls_adult_nodepression': SubVol_case_vs_controls_adult_nodepression,
'SubVol_depression_vs_nodepression_adult': SubVol_depression_vs_nodepression_adult,
'SubVol_case_vs_controls_adult_anxiety': SubVol_case_vs_controls_adult_anxiety,
'SubVol_case_vs_controls_adult_noanxiety': SubVol_case_vs_controls_adult_noanxiety,
'SubVol_anxiety_vs_noanxiety_adult': SubVol_anxiety_vs_noanxiety_adult,
'SubVol_case_vs_controls_pediatric': SubVol_case_vs_controls_pediatric,
'SubVol_medicatedcase_vs_controls_pediatric': SubVol_medicatedcase_vs_controls_pediatric,
'SubVol_unmedicatedcase_vs_controls_pediatric': SubVol_unmedicatedcase_vs_controls_pediatric,
'SubVol_medicatedcase_vs_unmedicated_pediatric': SubVol_medicatedcase_vs_unmedicated_pediatric}
elif disorder == "schizophrenia":
CortThick_case_controls = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'scz_case-controls_CortThick.csv'), error_bad_lines=False)
CortSurf_case_controls = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'scz_case-controls_CortSurf.csv'), error_bad_lines=False)
SubVol_case_controls = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'scz_case-controls_SubVol.csv'), error_bad_lines=False)
SubVol_case_controls_mean = pd.read_csv(os.path.join(root_pth, 'summary_statistics',
'scz_case-controls_SubVol_mean.csv'), error_bad_lines=False)
return {'CortThick_case_vs_controls': CortThick_case_controls,
'CortSurf_case_vs_controls': CortSurf_case_controls,
'SubVol_case_vs_controls': SubVol_case_controls,
'SubVol_case_vs_controls_mean': SubVol_case_controls_mean}
else:
raise ValueError("must specify a valid disorder...!")
def reorder_sum_stats(in_file, out_file):
"""
Re-order cortical structures in summary statistics files
in_file = pd dataframe (sum_stats)
"""
# Load in_fil
in_file = pd.read_csv(in_file, error_bad_lines=False)
# Get original order properly
_, _, d_orig, _ = load_example_data()
d_orig.columns = d_orig.columns.str.rstrip('_thickavg')
d_orig = list(d_orig.columns)[1:-5]
d_orig[len(d_orig)//2-1] = 'L_insula'
d_orig[-1] = 'R_insula'
# Reorder summary stats
newidx = []
for j in range(len(d_orig)):
newidx = np.append(newidx, [i for i, e in enumerate(in_file['Structure'].to_list()) if e == d_orig[j]])
out = in_file.iloc[newidx]
return out.to_csv(out_file, index=False)
[docs]def nfaces(surface_name, hemisphere):
"""Returns number of faces/triangles for a surface (author: @saratheriver)
Parameters
----------
surface_name : string
Name of surface {'fsa5', 'conte69'}
hemisphere : string
Name of hemisphere {'lh', 'rh', 'both'}
Returns
-------
numfaces : int
number of faces/triangles
"""
if surface_name == 'fsa5':
if hemisphere == 'lh':
return load_fsa5()[0].GetPolys2D().shape[0]
elif hemisphere == 'rh':
return load_fsa5()[1].GetPolys2D().shape[0]
elif hemisphere == 'both':
return load_fsa5()[0].GetPolys2D().shape[0] + load_fsa5()[1].GetPolys2D().shape[0]
elif surface_name == 'conte69':
if hemisphere == 'lh':
return load_conte69()[0].GetPolys2D().shape[0]
elif hemisphere == 'rh':
return load_conte69()[1].GetPolys2D().shape[0]
elif hemisphere == 'both':
return load_conte69()[0].GetPolys2D().shape[0] + load_conte69()[1].GetPolys2D().shape[0]
[docs]def getaffine(surface_name, hemisphere):
"""Returns vox2ras transform for a surface (author: @saratheriver)
Parameters
----------
surface_name : string
Name of surface {'fsa5', 'conte69'}
hemisphere : string
Name of hemisphere {'lh', 'rh', 'both'}
Returns
-------
numfaces : 2D ndarray
vox2ras transform, shape = (4, 4)
"""
if surface_name == 'fsa5':
if hemisphere == 'lh' or 'rh':
return np.asarray([[-1.000e+00, 0.000e+00, 0.000e+00, 5.121e+03],
[0.000e+00, 0.000e+00, 1.000e+00, -5.000e-01],
[0.000e+00, -1.000e+00, 0.000e+00, 5.000e-01],
[0.000e+00, 0.000e+00, 0.000e+00, 1.000e+00]])
elif hemisphere == 'both':
return np.asarray([[-1.0000e+00, 0.0000e+00, 0.0000e+00, 1.0242e+04],
[0.0000e+00, 0.0000e+00, 1.0000e+00, -5.0000e-01],
[0.0000e+00, -1.0000e+00, 0.0000e+00, 5.0000e-01],
[0.0000e+00, 0.0000e+00, 0.0000e+00, 1.0000e+00]])
elif surface_name == 'conte69':
if hemisphere == 'lh' or 'rh':
return np.asarray([[-1.0000e+00, 0.0000e+00, 0.0000e+00, 1.6246e+04],
[0.0000e+00, 0.0000e+00, 1.0000e+00, -5.0000e-01],
[0.0000e+00, -1.0000e+00, 0.0000e+00, 5.0000e-01],
[0.0000e+00, 0.0000e+00, 0.0000e+00, 1.0000e+00]])
elif hemisphere == 'both':
return np.asarray([[-1.0000e+00, 0.0000e+00, 0.0000e+00, 3.2492e+04],
[0.0000e+00, 0.0000e+00, 1.0000e+00, -5.0000e-01],
[0.0000e+00, -1.0000e+00, 0.0000e+00, 5.0000e-01],
[0.0000e+00, 0.0000e+00, 0.0000e+00, 1.0000e+00]])
[docs]def write_cifti(data, dpath=None, fname=None, labels=None, surface_name='conte69', hemi='lh'):
"""Writes cifti file (authors: @NicoleEic, @saratheriver)
Parameters
----------
dpath : string
Path to location for saving file (e.g., '/Users/bonjour/')
fname : string
Name of file (e.g., 'ello.dscalar.nii')
Default is None
labels : list
List of region labels
Default is None
surface_name : string
Name of surface {'fsa5', 'conte69'}
Default is 'conte69'
hemi : string
Name of hemisphere {'lh', 'rh'}
Default is 'lh'
"""
if dpath is None or fname is None:
print("ey ey ya gotta specify the path and the filename :)")
if data.ndim == 1:
data = np.expand_dims(data, axis=0)
if labels is None:
labels = ['map ' + str(dim) for dim in np.arange(0, data.shape[0])]
# Load reference file
root_pth = os.path.dirname(__file__)
ref_ds = nib.load(os.path.join(root_pth, 'import_export', hemi + '.' + surface_name + '_ref.dscalar.nii'))
# Get axis
sa = nib.cifti2.cifti2_axes.ScalarAxis(labels)
bm = ref_ds.header.get_axis(1)
out_img = nib.cifti2.cifti2.Cifti2Image(dataobj=data, header=(sa, bm))
# Save cifti, woohoo!
nib.save(out_img, dpath + fname)
print(f'file saved as: {dpath + fname} .... #yolo')
# For every new summary statistic file, run the following command to reorder
# cortical structures according to ENIGMA mega-analysis protocols!
# * only run for CortThick and CortSurf
# in_file = '/Users/saratheriver/Desktop/McGill_PhD/ENIGMA/enigmatoolbox/datasets/summary_statistics/tlemtsl_case-controls_CortThick.csv'
# reorder_sum_stats(in_file, in_file)