"""
This file contains only classes that act as containers for groups of variable names.
Use to access groups of related variables at once as well as the group's name.
"""

# Features

class VariableSet:
    """Contains set of variables"""
    name = None
    features = None
    
class MetaVariableSet:
    """Contains list of multiple VariableSet objects"""
    name = None
    groups = None

class sociodem(VariableSet):
    name = 'sociodem'
    features = [
        'age',
        'female',
        'married',
        'race_ethnicity_Asian',
        'race_ethnicity_Black',
        'race_ethnicity_Hispanic',
        'race_ethnicity_Other',
        'race_ethnicity_White',
        'high.educ_< HS Diploma',
        'high.educ_Bachelor',
        'high.educ_HS Diploma/GED',
        'high.educ_Post Graduate Degree',
        'high.educ_Some College',
        'abcd_site_site01',
        'abcd_site_site02',
        'abcd_site_site03',
        'abcd_site_site04',
        'abcd_site_site05',
        'abcd_site_site06',
        'abcd_site_site07',
        'abcd_site_site08',
        'abcd_site_site09',
        'abcd_site_site10',
        'abcd_site_site11',
        'abcd_site_site12',
        'abcd_site_site13',
        'abcd_site_site14',
        'abcd_site_site15',
        'abcd_site_site16',
        'abcd_site_site17',
        'abcd_site_site18',
        'abcd_site_site19',
        'abcd_site_site20',
        'abcd_site_site21',
        'abcd_site_site22'
    ]

class sri24(VariableSet):
    name = 'sri24'
    features = [
        'sri24precentrallgm',
        'sri24precentralrgm',
        'sri24frontalsuplgm',
        'sri24frontalsuprgm',
        'sri24frontalsuporblgm',
        'sri24frontalsuporbrgm',
        'sri24frontalmidlgm',
        'sri24frontalmidrgm',
        'sri24frontalmidorblgm',
        'sri24frontalmidorbrgm',
        'sri24frontalinfoperlgm',
        'sri24frontalinfoperrgm',
        'sri24frontalinftrilgm',
        'sri24frontalinftrirgm',
        'sri24frontalinforblgm',
        'sri24frontalinforbrgm',
        'sri24rolandicoperlgm',
        'sri24rolandicoperrgm',
        'sri24suppmotorarealgm',
        'sri24suppmotorareargm',
        'sri24olfactorylgm',
        'sri24olfactoryrgm',
        'sri24frontalsupmediallgm',
        'sri24frontalsupmedialrgm',
        'sri24frontalmedorblgm',
        'sri24frontalmedorbrgm',
        'sri24rectuslgm',
        'sri24rectusrgm',
        'sri24insulalgm',
        'sri24insulargm',
        'sri24cingulumantlgm',
        'sri24cingulumantrgm',
        'sri24cingulummidlgm',
        'sri24cingulummidrgm',
        'sri24cingulumpostlgm',
        'sri24cingulumpostrgm',
        'sri24hippocampuslgm',
        'sri24hippocampusrgm',
        'sri24parahippocampallgm',
        'sri24parahippocampalrgm',
        'sri24amygdalalgm',
        'sri24amygdalargm',
        'sri24calcarinelgm',
        'sri24calcarinergm',
        'sri24cuneuslgm',
        'sri24cuneusrgm',
        'sri24linguallgm',
        'sri24lingualrgm',
        'sri24occipitalsuplgm',
        'sri24occipitalsuprgm',
        'sri24occipitalmidlgm',
        'sri24occipitalmidrgm',
        'sri24occipitalinflgm',
        'sri24occipitalinfrgm',
        'sri24fusiformlgm',
        'sri24fusiformrgm',
        'sri24postcentrallgm',
        'sri24postcentralrgm',
        'sri24parietalsuplgm',
        'sri24parietalsuprgm',
        'sri24parietalinflgm',
        'sri24parietalinfrgm',
        'sri24supramarginallgm',
        'sri24supramarginalrgm',
        'sri24angularlgm',
        'sri24angularrgm',
        'sri24precuneuslgm',
        'sri24precuneusrgm',
        'sri24paracentrallobulelgm',
        'sri24paracentrallobulergm',
        'sri24caudatelgm',
        'sri24caudatergm',
        'sri24putamenlgm',
        'sri24putamenrgm',
        'sri24pallidumlgm',
        'sri24pallidumrgm',
        'sri24thalamuslgm',
        'sri24thalamusrgm',
        'sri24heschllgm',
        'sri24heschlrgm',
        'sri24temporalsuplgm',
        'sri24temporalsuprgm',
        'sri24temporalpolesuplgm',
        'sri24temporalpolesuprgm',
        'sri24temporalmidlgm',
        'sri24temporalmidrgm',
        'sri24temporalpolemidlgm',
        'sri24temporalpolemidrgm',
        'sri24temporalinflgm',
        'sri24temporalinfrgm',
        'sri24cerebelumcrus1lvolume',
        'sri24cerebelumcrus1rvolume',
        'sri24cerebelumcrus2lvolume',
        'sri24cerebelumcrus2rvolume',
        'sri24cerebelum3lvolume',
        'sri24cerebelum3rvolume',
        'sri24cerebelum45lvolume',
        'sri24cerebelum45rvolume',
        'sri24cerebelum6lvolume',
        'sri24cerebelum6rvolume',
        'sri24cerebelum7blvolume',
        'sri24cerebelum7brvolume',
        'sri24cerebelum8lvolume',
        'sri24cerebelum8rvolume',
        'sri24cerebelum9lvolume',
        'sri24cerebelum9rvolume',
        'sri24cerebelum10lvolume',
        'sri24cerebelum10rvolume',
        'sri24vermis1gm',
        'sri24vermis2gm',
        'sri24vermis3gm',
        'sri24cblmhemiwhtlwm',
        'sri24cblmhemiwhtrwm',
        'sri24ponswm',
        'sri24corpuscallosumwm',
        'sri24wm400wm400lwm',
        'sri24wm400wm400rwm',
        'sri24vtlslateralvtllcsf',
        'sri24vtlslateralvtlrcsf',
        'sri24vtlsthirdvtllcsf',
        'sri24vtlsthirdvtlrcsf',
        'sri24suptentsupratentoriumv'
    ]

class freesurfer(VariableSet):
    name = 'freesurfer'
    features = [
        'FS_lh_bankssts_thickness',
        'FS_lh_caudalanteriorcingulate_thickness',
        'FS_lh_caudalmiddlefrontal_thickness',
        'FS_lh_cuneus_thickness',
        'FS_lh_entorhinal_thickness',
        'FS_lh_fusiform_thickness',
        'FS_lh_inferiorparietal_thickness',
        'FS_lh_inferiortemporal_thickness',
        'FS_lh_isthmuscingulate_thickness',
        'FS_lh_lateraloccipital_thickness',
        'FS_lh_lateralorbitofrontal_thickness',
        'FS_lh_lingual_thickness',
        'FS_lh_medialorbitofrontal_thickness',
        'FS_lh_middletemporal_thickness',
        'FS_lh_parahippocampal_thickness',
        'FS_lh_paracentral_thickness',
        'FS_lh_parsopercularis_thickness',
        'FS_lh_parsorbitalis_thickness',
        'FS_lh_parstriangularis_thickness',
        'FS_lh_pericalcarine_thickness',
        'FS_lh_postcentral_thickness',
        'FS_lh_posteriorcingulate_thickness',
        'FS_lh_precentral_thickness',
        'FS_lh_precuneus_thickness',
        'FS_lh_rostralanteriorcingulate_thickness',
        'FS_lh_rostralmiddlefrontal_thickness',
        'FS_lh_superiorfrontal_thickness',
        'FS_lh_superiorparietal_thickness',
        'FS_lh_superiortemporal_thickness',
        'FS_lh_supramarginal_thickness',
        'FS_lh_frontalpole_thickness',
        'FS_lh_temporalpole_thickness',
        'FS_lh_transversetemporal_thickness',
        'FS_lh_insula_thickness',
        'FS_lh_MeanThickness_thickness',
        'FS_rh_bankssts_thickness',
        'FS_rh_caudalanteriorcingulate_thickness',
        'FS_rh_caudalmiddlefrontal_thickness',
        'FS_rh_cuneus_thickness',
        'FS_rh_entorhinal_thickness',
        'FS_rh_fusiform_thickness',
        'FS_rh_inferiorparietal_thickness',
        'FS_rh_inferiortemporal_thickness',
        'FS_rh_isthmuscingulate_thickness',
        'FS_rh_lateraloccipital_thickness',
        'FS_rh_lateralorbitofrontal_thickness',
        'FS_rh_lingual_thickness',
        'FS_rh_medialorbitofrontal_thickness',
        'FS_rh_middletemporal_thickness',
        'FS_rh_parahippocampal_thickness',
        'FS_rh_paracentral_thickness',
        'FS_rh_parsopercularis_thickness',
        'FS_rh_parsorbitalis_thickness',
        'FS_rh_parstriangularis_thickness',
        'FS_rh_pericalcarine_thickness',
        'FS_rh_postcentral_thickness',
        'FS_rh_posteriorcingulate_thickness',
        'FS_rh_precentral_thickness',
        'FS_rh_precuneus_thickness',
        'FS_rh_rostralanteriorcingulate_thickness',
        'FS_rh_rostralmiddlefrontal_thickness',
        'FS_rh_superiorfrontal_thickness',
        'FS_rh_superiorparietal_thickness',
        'FS_rh_superiortemporal_thickness',
        'FS_rh_supramarginal_thickness',
        'FS_rh_frontalpole_thickness',
        'FS_rh_temporalpole_thickness',
        'FS_rh_transversetemporal_thickness',
        'FS_rh_insula_thickness',
        'FS_rh_MeanThickness_thickness',
        'FS_Left-Lateral-Ventricle',
        'FS_Left-Inf-Lat-Vent',
        'FS_Left-Cerebellum-White-Matter',
        'FS_Left-Cerebellum-Cortex',
        'FS_Left-Thalamus-Proper',
        'FS_Left-Caudate',
        'FS_Left-Putamen',
        'FS_Left-Pallidum',
        'FS_3rd-Ventricle',
        'FS_4th-Ventricle',
        'FS_Brain-Stem',
        'FS_Left-Hippocampus',
        'FS_Left-Amygdala',
        'FS_CSF',
        'FS_Left-Accumbens-area',
        'FS_Left-VentralDC',
        'FS_Left-vessel',
        'FS_Left-choroid-plexus',
        'FS_Right-Lateral-Ventricle',
        'FS_Right-Inf-Lat-Vent',
        'FS_Right-Cerebellum-White-Matter',
        'FS_Right-Cerebellum-Cortex',
        'FS_Right-Thalamus-Proper',
        'FS_Right-Caudate',
        'FS_Right-Putamen',
        'FS_Right-Pallidum',
        'FS_Right-Hippocampus',
        'FS_Right-Amygdala',
        'FS_Right-Accumbens-area',
        'FS_Right-VentralDC',
        'FS_Right-vessel',
        'FS_Right-choroid-plexus',
        'FS_5th-Ventricle',
        'FS_WM-hypointensities',
        'FS_Left-WM-hypointensities',
        'FS_Right-WM-hypointensities',
        'FS_non-WM-hypointensities',
        'FS_Left-non-WM-hypointensities',
        'FS_Right-non-WM-hypointensities',
        'FS_Optic-Chiasm',
        'FS_CC_Posterior',
        'FS_CC_Mid_Posterior',
        'FS_CC_Central',
        'FS_CC_Mid_Anterior',
        'FS_CC_Anterior',
        'FS_BrainSegVol',
        'FS_BrainSegVolNotVent',
        'FS_BrainSegVolNotVentSurf',
        'FS_lhCortexVol',
        'FS_rhCortexVol',
        'FS_CortexVol',
        'FS_lhCorticalWhiteMatterVol',
        'FS_rhCorticalWhiteMatterVol',
        'FS_CorticalWhiteMatterVol',
        'FS_SubCortGrayVol',
        'FS_TotalGrayVol',
        'FS_SupraTentorialVol',
        'FS_SupraTentorialVolNotVent',
        'FS_SupraTentorialVolNotVentVox',
        'FS_MaskVol',
        'FS_BrainSegVol-to-eTIV',
        'FS_MaskVol-to-eTIV',
        'FS_lhSurfaceHoles',
        'FS_rhSurfaceHoles',
        'FS_SurfaceHoles',
        'FS_EstimatedTotalIntraCranialVol'
    ]

class all_brain_features(VariableSet):
    name = 'all_brain_features'
    features = sri24.features + freesurfer.features
    
class all_features(VariableSet):
    name = 'all_features'
    features = sociodem.features + all_brain_features.features


# Target variables

class diagnoses(VariableSet):
    name = 'diagnoses'
    features = [
        'Major Depressive Disorder',
        'Bipolar Disorder',
        'Psychotic Symptoms',
        'ADHD',
        'Oppositional Defiant Disorder',
        'Conduct Disorder',
        'PTSD',
        'Obsessive Compulsive Disorder',
        'Generalized Anxiety Disorder',
        'Social Anxiety Disorder'
    ]

# Only ADHD (for testing purposes)
class adhd(VariableSet):
    name = 'adhd'
    features = [ 'ADHD' ]
