A data-driven approach to identifying and evaluating connectivity-based neural correlates of conscious visual perception.
The 17 matches
- [1] § Materials and methods › Neuroimaging preprocessing › Anatomical preprocessing ↔ MEG_preprocessing/MEG_preprocessing_driver_script.sh, lines 47–108 · score 0.90 · single shell boundary, Scalp surfaces, FreeSurfer, elements model, forward model, recon
- [2] § Materials and methods › Fitting classifiers ↔ barycenter_robustness/barycenter_robustness_checks.ipynb, lines 81–130 · score 0.70 · StratifiedGroupKFold, cross task classification, logistic regression, v1, Irrelevant, predict
- [3] § Materials and methods › Neuroimaging preprocessing › MEG preprocessing ↔ MEG_preprocessing/cogitate-msp1/coglib/meeg/qc/QC_processing_eeg.py, lines 179–221 · score 0.69 · muscle artifacts, Maxwell filter, gradiometer, magnetometer, threshold, preprocessed
- [4] § Materials and methods › Fitting classifiers ↔ classification/fit_pyspi_classifiers.py, lines 346–422 · score 0.67 · StratifiedGroupKFold, cross task classification, cross validated, fit, SD, train
- [5] § Materials and methods › Neuroimaging preprocessing › MEG preprocessing ↔ MEG_preprocessing/MEG_preprocessing_driver_script.sh, lines 47–108 · score 0.67 · event related field, brain region, pipeline, preprocessed, fit, MEG
- [6] § Materials and methods › Neuroimaging preprocessing › Anatomical preprocessing ↔ data_visualization/methods.ipynb, lines 26–76 · score 0.65 · intraparietal sulcus, prefrontal cortex, Category selective, inflated, fsaverage, surface
- [7] § Materials and methods › Neuroimaging preprocessing › Anatomical preprocessing ↔ data_visualization/methods.ipynb, lines 26–76 · score 0.62 · prefrontal cortex, category selective, parcel, Network, atlas, FreeSurfer
- [8] § Materials and methods › Fitting classifiers ↔ MEG_preprocessing/cogitate-msp1/coglib/ieeg/decoding/calibration.py, lines 18–89 · score 0.62 · support vector machine, cross validated, binary, regression, probability, fit
- [9] § Materials and methods › Fitting classifiers ↔ barycenter_robustness/barycenter_robustness_checks.ipynb, lines 153–244 · score 0.59 · robustness check, logistic regression, cross validated, fit, classifier, accuracy
- [10] § Materials and methods › Neuroimaging data acquisition and task paradigm ↔ MEG_preprocessing/cogitate-msp1/coglib/beh_et/behavior/quality_checks.py, lines 833–903 · score 0.59 · alarm rates, hit rates, behavioral, durations, stimuli
- [11] § Materials and methods › Theory-driven neural modeling › Model development and implementation ↔ modeling/CogitateModels.ipynb, lines 66–122 · score 0.56 · strong adaptation, stimulus offset, stimulus onset, simulated, CS, PFC
- [12] § Materials and methods › Fitting classifiers ↔ classification/fit_pyspi_classifiers.py, lines 346–422 · score 0.56 · cross task classification, cross validating, pyspi, fit, stratified, folds
- [13] § Results ↔ classification/fit_pyspi_classifiers.py, lines 550–631 · score 0.53 · standard deviation, Fitting classifiers, cross validation, pyspi, SD, Irrelevant
- [14] § Materials and methods › Neuroimaging data acquisition and task paradigm ↔ MEG_preprocessing/cogitate-msp1/coglib/fmri/logfiles_and_checks/01_exp1_create_events_tsv_file.py, lines 89–223 · score 0.53 · stimulus events, alarm, hit, letters, BIDS, Irrelevant
- [15] § Materials and methods › Neuroimaging preprocessing › Anatomical preprocessing ↔ data_visualization/classification_analysis_visualization.ipynb, lines 65–155 · score 0.53 · prefrontal cortex, Category selective, IPS, SPIs, V2, V1
- [16] § Materials and methods › Neuroimaging preprocessing › Anatomical preprocessing ↔ data_visualization/classification_analysis_visualization.ipynb, lines 65–155 · score 0.52 · prefrontal cortex, category selective, V2, V1, mapping, CS
- [17] § Materials and methods › Theory-driven neural modeling › Quantitative model evaluation ↔ modeling/CogitateModels.ipynb, lines 66–122 · score 0.50 · GNWT models, sweep, smaller, stimulus onset, noise, simulated
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
Python · 894 lines · 52 KB · no license · 3 matches
- from copy import deepcopy
- from glob import glob
- import os
- from os import path as op
- import numpy as np
- import pandas as pd
- import sys
- from sklearn import svm
- from sklearn.linear_model import LogisticRegression
- from sklearn.metrics import make_scorer, roc_auc_score, accuracy_score, balanced_accuracy_score
- from sklearn.model_selection import StratifiedGroupKFold, cross_validate, StratifiedKFold, LeaveOneOut, cross_val_predict
- from sklearn.pipeline import Pipeline
- from sklearn.utils import resample
- import itertools
- import argparse
- from joblib import Parallel, delayed
- # add path to classification analysis functions
- from mixed_sigmoid_normalisation import MixedSigmoidScaler
- parser=argparse.ArgumentParser()
- parser.add_argument('--bids_root',
- type=str,
- default='/project/hctsa/annie/data/Cogitate_Batch1/MEG_Data/',
- help='Path to the BIDS root directory')
- parser.add_argument('--n_jobs',
- type=int,
- default=1,
- help='Number of concurrent processing jobs')
- parser.add_argument('--SPI_directionality_file',
- type=str,
- default='/headnode1/abry4213/github/Cogitate_Connectivity_2024/feature_extraction/pyspi_SPI_info.csv',
- help='CSV file with SPI directionality info')
- parser.add_argument('--subject_ID',
- type=str,
- default=None,
- help='Subject for intra-subject classification [optional]')
- parser.add_argument('--classification_type',
- type=str,
- default='all',
- help='Whether to perform average and/or individual classification; default is all')
- parser.add_argument('--classifier',
- type=str,
- default='Logistic_Regression',
- help='Which type of classifier to use')
- opt=parser.parse_args()
- bids_root = opt.bids_root
- n_jobs = opt.n_jobs
- subject_ID = opt.subject_ID
- SPI_directionality_file = opt.SPI_directionality_file
- classification_type = opt.classification_type
- classifier = opt.classifier
- # Read in SPI directionality info
- SPI_directionality_info = pd.read_csv(SPI_directionality_file)
- # Load data paths
- pyspi_res_path = f"{bids_root}/derivatives/time_series_features"
- pyspi_res_path_averaged = f"{pyspi_res_path}/averaged_epochs"
- pyspi_res_path_individual = f"{pyspi_res_path}/individual_epochs"
- classification_res_path = f"{bids_root}/derivatives/classification_results"
- classification_res_path_averaged = f"{classification_res_path}/across_participants"
- classification_res_path_individual = f"{classification_res_path}/within_participants"
- # Make classification result directories
- os.makedirs(classification_res_path_averaged, exist_ok=True)
- os.makedirs(classification_res_path_individual, exist_ok=True)
- # Define classifier
- if classifier == "Linear_SVM":
- model = svm.SVC(C=1, class_weight='balanced', kernel='linear', random_state=127, probability=True)
- elif classifier == "Logistic_Regression":
- model = LogisticRegression(penalty='l1', C=1, solver='liblinear', class_weight='balanced', random_state=127)
- else:
- model = svm.SVC(C=1, class_weight='balanced', kernel='rbf', random_state=127, probability=True)
- pipe = Pipeline([('scaler', MixedSigmoidScaler(unit_variance=True)),
- ('model', model)])
- # Define scoring type
- scoring = {'accuracy': 'accuracy',
- 'balanced_accuracy': 'balanced_accuracy',
- 'AUC': make_scorer(roc_auc_score, response_method='predict_proba')}
- # meta-ROI comparisons
- meta_ROIs = ["Category_Selective", "IPS", "Prefrontal_Cortex", "V1_V2"]
- # Manually define combinations
- meta_roi_comparisons = [("Category_Selective", "IPS"),
- ("Category_Selective", "Prefrontal_Cortex"),
- ("Category_Selective", "V1_V2"),
- ("IPS", "Category_Selective"),
- ("Prefrontal_Cortex", "Category_Selective"),
- ("V1_V2", "Category_Selective")]
- # meta_roi_comparisons = list(itertools.permutations(meta_ROIs, 2))
- # Relevance type comparisons
- relevance_type_comparisons = ["Relevant-non-target", "Irrelevant"]
- # Stimulus presentation comparisons
- stimulus_presentation_comparisons = ["on", "off"]
- # Define all combinations for cross-task classification
- all_combos_for_cross_task = list(itertools.product(["relevant_to_irrelevant", "irrelevant_to_relevant"],
- ["on", "off"],
- meta_roi_comparisons))
- # Define cross-validators
- group_stratified_CV = StratifiedGroupKFold(n_splits = 10, shuffle = True, random_state=127)
- LOOCV = LeaveOneOut()
- SKF = StratifiedKFold(n_splits=5, shuffle=True, random_state=127)
- # Helper function for cross-task analysis
- def cross_task_classifier(direction, meta_roi_comparison, stimulus_presentation, pyspi_data):
- ROI_from, ROI_to = meta_roi_comparison
- # Filter pyspi data
- pyspi_data = (pyspi_data.query("meta_ROI_from == @ROI_from & meta_ROI_to == @ROI_to & stimulus_presentation == @stimulus_presentation")
- .reset_index(drop=True)
- .drop(columns=['index']))
- # All comparisons list
- cross_task_classification_results_list = []
- for SPI in pyspi_data.SPI.unique():
- # Extract this SPI
- this_SPI_data = pyspi_data.query(f"SPI == '{SPI}'")
- # Find overall number of rows
- num_rows = this_SPI_data.shape[0]
- # Extract SPI values
- this_column_data = this_SPI_data["value"]
- # Find number of NaN in this column
- num_NaN = this_column_data.isna().sum()
- prop_NaN = num_NaN / num_rows
- # Find mode and SD
- column_mode_max = this_column_data.value_counts().max()
- column_SD = this_column_data.std()
- # If 0% < num_NaN < 10%, impute by the mean of each component
- if 0 < prop_NaN < 0.1:
- values_imputed = (this_column_data
- .transform(lambda x: x.fillna(x.mean())))
- this_column_data = values_imputed
- print(f"Imputing column values for {SPI}")
- this_SPI_data["value"] = this_column_data
- # If there are:
- # - more than 10% NaN values;
- # - more than 90% of the values are the same; OR
- # - the standard deviation is less than 1*10**(-10)
- # then remove the column
- if prop_NaN > 0.1 or column_mode_max / num_rows > 0.9 or column_SD < 1*10**(-10):
- print(f"{SPI} has low SD: {column_SD}, and/or too many mode occurences: {column_mode_max} out of {num_rows}, and/or {100*prop_NaN}% NaN")
- continue
- # Iterate over stimulus combos
- for this_combo in stimulus_type_comparisons:
- # Subset data to the corresponding stimulus pairs
- final_dataset_for_classification_this_combo = this_SPI_data.query(f"stimulus_type in {this_combo}")
- if direction == "relevant_to_irrelevant":
- train_df = final_dataset_for_classification_this_combo.query("relevance_type == 'Relevant-non-target'")
- test_df = final_dataset_for_classification_this_combo.query("relevance_type == 'Irrelevant'")
- else:
- train_df = final_dataset_for_classification_this_combo.query("relevance_type == 'Irrelevant'")
- test_df = final_dataset_for_classification_this_combo.query("relevance_type == 'Relevant-non-target'")
- # Make a deepcopy of the pipeline
- this_iter_pipe = deepcopy(pipe)
- # Fit classifier
- X_train = train_df.value.to_numpy().reshape(-1, 1)
- y_train = train_df.stimulus_type.to_numpy().reshape(-1, 1)
- X_test = test_df.value.to_numpy().reshape(-1, 1)
- y_test = test_df.stimulus_type.to_numpy().reshape(-1, 1)
- this_iter_pipe.fit(X_train, y_train)
- y_pred = this_iter_pipe.predict(X_test)
- # Compute accuracy, balanced accuracy, and AUC
- accuracy = accuracy_score(y_test, y_pred)
- balanced_accuracy = balanced_accuracy_score(y_test, y_pred)
- this_SPI_combo_df = pd.DataFrame({"SPI": [SPI],
- "classifier": [classifier],
- "meta_ROI_from": [ROI_from],
- "meta_ROI_to": [ROI_to],
- "cross_task_direction": [direction],
- "stimulus_presentation": [stimulus_presentation],
- "stimulus_combo": [this_combo],
- "accuracy": [accuracy],
- "balanced_accuracy": [balanced_accuracy]})
- # Append to growing results list
- cross_task_classification_results_list.append(this_SPI_combo_df)
- # Concatenate all results
- cross_task_classification_results_df = pd.concat(cross_task_classification_results_list)
- # Return results
- return cross_task_classification_results_df
- #################################################################################################
- # Classification across participants with averaged epochs
- #################################################################################################
- if classification_type == "averaged":
- # Load in pyspi results
- all_pyspi_res_list = []
- # for pyspi_res_file in os.listdir(pyspi_res_path_averaged):
- for pyspi_res_file in glob(f"{pyspi_res_path_averaged}/*all_pyspi_results_1000ms.csv"):
- pyspi_res = pd.read_csv(pyspi_res_file)
- # Reset index
- pyspi_res.reset_index(inplace=True, drop=True)
- pyspi_res['stimulus_type'] = pyspi_res['stimulus_type'].replace(False, 'false').replace('False', 'false')
- pyspi_res['relevance_type'] = pyspi_res['relevance_type'].replace("Relevant non-target", "Relevant-non-target")
- # Rename stimulus to stimulus_presentation if it is present
- if 'stimulus' in pyspi_res.columns:
- if 'stimulus_presentation' in pyspi_res.columns:
- pyspi_res.drop(columns=['stimulus'], inplace=True)
- else:
- pyspi_res = pyspi_res.rename(columns={'stimulus': 'stimulus_presentation'})
- all_pyspi_res_list.append(pyspi_res)
- all_pyspi_res = pd.concat(all_pyspi_res_list)
- # Stimulus type comparisons
- stimulus_types = all_pyspi_res.stimulus_type.unique().tolist()
- stimulus_type_comparisons = list(itertools.combinations(stimulus_types, 2))
- # Comparing between stimulus types
- if not os.path.isfile(f"{classification_res_path_averaged}/comparing_between_stimulus_types_{classifier}_classification_results_AUC.csv"):
- # All comparisons list
- comparing_between_stimulus_types_classification_results_list = []
- for relevance_type in relevance_type_comparisons:
- print("Relevance type:" + str(relevance_type))
- for stimulus_presentation in stimulus_presentation_comparisons:
- print("Stimulus presentation:" + str(stimulus_presentation))
- for SPI in all_pyspi_res.SPI.unique():
- # First, look at each meta-ROI pair separately
- for meta_roi_comparison in meta_roi_comparisons:
- print("ROI Comparison:" + str(meta_roi_comparison))
- ROI_from, ROI_to = meta_roi_comparison
- # Finally, we get to the final dataset
- roi_pair_wise_dataset_for_classification = (all_pyspi_res.query("meta_ROI_from == @ROI_from & meta_ROI_to == @ROI_to & relevance_type == @relevance_type & stimulus_presentation == @stimulus_presentation")
- .reset_index(drop=True)
- .drop(columns=['index']))
- # Extract this SPI
- this_SPI_data = roi_pair_wise_dataset_for_classification.query(f"SPI == '{SPI}'")
- # Find overall number of rows
- num_rows = this_SPI_data.shape[0]
- # Extract SPI values
- this_column_data = this_SPI_data["value"]
- # Find number of NaN in this column
- num_NaN = this_column_data.isna().sum()
- prop_NaN = num_NaN / num_rows
- # Find mode and SD
- column_mode_max = this_column_data.value_counts().max()
- column_SD = this_column_data.std()
- # If 0% < num_NaN < 10%, impute by the mean of each component
- if 0 < prop_NaN < 0.1:
- values_imputed = (this_column_data
- .transform(lambda x: x.fillna(x.mean())))
- this_column_data = values_imputed
- print(f"Imputing column values for {SPI}")
- this_SPI_data["value"] = this_column_data
- # If there are:
- # - more than 10% NaN values;
- # - more than 90% of the values are the same; OR
- # - the standard deviation is less than 1*10**(-10)
- # then remove the column
- if prop_NaN > 0.1 or column_mode_max / num_rows > 0.9 or column_SD < 1*10**(-10):
- print(f"{SPI} has low SD: {column_SD}, and/or too many mode occurences: {column_mode_max} out of {num_rows}, and/or {100*prop_NaN}% NaN")
- continue
- # Start an empty list for the classification results
- SPI_combo_res_list = []
- # Iterate over stimulus combos
- for this_combo in stimulus_type_comparisons:
- # Subset data to the corresponding stimulus pairs
- final_dataset_for_classification_this_combo = this_SPI_data.query(f"stimulus_type in {this_combo}")
- # Fit classifier
- X = final_dataset_for_classification_this_combo.value.to_numpy().reshape(-1, 1)
- y = final_dataset_for_classification_this_combo.stimulus_type.to_numpy().reshape(-1, 1)
- groups = final_dataset_for_classification_this_combo.subject_ID.to_numpy().reshape(-1, 1)
- groups_flat = np.array([str(item[0]) for item in groups])
- # Make a deepcopy of the pipeline
- this_iter_pipe = deepcopy(pipe)
- this_classifier_res = cross_validate(this_iter_pipe, X, y, groups=groups_flat, cv=group_stratified_CV, scoring=scoring, n_jobs=n_jobs,
- return_estimator=False, return_train_score=False)
- this_SPI_combo_df = pd.DataFrame({"SPI": [SPI],
- "classifier": [classifier],
- "meta_ROI_from": [ROI_from],
- "meta_ROI_to": [ROI_to],
- "relevance_type": [relevance_type],
- "stimulus_presentation": [stimulus_presentation],
- "stimulus_combo": [this_combo],
- "accuracy": [this_classifier_res['test_accuracy'].mean()],
- "accuracy_SD": [this_classifier_res['test_accuracy'].std()],
- "AUC": [this_classifier_res['test_AUC'].mean()],
- "AUC_SD": [this_classifier_res['test_AUC'].std()]})
- # Append to growing results list
- comparing_between_stimulus_types_classification_results_list.append(this_SPI_combo_df)
- comparing_between_stimulus_types_classification_results = pd.concat(comparing_between_stimulus_types_classification_results_list).reset_index(drop=True)
- comparing_between_stimulus_types_classification_results.to_csv(f"{classification_res_path_averaged}/comparing_between_stimulus_types_{classifier}_classification_results_AUC.csv", index=False)
- # Comparing between relevance types
- if not os.path.isfile(f"{classification_res_path_averaged}/comparing_between_relevance_types_{classifier}_classification_results.csv"):
- # All comparisons list
- comparing_between_relevance_types_classification_results_list = []
- for meta_roi_comparison in meta_roi_comparisons:
- print("ROI Comparison:" + str(meta_roi_comparison))
- ROI_from, ROI_to = meta_roi_comparison
- for stimulus_presentation in stimulus_presentation_comparisons:
- print("Stimulus presentation:" + str(stimulus_presentation))
- # Finally, we get to the final dataset
- final_dataset_for_classification = all_pyspi_res.query("meta_ROI_from == @ROI_from & relevance_type in @relevance_type_comparisons and meta_ROI_to == @ROI_to & stimulus_presentation == @stimulus_presentation").reset_index(drop=True).drop(columns=['index'])
- for SPI in final_dataset_for_classification.SPI.unique():
- # Extract this SPI
- this_SPI_data = final_dataset_for_classification.query(f"SPI == '{SPI}'")
- # Find overall number of rows
- num_rows = this_SPI_data.shape[0]
- # Extract SPI values
- this_column_data = this_SPI_data["value"]
- # Find number of NaN in this column
- num_NaN = this_column_data.isna().sum()
- prop_NaN = num_NaN / num_rows
- # Find mode and SD
- column_mode_max = this_column_data.value_counts().max()
- column_SD = this_column_data.std()
- # If 0% < num_NaN < 10%, impute by the mean of each component
- if 0 < prop_NaN < 0.1:
- values_imputed = (this_column_data
- .transform(lambda x: x.fillna(x.mean())))
- this_column_data = values_imputed
- print(f"Imputing column values for {SPI}")
- this_SPI_data["value"] = this_column_data
- # If there are:
- # - more than 10% NaN values;
- # - more than 90% of the values are the same; OR
- # - the standard deviation is less than 1*10**(-10)
- # then remove the column
- if prop_NaN > 0.1 or column_mode_max / num_rows > 0.9 or column_SD < 1*10**(-10):
- print(f"{SPI} has low SD: {column_SD}, and/or too many mode occurences: {column_mode_max} out of {num_rows}, and/or {100*prop_NaN}% NaN")
- continue
- # Start an empty list for the classification results
- SPI_combo_res_list = []
- # Fit classifier
- X = this_SPI_data.value.to_numpy().reshape(-1, 1)
- y = this_SPI_data.relevance_type.to_numpy().reshape(-1, 1)
- groups = this_SPI_data.subject_ID.to_numpy().reshape(-1, 1)
- groups_flat = np.array([str(item[0]) for item in groups])
- group_stratified_CV = StratifiedGroupKFold(n_splits = 10, shuffle = True, random_state=127)
- # Make a deepcopy of the pipeline
- this_iter_pipe = deepcopy(pipe)
- this_classifier_res = cross_validate(this_iter_pipe, X, y, groups=groups_flat, cv=group_stratified_CV, scoring=scoring, n_jobs=n_jobs,
- return_estimator=False, return_train_score=False)
- this_SPI_relevance_results_df = pd.DataFrame({"SPI": [SPI],
- "meta_ROI_from": [ROI_from],
- "meta_ROI_to": [ROI_to],
- "stimulus_presentation": [stimulus_presentation],
- "comparison": ["Relevant non-target vs. Irrelevant"],
- "accuracy": [this_classifier_res['test_accuracy'].mean()],
- "accuracy_SD": [this_classifier_res['test_accuracy'].std()]})
- # Append to growing results list
- comparing_between_relevance_types_classification_results_list.append(this_SPI_relevance_results_df)
- comparing_between_relevance_types_classification_results = pd.concat(comparing_between_relevance_types_classification_results_list).reset_index(drop=True)
- comparing_between_relevance_types_classification_results.to_csv(f"{classification_res_path_averaged }/comparing_between_relevance_types_{classifier}_classification_results.csv", index=False)
- # Cross-task learning
- if not os.path.isfile(f"{classification_res_path_averaged}/cross_task_{classifier}_classification_results.csv"):
- print("Starting cross-task classification")
- cross_task_classification_results_list = Parallel(n_jobs=int(n_jobs))(delayed(cross_task_classifier)(direction=direction,
- meta_roi_comparison=meta_roi_comparison,
- stimulus_presentation=stimulus_presentation,
- pyspi_data=all_pyspi_res)
- for direction, stimulus_presentation, meta_roi_comparison in all_combos_for_cross_task)
- cross_task_classification_results = pd.concat(cross_task_classification_results_list).reset_index(drop=True)
- cross_task_classification_results.to_csv(f"{classification_res_path_averaged}/cross_task_{classifier}_classification_results.csv", index=False)
- #################################################################################################
- # Classification across participants with individual epochs
- #################################################################################################
- if classification_type == "individual":
- # meta-ROI comparisons
- meta_ROIs = ["Category_Selective", "IPS", "Prefrontal_Cortex", "V1_V2"]
- meta_roi_comparisons = list(itertools.permutations(meta_ROIs, 2))
- # BY STIMULUS TYPE
- # Load in this subject's pyspi results
- if not op.isfile(f"{classification_res_path_individual}/sub-{subject_ID}_comparing_between_stimulus_types_{classifier}_classification_results.csv"):
- # Load in results
- individual_subject_pyspi_res = pd.read_csv(f"{pyspi_res_path_individual}/sub-{subject_ID}_ses-1_all_pyspi_results_individual_epochs_1000ms.csv")
- # Fix stimulus_type where False to 'false'
- individual_subject_pyspi_res['stimulus_type'] = individual_subject_pyspi_res['stimulus_type'].replace(False, 'false')
- individual_subject_pyspi_res['relevance_type'] = individual_subject_pyspi_res['relevance_type'].replace("Relevant non-target", "Relevant-non-target")
- # Relevance type comparisons
- relevance_type_comparisons = ["Relevant-non-target", "Irrelevant"]
- # Stimulus presentation comparisons
- stimulus_presentation_comparisons = individual_subject_pyspi_res.stimulus_presentation.unique().tolist()
- # Stimulus type comparisons
- stimulus_types = individual_subject_pyspi_res.stimulus_type.unique().tolist()
- stimulus_type_comparisons = list(itertools.combinations(stimulus_types, 2))
- # All comparisons list
- comparing_between_stimulus_types_classification_results_list = []
- for meta_roi_comparison in meta_roi_comparisons:
- print("ROI Comparison:" + str(meta_roi_comparison))
- ROI_from, ROI_to = meta_roi_comparison
- for relevance_type in relevance_type_comparisons:
- print("Relevance type:" + str(relevance_type))
- for stimulus_presentation in stimulus_presentation_comparisons:
- print("Stimulus presentation:" + str(stimulus_presentation))
- # Finally, we get to the final dataset
- final_dataset_for_classification = individual_subject_pyspi_res.query("meta_ROI_from == @ROI_from & meta_ROI_to == @ROI_to & relevance_type == @relevance_type & stimulus_presentation == @stimulus_presentation").reset_index(drop=True).drop(columns=['index'])
- for SPI in final_dataset_for_classification.SPI.unique():
- # Extract this SPI
- this_SPI_data = final_dataset_for_classification.query(f"SPI == '{SPI}'")
- # Find overall number of rows
- num_rows = this_SPI_data.shape[0]
- # Extract SPI values
- this_column_data = this_SPI_data["value"]
- # Find number of NaN in this column
- num_NaN = this_column_data.isna().sum()
- prop_NaN = num_NaN / num_rows
- # Find mode and SD
- column_mode_max = this_column_data.value_counts().max()
- column_SD = this_column_data.std()
- # If 0% < num_NaN < 10%, impute by the mean of each component
- if 0 < prop_NaN < 0.1:
- values_imputed = (this_column_data
- .transform(lambda x: x.fillna(x.mean())))
- this_column_data = values_imputed
- print(f"Imputing column values for {SPI}")
- this_SPI_data["value"] = this_column_data
- # If there are:
- # - more than 10% NaN values;
- # - more than 90% of the values are the same; OR
- # - the standard deviation is less than 1*10**(-10)
- # then remove the column
- if prop_NaN > 0.1 or column_mode_max / num_rows > 0.9 or column_SD < 1*10**(-10):
- print(f"{SPI} has low SD: {column_SD}, and/or too many mode occurences: {column_mode_max} out of {num_rows}, and/or {100*prop_NaN}% NaN")
- continue
- # Start an empty list for the classification results
- SPI_combo_res_list = []
- # Iterate over stimulus combos
- for this_combo in stimulus_type_comparisons:
- # Subset data to the corresponding stimulus pairs
- final_dataset_for_classification_this_combo = this_SPI_data.query(f"stimulus_type in {this_combo}")
- # Fit classifier
- X = final_dataset_for_classification_this_combo.value.to_numpy().reshape(-1, 1)
- y = final_dataset_for_classification_this_combo.stimulus_type.to_numpy().reshape(-1, 1)
- stimulus_stratified_CV = StratifiedKFold(n_splits = 10, shuffle = True, random_state=127)
- # Make a deepcopy of the pipeline
- this_iter_pipe = deepcopy(pipe)
- this_classifier_res = cross_validate(this_iter_pipe, X, y, cv=stimulus_stratified_CV, scoring=scoring, n_jobs=n_jobs,
- return_estimator=False, return_train_score=False)
- this_SPI_combo_df = pd.DataFrame({subject_ID: ["sub-" + subject_ID],
- "SPI": [SPI],
- "meta_ROI_from": [ROI_from],
- "meta_ROI_to": [ROI_to],
- "relevance_type": [relevance_type],
- "stimulus_presentation": [stimulus_presentation],
- "stimulus_combo": [this_combo],
- "accuracy": [this_classifier_res['test_accuracy'].mean()],
- "accuracy_SD": [this_classifier_res['test_accuracy'].std()]})
- # Append to growing results list
- comparing_between_stimulus_types_classification_results_list.append(this_SPI_combo_df)
- comparing_between_stimulus_types_classification_results = pd.concat(comparing_between_stimulus_types_classification_results_list).reset_index(drop=True)
- comparing_between_stimulus_types_classification_results.to_csv(f"{classification_res_path_individual}/sub-{subject_ID}_comparing_between_stimulus_types_{classifier}_classification_results.csv", index=False)
- # Comparing between relevance types
- # BY RELEVANCE TYPE
- if not os.path.isfile(f"{classification_res_path_individual}/sub-{subject_ID}_comparing_between_relevance_types_{classifier}_classification_results.csv"):
- # Load in results
- individual_subject_pyspi_res = pd.read_csv(f"{pyspi_res_path_individual}/sub-{subject_ID}_ses-1_all_pyspi_results_individual_epochs_1000ms.csv")
- # Fix stimulus_type where False to 'false'
- individual_subject_pyspi_res['stimulus_type'] = individual_subject_pyspi_res['stimulus_type'].replace(False, 'false')
- # Relevance type comparisons
- relevance_type_comparisons = ["Relevant-non-target", "Irrelevant"]
- # Stimulus presentation comparisons
- stimulus_presentation_comparisons = individual_subject_pyspi_res.stimulus_presentation.unique().tolist()
- # All comparisons list
- comparing_between_relevance_types_classification_results_list = []
- for meta_roi_comparison in meta_roi_comparisons:
- print("ROI Comparison:" + str(meta_roi_comparison))
- ROI_from, ROI_to = meta_roi_comparison
- for stimulus_presentation in stimulus_presentation_comparisons:
- print("Stimulus presentation:" + str(stimulus_presentation))
- # Finally, we get to the final dataset
- final_dataset_for_classification = individual_subject_pyspi_res.query("meta_ROI_from == @ROI_from & relevance_type in @relevance_type_comparisons and meta_ROI_to == @ROI_to & stimulus_presentation == @stimulus_presentation").reset_index(drop=True).drop(columns=['index'])
- for SPI in final_dataset_for_classification.SPI.unique():
- # Extract this SPI
- this_SPI_data = final_dataset_for_classification.query(f"SPI == '{SPI}'")
- # Find overall number of rows
- num_rows = this_SPI_data.shape[0]
- # Extract SPI values
- this_column_data = this_SPI_data["value"]
- # Find number of NaN in this column
- num_NaN = this_column_data.isna().sum()
- prop_NaN = num_NaN / num_rows
- # Find mode and SD
- column_mode_max = this_column_data.value_counts().max()
- column_SD = this_column_data.std()
- # If 0% < num_NaN < 10%, impute by the mean of each component
- if 0 < prop_NaN < 0.1:
- values_imputed = (this_column_data
- .transform(lambda x: x.fillna(x.mean())))
- this_column_data = values_imputed
- print(f"Imputing column values for {SPI}")
- this_SPI_data["value"] = this_column_data
- # If there are:
- # - more than 10% NaN values;
- # - more than 90% of the values are the same; OR
- # - the standard deviation is less than 1*10**(-10)
- # then remove the column
- if prop_NaN > 0.1 or column_mode_max / num_rows > 0.9 or column_SD < 1*10**(-10):
- print(f"{SPI} has low SD: {column_SD}, and/or too many mode occurences: {column_mode_max} out of {num_rows}, and/or {100*prop_NaN}% NaN")
- continue
- # Start an empty list for the classification results
- SPI_combo_res_list = []
- # Fit classifier
- X = this_SPI_data.value.to_numpy().reshape(-1, 1)
- y = this_SPI_data.relevance_type.to_numpy().reshape(-1, 1)
- stimulus_stratified_CV = StratifiedKFold(n_splits = 10, shuffle = True, random_state=127)
- # Make a deepcopy of the pipeline
- this_iter_pipe = deepcopy(pipe)
- this_classifier_res = cross_validate(this_iter_pipe, X, y, cv=stimulus_stratified_CV, scoring=scoring, n_jobs=n_jobs,
- return_estimator=False, return_train_score=False)
- this_SPI_relevance_results_df = pd.DataFrame({subject_ID: ["sub-" + subject_ID],
- "SPI": [SPI],
- "meta_ROI_from": [ROI_from],
- "meta_ROI_to": [ROI_to],
- "stimulus_presentation": [stimulus_presentation],
- "comparison": ["Relevant non-target vs. Irrelevant"],
- "accuracy": [this_classifier_res['test_accuracy'].mean()],
- "accuracy_SD": [this_classifier_res['test_accuracy'].std()]})
- # Append to growing results list
- comparing_between_relevance_types_classification_results_list.append(this_SPI_relevance_results_df)
- comparing_between_relevance_types_classification_results = pd.concat(comparing_between_relevance_types_classification_results_list).reset_index(drop=True)
- comparing_between_relevance_types_classification_results.to_csv(f"{classification_res_path_individual}/sub-{subject_ID}_comparing_between_relevance_types_{classifier}_classification_results.csv", index=False)
- #################################################################################################
- # Classification across participants with individual epochs
- #################################################################################################
- if classification_type == "individual_subsampled":
- # meta-ROI comparisons
- meta_ROIs = ["Category_Selective", "IPS", "Prefrontal_Cortex", "V1_V2"]
- meta_roi_comparisons = list(itertools.permutations(meta_ROIs, 2))
- # BY STIMULUS TYPE
- # Load in this subject's pyspi results
- if not op.isfile(f"{classification_res_path_individual}/sub-{subject_ID}_subsampled_comparing_between_stimulus_types_{classifier}_classification_results.csv"):
- # Load in results
- individual_subject_pyspi_res = pd.read_csv(f"{pyspi_res_path_individual}/sub-{subject_ID}_ses-1_all_pyspi_results_individual_epochs_1000ms.csv")
- # Fix stimulus_type where False to 'false'
- individual_subject_pyspi_res['stimulus_type'] = individual_subject_pyspi_res['stimulus_type'].replace(False, 'false')
- individual_subject_pyspi_res['relevance_type'] = individual_subject_pyspi_res['relevance_type'].replace("Relevant non-target", "Relevant-non-target")
- # Relevance type comparisons
- relevance_type_comparisons = ["Relevant-non-target", "Irrelevant"]
- # Stimulus presentation comparisons
- stimulus_presentation_comparisons = individual_subject_pyspi_res.stimulus_presentation.unique().tolist()
- # Stimulus type comparisons
- stimulus_types = individual_subject_pyspi_res.stimulus_type.unique().tolist()
- stimulus_type_comparisons = list(itertools.combinations(stimulus_types, 2))
- # All comparisons list
- comparing_between_stimulus_types_classification_results_list = []
- for meta_roi_comparison in meta_roi_comparisons:
- print("ROI Comparison:" + str(meta_roi_comparison))
- ROI_from, ROI_to = meta_roi_comparison
- for relevance_type in relevance_type_comparisons:
- print("Relevance type:" + str(relevance_type))
- for stimulus_presentation in stimulus_presentation_comparisons:
- print("Stimulus presentation:" + str(stimulus_presentation))
- # Finally, we get to the final dataset
- final_dataset_for_classification = individual_subject_pyspi_res.query("meta_ROI_from == @ROI_from & meta_ROI_to == @ROI_to & relevance_type == @relevance_type & stimulus_presentation == @stimulus_presentation").reset_index(drop=True).drop(columns=['index'])
- for SPI in final_dataset_for_classification.SPI.unique():
- # Extract this SPI
- this_SPI_data = final_dataset_for_classification.query(f"SPI == '{SPI}'")
- # Find overall number of rows
- num_rows = this_SPI_data.shape[0]
- # Extract SPI values
- this_column_data = this_SPI_data["value"]
- # Find number of NaN in this column
- num_NaN = this_column_data.isna().sum()
- prop_NaN = num_NaN / num_rows
- # Find mode and SD
- column_mode_max = this_column_data.value_counts().max()
- column_SD = this_column_data.std()
- # If 0% < num_NaN < 10%, impute by the mean of each component
- if 0 < prop_NaN < 0.1:
- values_imputed = (this_column_data
- .transform(lambda x: x.fillna(x.mean())))
- this_column_data = values_imputed
- print(f"Imputing column values for {SPI}")
- this_SPI_data["value"] = this_column_data
- # If there are:
- # - more than 10% NaN values;
- # - more than 90% of the values are the same; OR
- # - the standard deviation is less than 1*10**(-10)
- # then remove the column
- if prop_NaN > 0.1 or column_mode_max / num_rows > 0.9 or column_SD < 1*10**(-10):
- print(f"{SPI} has low SD: {column_SD}, and/or too many mode occurences: {column_mode_max} out of {num_rows}, and/or {100*prop_NaN}% NaN")
- continue
- # Start an empty list for the classification results
- SPI_combo_res_list = []
- # Iterate over stimulus combos
- for this_combo in stimulus_type_comparisons:
- # Subset data to the corresponding stimulus pairs
- final_dataset_for_classification_this_combo = this_SPI_data.query(f"stimulus_type in {this_combo}")
- # Fit classifier
- X = final_dataset_for_classification_this_combo.value.to_numpy().reshape(-1, 1)
- y = final_dataset_for_classification_this_combo.stimulus_type.to_numpy().reshape(-1, 1)
- # Check if there are >20 samples in each class of y, without hard-coding the values of y
- if np.unique(y, return_counts=True)[1].min() > 20:
- print(f"Running subsampled classification for {this_combo}")
- classification_across_iters_list = []
- # For 50 iterations, randomly sample 20 samples from each class for leave-one-out classification
- for iter_num in range(100):
- # Randomly sample 20 samples from each class for leave-one-out classification
- X_resampled = []
- y_resampled = []
- for this_class in np.unique(y):
- X_resampled_class, y_resampled_class = resample(X[y == this_class], y[y == this_class], n_samples=20, replace=False, random_state=iter_num)
- X_resampled.append(X_resampled_class)
- y_resampled.append(y_resampled_class)
- X_resampled = np.concatenate(X_resampled).reshape(-1, 1)
- y_resampled = np.concatenate(y_resampled)
- y_pred = cross_val_predict(deepcopy(pipe), X_resampled, y_resampled, cv=LOOCV, n_jobs=n_jobs)
- y_pred_proba = cross_val_predict(deepcopy(pipe), X_resampled, y_resampled, cv=LOOCV, n_jobs=n_jobs, method='predict_proba')
- # Calculate classification results
- accuracy = accuracy_score(y_resampled, y_pred)
- balanced_accuracy = balanced_accuracy_score(y_resampled, y_pred)
- AUC = roc_auc_score(y_resampled, y_pred_proba[:, 1])
- # Combine into df
- iter_df = pd.DataFrame({"iter_num": iter_num + 1, "accuracy": accuracy, "balanced_accuracy": balanced_accuracy, "AUC": AUC}, index=[0])
- classification_across_iters_list.append(iter_df)
- # Combine all iterations
- classification_across_iters_df = pd.concat(classification_across_iters_list, ignore_index=True)
- this_SPI_combo_df = pd.DataFrame({subject_ID: ["sub-" + subject_ID],
- "SPI": [SPI],
- "meta_ROI_from": [ROI_from],
- "meta_ROI_to": [ROI_to],
- "relevance_type": [relevance_type],
- "stimulus_presentation": [stimulus_presentation],
- "stimulus_combo": [this_combo],
- "accuracy": [classification_across_iters_df['accuracy'].mean()],
- "balanced_accuracy": [classification_across_iters_df['balanced_accuracy'].mean()],
- "AUC": [classification_across_iters_df['AUC'].mean()]})
- # Append to growing results list
- comparing_between_stimulus_types_classification_results_list.append(this_SPI_combo_df)
- if len(comparing_between_stimulus_types_classification_results_list) > 0:
- comparing_between_stimulus_types_classification_results = pd.concat(comparing_between_stimulus_types_classification_results_list).reset_index(drop=True)
- comparing_between_stimulus_types_classification_results.to_csv(f"{classification_res_path_individual}/sub-{subject_ID}_subsampled_comparing_between_stimulus_types_{classifier}_classification_results.csv", index=False)
- # Comparing between relevance types
- # BY RELEVANCE TYPE
- if not os.path.isfile(f"{classification_res_path_individual}/sub-{subject_ID}_subsampled_comparing_between_relevance_types_{classifier}_classification_results.csv"):
- # Load in results
- individual_subject_pyspi_res = pd.read_csv(f"{pyspi_res_path_individual}/sub-{subject_ID}_ses-1_all_pyspi_results_individual_epochs_1000ms.csv")
- # Fix stimulus_type where False to 'false'
- individual_subject_pyspi_res['stimulus_type'] = individual_subject_pyspi_res['stimulus_type'].replace(False, 'false')
- # Relevance type comparisons
- relevance_type_comparisons = ["Relevant-non-target", "Irrelevant"]
- # Stimulus presentation comparisons
- stimulus_presentation_comparisons = individual_subject_pyspi_res.stimulus_presentation.unique().tolist()
- # All comparisons list
- comparing_between_relevance_types_classification_results_list = []
- for meta_roi_comparison in meta_roi_comparisons:
- print("ROI Comparison:" + str(meta_roi_comparison))
- ROI_from, ROI_to = meta_roi_comparison
- for stimulus_presentation in stimulus_presentation_comparisons:
- print("Stimulus presentation:" + str(stimulus_presentation))
- # Finally, we get to the final dataset
- final_dataset_for_classification = individual_subject_pyspi_res.query("meta_ROI_from == @ROI_from & relevance_type in @relevance_type_comparisons and meta_ROI_to == @ROI_to & stimulus_presentation == @stimulus_presentation").reset_index(drop=True).drop(columns=['index'])
- for SPI in final_dataset_for_classification.SPI.unique():
- # Extract this SPI
- this_SPI_data = final_dataset_for_classification.query(f"SPI == '{SPI}'")
- # Find overall number of rows
- num_rows = this_SPI_data.shape[0]
- # Extract SPI values
- this_column_data = this_SPI_data["value"]
- # Find number of NaN in this column
- num_NaN = this_column_data.isna().sum()
- prop_NaN = num_NaN / num_rows
- # Find mode and SD
- column_mode_max = this_column_data.value_counts().max()
- column_SD = this_column_data.std()
- # If 0% < num_NaN < 10%, impute by the mean of each component
- if 0 < prop_NaN < 0.1:
- values_imputed = (this_column_data
- .transform(lambda x: x.fillna(x.mean())))
- this_column_data = values_imputed
- print(f"Imputing column values for {SPI}")
- this_SPI_data["value"] = this_column_data
- # If there are:
- # - more than 10% NaN values;
- # - more than 90% of the values are the same; OR
- # - the standard deviation is less than 1*10**(-10)
- # then remove the column
- if prop_NaN > 0.1 or column_mode_max / num_rows > 0.9 or column_SD < 1*10**(-10):
- print(f"{SPI} has low SD: {column_SD}, and/or too many mode occurences: {column_mode_max} out of {num_rows}, and/or {100*prop_NaN}% NaN")
- continue
- # Start an empty list for the classification results
- SPI_combo_res_list = []
- # Fit classifier
- X = this_SPI_data.value.to_numpy().reshape(-1, 1)
- y = this_SPI_data.relevance_type.to_numpy().reshape(-1, 1)
- # Check if there are >20 samples in each class of y, without hard-coding the values of y
- if np.unique(y, return_counts=True)[1].min() > 20:
- print(f"Running subsampled classification for {this_combo}")
- classification_across_iters_list = []
- # For 100 iterations, randomly sample 20 samples from each class for leave-one-out classification
- for iter_num in range(100):
- # Randomly sample 20 samples from each class for leave-one-out classification
- X_resampled = []
- y_resampled = []
- for this_class in np.unique(y):
- X_resampled_class, y_resampled_class = resample(X[y == this_class], y[y == this_class], n_samples=20, replace=False, random_state=iter_num)
- X_resampled.append(X_resampled_class)
- y_resampled.append(y_resampled_class)
- X_resampled = np.concatenate(X_resampled).reshape(-1, 1)
- y_resampled = np.concatenate(y_resampled)
- y_pred = cross_val_predict(deepcopy(pipe), X_resampled, y_resampled, cv=LOOCV, n_jobs=n_jobs)
- y_pred_proba = cross_val_predict(deepcopy(pipe), X_resampled, y_resampled, cv=LOOCV, n_jobs=n_jobs, method='predict_proba')
- # Calculate classification results
- accuracy = accuracy_score(y_resampled, y_pred)
- balanced_accuracy = balanced_accuracy_score(y_resampled, y_pred)
- AUC = roc_auc_score(y_resampled, y_pred_proba[:, 1])
- # Combine into df
- iter_df = pd.DataFrame({"iter_num": iter_num + 1, "accuracy": accuracy, "balanced_accuracy": balanced_accuracy, "AUC": AUC}, index=[0])
- classification_across_iters_list.append(iter_df)
- # Combine all iterations
- classification_across_iters_df = pd.concat(classification_across_iters_list, ignore_index=True)
- this_SPI_relevance_results_df = pd.DataFrame({subject_ID: ["sub-" + subject_ID],
- "SPI": [SPI],
- "meta_ROI_from": [ROI_from],
- "meta_ROI_to": [ROI_to],
- "stimulus_presentation": [stimulus_presentation],
- "comparison": ["Relevant non-target vs. Irrelevant"],
- "accuracy": [classification_across_iters_df['accuracy'].mean()],
- "balanced_accuracy": [classification_across_iters_df['balanced_accuracy'].mean()],
- "AUC": [classification_across_iters_df['AUC'].mean()]})
- # Append to growing results list
- comparing_between_relevance_types_classification_results_list.append(this_SPI_relevance_results_df)
- if len(comparing_between_relevance_types_classification_results_list) > 0:
- comparing_between_relevance_types_classification_results = pd.concat(comparing_between_relevance_types_classification_results_list).reset_index(drop=True)
- comparing_between_relevance_types_classification_results.to_csv(f"{classification_res_path_individual}/sub-{subject_ID}_subsampled_comparing_between_relevance_types_{classifier}_classification_results.csv", index=False)
fit_pyspi_classifiers.py at commit cab648b, no license · at the source
Overview
- School of Physics, The University of Sydney, Camperdown, NSW, Australia
- Centre for Complex Systems, The University of Sydney, Camperdown, NSW, Australia
- Neuroscience Research Theme, School of Medical Sciences, Faculty of Medicine and Health, The University of Sydney, Sydney, NSW, Australia
Abstract
Identifying the neural correlates of conscious visual perception remains a major challenge in neuroscience, requiring theories that bridge between subjective experience and measurable neural correlates. However, theoretical interpretation of empirical evidence is often post hoc and susceptible to confirmation bias. Building upon the adversarial collaboration mediated by the COGITATE Consortium, we present a generalizable approach for the data-driven identification, evaluation, and theoretical modeling of connectivity-based neural correlates of conscious visual perception. Using the same magnetoencephalography (MEG) dataset and accompanying pre-registered hypotheses from the COGITATE Consortium, we systematically compared 246 functional connectivity (FC) measures between regions predicted to underlie conscious vision by Integrated Information Theory (IIT) and/
Reproduced under the paper's license (CC BY-NC), from the paper cited above.
Repository
Its files are read in the Code ↔ Paper reader above, with 17 matches between paragraphs and lines of code.
anniegbryant/MEG_functional_connectivity
cab648bbe2eab7093f9ab7b9a5fcddabf28e60a0, 28 January 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
289 files
- MEG_preprocessing/
MEG_preprocessing_driver , Shell, 108 lines, 2 matches_script.sh - MEG_preprocessing/
cogitate-msp1/ , Jupyter, 561 linescoglib/ bayesFactor/ HowToUse.ipynb - MEG_preprocessing/
cogitate-msp1/ , Python, 797 linescoglib/ bayesFactor/ bayes_factor_fun.py - MEG_preprocessing/
cogitate-msp1/ , Jupyter, 89 linescoglib/ bayesFactor/ bayesfactor_additionalin fo.ipynb - MEG_preprocessing/
cogitate-msp1/ , Python, 486 linescoglib/ beh_et/ behavior/ data_reader.py - MEG_preprocessing/
cogitate-msp1/ , Python, 149 linescoglib/ beh_et/ behavior/ data_saver.py - MEG_preprocessing/
cogitate-msp1/ , R, 592 linescoglib/ beh_et/ behavior/ exp1_lmms.R - MEG_preprocessing/
cogitate-msp1/ , Python, 1,044 lines, 1 matchcoglib/ beh_et/ behavior/ quality_checks.py - MEG_preprocessing/
cogitate-msp1/ , Python, 90 linescoglib/ beh_et/ behavior/ quality_checks_criteria. py - MEG_preprocessing/
cogitate-msp1/ , Python, 89 linescoglib/ beh_et/ eyetracking/ AnalysisHelpers.py - MEG_preprocessing/
cogitate-msp1/ , Python, 946 linescoglib/ beh_et/ eyetracking/ DataParser.py - MEG_preprocessing/
cogitate-msp1/ , Python, 899 linescoglib/ beh_et/ eyetracking/ ET_data_extraction.py - MEG_preprocessing/
cogitate-msp1/ , Python, 2,531 linescoglib/ beh_et/ eyetracking/ ET_data_processing.py - MEG_preprocessing/
cogitate-msp1/ , Python, 297 linescoglib/ beh_et/ eyetracking/ ET_param_manager.py - MEG_preprocessing/
cogitate-msp1/ , Python, 228 linescoglib/ beh_et/ eyetracking/ ET_qc_manager.py - MEG_preprocessing/
cogitate-msp1/ , Python, 173 linescoglib/ beh_et/ eyetracking/ based_noise_blinks_detec tion.py - MEG_preprocessing/
cogitate-msp1/ , Python, 226 linescoglib/ beh_et/ eyetracking/ data_reader.py - MEG_preprocessing/
cogitate-msp1/ , R, 310 linescoglib/ beh_et/ eyetracking/ exp1_et_lmms.R - MEG_preprocessing/
cogitate-msp1/ , Python, 499 linescoglib/ beh_et/ eyetracking/ plotter.py - MEG_preprocessing/
cogitate-msp1/ , Python, 304 linescoglib/ beh_et/ eyetracking/ tobii_et_handler_matlab_ limited.py - MEG_preprocessing/
cogitate-msp1/ , Python, 103 linescoglib/ fmri/ decoding/ MSP1_roi_decoding_plots. py - MEG_preprocessing/
cogitate-msp1/ , Python, 97 linescoglib/ fmri/ decoding/ MSP1_searchlight_decodin g_plots.py - MEG_preprocessing/
cogitate-msp1/ , Python, 63 linescoglib/ fmri/ decoding/ config.py - MEG_preprocessing/
cogitate-msp1/ , Python, 1,010 linescoglib/ fmri/ decoding/ plotters.py - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 36 linescoglib/ fmri/ decoding/ rename_confounds_tsv_fil es.m - MEG_preprocessing/
cogitate-msp1/ , Python, 298 linescoglib/ fmri/ decoding/ roi_category_decoding_su bject_level.py - MEG_preprocessing/
cogitate-msp1/ , Python, 282 linescoglib/ fmri/ decoding/ roi_category_decoding_te sting_IIT_predictions_co mbined_features.py - MEG_preprocessing/
cogitate-msp1/ , Python, 69 linescoglib/ fmri/ decoding/ roi_decoding_group_analy sis.py - MEG_preprocessing/
cogitate-msp1/ , Python, 47 linescoglib/ fmri/ decoding/ roi_decoding_group_analy sis_IIT_predictions.py - MEG_preprocessing/
cogitate-msp1/ , Python, 269 linescoglib/ fmri/ decoding/ roi_orientation_decoding _subject_level.py - MEG_preprocessing/
cogitate-msp1/ , Python, 243 linescoglib/ fmri/ decoding/ searchlight_category_dec oding_subject_level.py - MEG_preprocessing/
cogitate-msp1/ , Python, 162 linescoglib/ fmri/ decoding/ searchlight_decoding_gro up_analysis.py - MEG_preprocessing/
cogitate-msp1/ , Python, 214 linescoglib/ fmri/ decoding/ searchlight_group_level_ tables.py - MEG_preprocessing/
cogitate-msp1/ , Python, 212 linescoglib/ fmri/ decoding/ searchlight_orientation_ decoding_subject_level.p y - MEG_preprocessing/
cogitate-msp1/ , Python, 221 linescoglib/ fmri/ decoding/ searchlight_stim_baselin e_decoding_subject_level .py - MEG_preprocessing/
cogitate-msp1/ , Python, 351 linescoglib/ fmri/ decoding_rois/ 01_create_decoding_rois_ all_runs.py - MEG_preprocessing/
cogitate-msp1/ , Python, 353 linescoglib/ fmri/ decoding_rois/ 02_create_decoding_rois_ leave_one_run_out.py - MEG_preprocessing/
cogitate-msp1/ , Python, 242 linescoglib/ fmri/ dicom_to_bids/ 01_convert_dicom_to_bids .py - MEG_preprocessing/
cogitate-msp1/ , Python, 202 linescoglib/ fmri/ glm/ 01_create_confound_regre ssor_ev_file.py - MEG_preprocessing/
cogitate-msp1/ , Python, 1,043 linescoglib/ fmri/ glm/ 02_run_fsf_feat_analyses .py - MEG_preprocessing/
cogitate-msp1/ , Python, 43 linescoglib/ fmri/ gppi/ MSP1_gppi_plots.py - MEG_preprocessing/
cogitate-msp1/ , Python, 63 linescoglib/ fmri/ gppi/ config.py - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 173 linescoglib/ fmri/ gppi/ glm_subject_level.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 149 linescoglib/ fmri/ gppi/ glm_subject_level_combin ed.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 164 linescoglib/ fmri/ gppi/ gppi_analysis.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 121 linescoglib/ fmri/ gppi/ gppi_analysis_combined.m - MEG_preprocessing/
cogitate-msp1/ , Python, 142 linescoglib/ fmri/ gppi/ gppi_group_analysis.py - MEG_preprocessing/
cogitate-msp1/ , Python, 187 linescoglib/ fmri/ gppi/ gppi_group_level_tables. py - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 21 linescoglib/ fmri/ gppi/ gppi_subject_level.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 21 linescoglib/ fmri/ gppi/ gppi_subject_level_combi ned.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 49 linescoglib/ fmri/ gppi/ nifti3D_conversion.m - MEG_preprocessing/
cogitate-msp1/ , Python, 1,010 linescoglib/ fmri/ gppi/ plotters.py - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 51 linescoglib/ fmri/ gppi/ smoothing.m - MEG_preprocessing/
cogitate-msp1/ , Python, 186 linescoglib/ fmri/ helper_functions_MRI.py - MEG_preprocessing/
cogitate-msp1/ , Python, 373 lines, 1 matchcoglib/ fmri/ logfiles_and_checks/ 01_exp1_create_events_ts v_file.py - MEG_preprocessing/
cogitate-msp1/ , Python, 213 linescoglib/ fmri/ logfiles_and_checks/ 02_exp1_create_regressor _txt_files.py - MEG_preprocessing/
cogitate-msp1/ , Python, 525 linescoglib/ fmri/ masks/ 01_create_ROI_masks.py - MEG_preprocessing/
cogitate-msp1/ , Python, 162 linescoglib/ fmri/ masks/ 02_resample_ROI_masks_to _target_space.py - MEG_preprocessing/
cogitate-msp1/ , Python, 286 linescoglib/ fmri/ masks/ 03_create_theory_ROI_mas ks.py - MEG_preprocessing/
cogitate-msp1/ , Shell, 21 linescoglib/ fmri/ masks/ 04_resample_MNI152_ROIs. sh - MEG_preprocessing/
cogitate-msp1/ , Python, 255 linescoglib/ fmri/ masks/ 05_create_theory_ROI_mas ks_MNI152.py - MEG_preprocessing/
cogitate-msp1/ , Python, 621 linescoglib/ fmri/ putative_ncc/ 01_putative_ncc_analysis _on_FEAT_copes.py - MEG_preprocessing/
cogitate-msp1/ , Python, 90 linescoglib/ fmri/ putative_ncc/ 02_putative_ncc_create_C _not_A_or_B_maps.py - MEG_preprocessing/
cogitate-msp1/ , Python, 619 linescoglib/ fmri/ putative_ncc/ 03_putative_ncc_analysis _on_FEAT_copes_subject_l evel.py - MEG_preprocessing/
cogitate-msp1/ , Python, 95 linescoglib/ fmri/ putative_ncc/ 04_putative_ncc_subject_ level_create_C_not_A_or_ B_maps.py - MEG_preprocessing/
cogitate-msp1/ , Python, 142 linescoglib/ fmri/ putative_ncc/ 05_multivariate_putative _ncc_analysis.py - MEG_preprocessing/
cogitate-msp1/ , Python, 75 linescoglib/ fmri/ putative_ncc/ 06_multivariate_putative _ncc_create_C_not_A_or_B _maps.py - MEG_preprocessing/
cogitate-msp1/ , Python, 112 linescoglib/ fmri/ putative_ncc/ 07_putative_ncc_merge_ph ases.py - MEG_preprocessing/
cogitate-msp1/ , Python, 105 linescoglib/ fmri/ putative_ncc/ 10_putative_ncc_merge_su bject_level.py - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 27 linescoglib/ fmri/ putative_ncc_plotting/ CustomColor.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 13 linescoglib/ fmri/ putative_ncc_plotting/ CustomColor_zMaps.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 100 linescoglib/ fmri/ putative_ncc_plotting/ Putative_NCC_01_univaria te.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 98 linescoglib/ fmri/ putative_ncc_plotting/ Putative_NCC_02_AB.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 89 linescoglib/ fmri/ putative_ncc_plotting/ Putative_NCC_03_multivar iate.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 106 linescoglib/ fmri/ putative_ncc_plotting/ Putative_NCC_04_z_maps.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 6 linescoglib/ fmri/ putative_ncc_plotting/ SaveFigures.m - MEG_preprocessing/
cogitate-msp1/ , Python, 203 linescoglib/ fmri/ putative_ncc_tables/ 01_putative_ncc_group_le vel_tables.py - MEG_preprocessing/
cogitate-msp1/ , Python, 213 linescoglib/ fmri/ putative_ncc_tables/ 02_putative_ncc_subject_ level_tables.py - MEG_preprocessing/
cogitate-msp1/ , Python, 194 linescoglib/ fmri/ putative_ncc_tables/ 03_multivariate_putative _ncc_group_level_tables. py - MEG_preprocessing/
cogitate-msp1/ , Python, 221 linescoglib/ fmri/ qc/ 01_analyze_MRIQC_IQMs.py - MEG_preprocessing/
cogitate-msp1/ , Python, 189 linescoglib/ fmri/ seeds_for_gppi/ 01_create_gppi_seeds.py - MEG_preprocessing/
cogitate-msp1/ , Python, 67 linescoglib/ ieeg/ Experiment1ActivationAna lysis/ activation_analysis_batc h_runner.py - MEG_preprocessing/
cogitate-msp1/ , Python, 706 linescoglib/ ieeg/ Experiment1ActivationAna lysis/ activation_analysis_help er_function.py - MEG_preprocessing/
cogitate-msp1/ , Python, 117 linescoglib/ ieeg/ Experiment1ActivationAna lysis/ activation_analysis_para meters_class.py - MEG_preprocessing/
cogitate-msp1/ , Shell, 35 linescoglib/ ieeg/ Experiment1ActivationAna lysis/ duration_decoding_job.sh - MEG_preprocessing/
cogitate-msp1/ , Python, 214 linescoglib/ ieeg/ Experiment1ActivationAna lysis/ duration_decoding_master .py - MEG_preprocessing/
cogitate-msp1/ , Shell, 35 linescoglib/ ieeg/ Experiment1ActivationAna lysis/ duration_tracking_job.sh - MEG_preprocessing/
cogitate-msp1/ , Python, 229 linescoglib/ ieeg/ Experiment1ActivationAna lysis/ duration_tracking_master .py - MEG_preprocessing/
cogitate-msp1/ , Python, 218 linescoglib/ ieeg/ Experiment1ActivationAna lysis/ linear_mixed_model_maste r.py - MEG_preprocessing/
cogitate-msp1/ , Shell, 35 linescoglib/ ieeg/ Experiment1ActivationAna lysis/ lmm_job.sh - MEG_preprocessing/
cogitate-msp1/ , Shell, 35 linescoglib/ ieeg/ Experiment1ActivationAna lysis/ onset_offset_job.sh - MEG_preprocessing/
cogitate-msp1/ , Python, 225 linescoglib/ ieeg/ Experiment1ActivationAna lysis/ onset_offset_master.py - MEG_preprocessing/
cogitate-msp1/ , Python, 279 linescoglib/ ieeg/ Experiment1ActivationAna lysis/ plot_duration_decoding_r esults.py - MEG_preprocessing/
cogitate-msp1/ , Python, 279 linescoglib/ ieeg/ Experiment1ActivationAna lysis/ plot_duration_tracking_r esults.py - MEG_preprocessing/
cogitate-msp1/ , Python, 407 linescoglib/ ieeg/ Experiment1ActivationAna lysis/ plot_lmm_results.py - MEG_preprocessing/
cogitate-msp1/ , Python, 75 linescoglib/ ieeg/ Experiment1ActivationAna lysis/ plot_onset_offset_result s.py - MEG_preprocessing/
cogitate-msp1/ , Python, 1,669 linescoglib/ ieeg/ Preprocessing/ PreprocessingHelperFunct ions.py - MEG_preprocessing/
cogitate-msp1/ , Python, 922 linescoglib/ ieeg/ Preprocessing/ PreprocessingMaster.py - MEG_preprocessing/
cogitate-msp1/ , Python, 96 linescoglib/ ieeg/ Preprocessing/ PreprocessingParametersC lass.py - MEG_preprocessing/
cogitate-msp1/ , Python, 188 linescoglib/ ieeg/ Preprocessing/ SubjectInfo.py - MEG_preprocessing/
cogitate-msp1/ , Python, 125 linescoglib/ ieeg/ Preprocessing/ test/ generate_simulated_raw.p y - MEG_preprocessing/
cogitate-msp1/ , Python, 67 linescoglib/ ieeg/ Preprocessing/ test/ high_gamma_test.py - MEG_preprocessing/
cogitate-msp1/ , Python, 444 linescoglib/ ieeg/ Preprocessing/ test/ test.py - MEG_preprocessing/
cogitate-msp1/ , Python, 65 linescoglib/ ieeg/ analysis_pipeline.py - MEG_preprocessing/
cogitate-msp1/ , Python, 32 linescoglib/ ieeg/ category_selectivity_ana lysis/ category_selectivity_bat ch_runner.py - MEG_preprocessing/
cogitate-msp1/ , Python, 333 linescoglib/ ieeg/ category_selectivity_ana lysis/ category_selectivity_hel per_function.py - MEG_preprocessing/
cogitate-msp1/ , Shell, 36 linescoglib/ ieeg/ category_selectivity_ana lysis/ category_selectivity_job .sh - MEG_preprocessing/
cogitate-msp1/ , Python, 240 linescoglib/ ieeg/ category_selectivity_ana lysis/ category_selectivity_mas ter.py - MEG_preprocessing/
cogitate-msp1/ , Python, 121 linescoglib/ ieeg/ category_selectivity_ana lysis/ category_selectivity_par ameters_class.py - MEG_preprocessing/
cogitate-msp1/ , Python, 427 linescoglib/ ieeg/ category_selectivity_ana lysis/ plot_category_selectivit y_results.py - MEG_preprocessing/
cogitate-msp1/ , Python, 55 linescoglib/ ieeg/ data_preparation/ DataPreparationParameter s.py - MEG_preprocessing/
cogitate-msp1/ , Python, 516 linescoglib/ ieeg/ data_preparation/ Experiment1_data_prepara tion.py - MEG_preprocessing/
cogitate-msp1/ , Python, 448 linescoglib/ ieeg/ data_preparation/ mne_bids_converter.py - MEG_preprocessing/
cogitate-msp1/ , Python, 1,292 linescoglib/ ieeg/ data_preparation/ trigger_alignment.py - MEG_preprocessing/
cogitate-msp1/ , Python, 675 lines, 1 matchcoglib/ ieeg/ decoding/ calibration.py - MEG_preprocessing/
cogitate-msp1/ , Python, 116 linescoglib/ ieeg/ decoding/ decoding_analysis_parame ters_class.py - MEG_preprocessing/
cogitate-msp1/ , Python, 52 linescoglib/ ieeg/ decoding/ decoding_batch_runner.py - MEG_preprocessing/
cogitate-msp1/ , Python, 387 linescoglib/ ieeg/ decoding/ decoding_control_iit_vs_ iitgnw.py - MEG_preprocessing/
cogitate-msp1/ , Python, 789 linescoglib/ ieeg/ decoding/ decoding_helper_function s.py - MEG_preprocessing/
cogitate-msp1/ , Shell, 21 linescoglib/ ieeg/ decoding/ decoding_iitgnw_control_ job.sh - MEG_preprocessing/
cogitate-msp1/ , Python, 413 linescoglib/ ieeg/ decoding/ decoding_master.py - MEG_preprocessing/
cogitate-msp1/ , Shell, 36 linescoglib/ ieeg/ decoding/ decoding_master_job.sh - MEG_preprocessing/
cogitate-msp1/ , Shell, 35 linescoglib/ ieeg/ decoding/ decoding_robustness_job. sh - MEG_preprocessing/
cogitate-msp1/ , Python, 319 linescoglib/ ieeg/ decoding/ decoding_robustness_test .py - MEG_preprocessing/
cogitate-msp1/ , Python, 32 linescoglib/ ieeg/ freesurfer/ 0.recon_all_batch_runner .py - MEG_preprocessing/
cogitate-msp1/ , Python, 27 linescoglib/ ieeg/ freesurfer/ 1.fix_SE_recon.py - MEG_preprocessing/
cogitate-msp1/ , Python, 32 linescoglib/ ieeg/ freesurfer/ 2.wang_mapping_batch_run ner.py - MEG_preprocessing/
cogitate-msp1/ , Shell, 41 linescoglib/ ieeg/ freesurfer/ SE_recon_fix_job.sh - MEG_preprocessing/
cogitate-msp1/ , Shell, 45 linescoglib/ ieeg/ freesurfer/ recon_all_job.sh - MEG_preprocessing/
cogitate-msp1/ , Python, 80 linescoglib/ ieeg/ freesurfer/ wang_labels.py - MEG_preprocessing/
cogitate-msp1/ , Shell, 49 linescoglib/ ieeg/ freesurfer/ wang_mapping_job.sh - MEG_preprocessing/
cogitate-msp1/ , Python, 88 linescoglib/ ieeg/ general_helper_functions / channel_annot_to_bids.py - MEG_preprocessing/
cogitate-msp1/ , Python, 798 linescoglib/ ieeg/ general_helper_functions / data_general_utilities.p y - MEG_preprocessing/
cogitate-msp1/ , Python, 211 linescoglib/ ieeg/ general_helper_functions / ied_detection.py - MEG_preprocessing/
cogitate-msp1/ , Python, 101 linescoglib/ ieeg/ general_helper_functions / pathHelperFunctions.py - MEG_preprocessing/
cogitate-msp1/ , Python, 842 linescoglib/ ieeg/ general_helper_functions / plotters.py - MEG_preprocessing/
cogitate-msp1/ , Python, 131 linescoglib/ ieeg/ general_helper_functions / semi_automated_laplace_m apping.py - MEG_preprocessing/
cogitate-msp1/ , Python, 438 linescoglib/ ieeg/ general_helper_functions / test/ test_data_general_utilit ies.py - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 461 linescoglib/ ieeg/ plotting_uniformization/ BrewerMap-master/ brewermap.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 52 linescoglib/ ieeg/ plotting_uniformization/ BrewerMap-master/ brewermap_plot.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 392 linescoglib/ ieeg/ plotting_uniformization/ BrewerMap-master/ brewermap_view.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 70 linescoglib/ ieeg/ plotting_uniformization/ BrewerMap-master/ preset_colormap.m - MEG_preprocessing/
cogitate-msp1/ , Python, 395 linescoglib/ ieeg/ plotting_uniformization/ MEG_activation/ plot_spectral_activation .py - MEG_preprocessing/
cogitate-msp1/ , Python, 473 linescoglib/ ieeg/ plotting_uniformization/ MEG_synchrony/ plot_ppc_connectivity.py - MEG_preprocessing/
cogitate-msp1/ , Python, 335 linescoglib/ ieeg/ plotting_uniformization/ category_selectivity/ plot_category_selectivit y.py - MEG_preprocessing/
cogitate-msp1/ , Python, 64 linescoglib/ ieeg/ plotting_uniformization/ config.py - MEG_preprocessing/
cogitate-msp1/ , Python, 891 linescoglib/ ieeg/ plotting_uniformization/ ecog_plotters.py - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 942 linescoglib/ ieeg/ plotting_uniformization/ findROIboundaries.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 10 linescoglib/ ieeg/ plotting_uniformization/ fs_fread3.m - MEG_preprocessing/
cogitate-msp1/ , Python, 368 linescoglib/ ieeg/ plotting_uniformization/ general_utilities.py - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 62 linescoglib/ ieeg/ plotting_uniformization/ graphComponents.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 77 linescoglib/ ieeg/ plotting_uniformization/ handlePlotBrain.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 17 linescoglib/ ieeg/ plotting_uniformization/ iEEG_activation_analysis / activation_analysis_plot ting.m - MEG_preprocessing/
cogitate-msp1/ , Python, 151 linescoglib/ ieeg/ plotting_uniformization/ iEEG_activation_analysis / duration_decoding.py - MEG_preprocessing/
cogitate-msp1/ , Python, 151 linescoglib/ ieeg/ plotting_uniformization/ iEEG_activation_analysis / duration_decoding_brain. py - MEG_preprocessing/
cogitate-msp1/ , Python, 128 linescoglib/ ieeg/ plotting_uniformization/ iEEG_activation_analysis / gnw_brain.py - MEG_preprocessing/
cogitate-msp1/ , Python, 745 linescoglib/ ieeg/ plotting_uniformization/ iEEG_activation_analysis / iEEG_activation_plotting .py - MEG_preprocessing/
cogitate-msp1/ , Python, 209 linescoglib/ ieeg/ plotting_uniformization/ iEEG_activation_analysis / onset_offset_brain.py - MEG_preprocessing/
cogitate-msp1/ , Python, 709 linescoglib/ ieeg/ plotting_uniformization/ iEEG_rsa/ iEEG_rsa_plotting.py - MEG_preprocessing/
cogitate-msp1/ , Python, 182 linescoglib/ ieeg/ plotting_uniformization/ iEEG_visual_responsivene ss/ brain_plots.py - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 45 linescoglib/ ieeg/ plotting_uniformization/ iEEG_visual_responsivene ss/ plot_ncc.m - MEG_preprocessing/
cogitate-msp1/ , Python, 396 linescoglib/ ieeg/ plotting_uniformization/ iEEG_visual_responsivene ss/ plot_visual_responsivene ss.py - MEG_preprocessing/
cogitate-msp1/ , Python, 141 linescoglib/ ieeg/ plotting_uniformization/ iEEG_visual_responsivene ss/ pncc_plotter.py - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 45 linescoglib/ ieeg/ plotting_uniformization/ iEEG_visual_responsivene ss/ putative_ncc.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 863 linescoglib/ ieeg/ plotting_uniformization/ plotBrain.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 38 linescoglib/ ieeg/ plotting_uniformization/ plotBrain_demo.m - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 120 linescoglib/ ieeg/ plotting_uniformization/ plot_electrodes_demo.m - MEG_preprocessing/
cogitate-msp1/ , Python, 848 linescoglib/ ieeg/ plotting_uniformization/ plotters.py - MEG_preprocessing/
cogitate-msp1/ , Python, 126 linescoglib/ ieeg/ plotting_uniformization/ plotting_examples.py - MEG_preprocessing/
cogitate-msp1/ , Python, 133 linescoglib/ ieeg/ plotting_uniformization/ plotting_examples_ecog.p y - MEG_preprocessing/
cogitate-msp1/ , Python, 72 linescoglib/ ieeg/ plotting_uniformization/ summaries/ channels_counts.py - MEG_preprocessing/
cogitate-msp1/ , MATLAB, 243 linescoglib/ ieeg/ plotting_uniformization/ summaries/ plot_summaries_on_brain. m - MEG_preprocessing/
cogitate-msp1/ , Python, 1,449 linescoglib/ ieeg/ plotting_uniformization/ summaries/ summaries_script.py - MEG_preprocessing/
cogitate-msp1/ , Python, 64 linescoglib/ ieeg/ plotting_uniformization/ summaries/ tbl_parser.py - MEG_preprocessing/
cogitate-msp1/ , Python, 21 linescoglib/ ieeg/ plotting_uniformization/ summaries/ venn_diagram.py - MEG_preprocessing/
cogitate-msp1/ , Python, 64 linescoglib/ ieeg/ plotting_uniformization/ theories_rois.py - MEG_preprocessing/
cogitate-msp1/ , Python, 36 linescoglib/ ieeg/ rsa/ rsa_batch_runner.py - MEG_preprocessing/
cogitate-msp1/ , Python, 1,182 linescoglib/ ieeg/ rsa/ rsa_helper_functions.py - MEG_preprocessing/
cogitate-msp1/ , Python, 222 linescoglib/ ieeg/ rsa/ rsa_master.py - MEG_preprocessing/
cogitate-msp1/ , Python, 120 linescoglib/ ieeg/ rsa/ rsa_parameters_class.py - MEG_preprocessing/
cogitate-msp1/ , Shell, 36 linescoglib/ ieeg/ rsa/ rsa_robustness_job.sh - MEG_preprocessing/
cogitate-msp1/ , Python, 196 linescoglib/ ieeg/ rsa/ rsa_robustness_test.py - MEG_preprocessing/
cogitate-msp1/ , Shell, 36 linescoglib/ ieeg/ rsa/ rsa_super_subject_job.sh - MEG_preprocessing/
cogitate-msp1/ , Python, 199 linescoglib/ ieeg/ rsa/ rsa_super_subject_statis tics.py - MEG_preprocessing/
cogitate-msp1/ , Python, 108 linescoglib/ ieeg/ rsa/ summarize_rsa_results.py - MEG_preprocessing/
cogitate-msp1/ , Python, 392 linescoglib/ ieeg/ rsa/ theories_correlations.py - MEG_preprocessing/
cogitate-msp1/ , Python, 444 linescoglib/ ieeg/ simulations/ data_simulation_master.p y - MEG_preprocessing/
cogitate-msp1/ , Python, 114 linescoglib/ ieeg/ synchrony/ synchrony_analysis_param eters_class.py - MEG_preprocessing/
cogitate-msp1/ , Python, 52 linescoglib/ ieeg/ synchrony/ synchrony_batch_runner.p y - MEG_preprocessing/
cogitate-msp1/ , Python, 630 linescoglib/ ieeg/ synchrony/ synchrony_helper_functio ns.py - MEG_preprocessing/
cogitate-msp1/ , Python, 823 linescoglib/ ieeg/ synchrony/ synchrony_master.py - MEG_preprocessing/
cogitate-msp1/ , Shell, 37 linescoglib/ ieeg/ synchrony/ synchrony_master_job.sh - MEG_preprocessing/
cogitate-msp1/ , Python, 650 linescoglib/ ieeg/ visual_responsiveness_an alysis/ plot_visual_responsivene ss_results.py - MEG_preprocessing/
cogitate-msp1/ , Python, 32 linescoglib/ ieeg/ visual_responsiveness_an alysis/ visual_responsiveness_ba tch_runner.py - MEG_preprocessing/
cogitate-msp1/ , Python, 580 linescoglib/ ieeg/ visual_responsiveness_an alysis/ visual_responsiveness_he lper_functions.py - MEG_preprocessing/
cogitate-msp1/ , Shell, 36 linescoglib/ ieeg/ visual_responsiveness_an alysis/ visual_responsiveness_jo b.sh - MEG_preprocessing/
cogitate-msp1/ , Python, 458 linescoglib/ ieeg/ visual_responsiveness_an alysis/ visual_responsiveness_ma ster.py - MEG_preprocessing/
cogitate-msp1/ , Python, 123 linescoglib/ ieeg/ visual_responsiveness_an alysis/ visual_responsivness_par ameters_class.py - MEG_preprocessing/
cogitate-msp1/ , Python, 306 linescoglib/ meeg/ activation/ S01_source_loc.py - MEG_preprocessing/
cogitate-msp1/ , Python, 253 linescoglib/ meeg/ activation/ S02_source_loc_ga.py - MEG_preprocessing/
cogitate-msp1/ , Python, 330 linescoglib/ meeg/ activation/ S03a_source_dur_spectral .py - MEG_preprocessing/
cogitate-msp1/ , Python, 329 linescoglib/ meeg/ activation/ S03b_source_dur_erf.py - MEG_preprocessing/
cogitate-msp1/ , Python, 272 linescoglib/ meeg/ activation/ S04a_source_dur_spectral _ga.py - MEG_preprocessing/
cogitate-msp1/ , Python, 191 linescoglib/ meeg/ activation/ S04b_source_dur_erf_ga.p y - MEG_preprocessing/
cogitate-msp1/ , Python, 893 linescoglib/ meeg/ activation/ S05a_source_dur_spectral _lmm.py - MEG_preprocessing/
cogitate-msp1/ , Python, 606 linescoglib/ meeg/ activation/ S05b_source_dur_erf_lmm. py - MEG_preprocessing/
cogitate-msp1/ , Python, 349 linescoglib/ meeg/ activation/ S06_source_dur_onsetoffs et_control.py - MEG_preprocessing/
cogitate-msp1/ , Python, 72 linescoglib/ meeg/ activation/ S07_source_dur_lmm_table .py - MEG_preprocessing/
cogitate-msp1/ , Python, 92 linescoglib/ meeg/ activation/ S08_source_dur_lmm_BF.py - MEG_preprocessing/
cogitate-msp1/ , Python, 121 linescoglib/ meeg/ config/ config.py - MEG_preprocessing/
cogitate-msp1/ , Python, 547 linescoglib/ meeg/ connectivity/ Co01_connect_ppc.py - MEG_preprocessing/
cogitate-msp1/ , Python, 571 linescoglib/ meeg/ connectivity/ Co01c_connect_dfc.py - MEG_preprocessing/
cogitate-msp1/ , Python, 513 linescoglib/ meeg/ connectivity/ Co02_connect_ppc_ga.py - MEG_preprocessing/
cogitate-msp1/ , Python, 311 linescoglib/ meeg/ connectivity/ Co02c_connect_dfc_ga.py - MEG_preprocessing/
cogitate-msp1/ , Python, 632 linescoglib/ meeg/ ged/ Co01_ged_selectivity.py - MEG_preprocessing/
cogitate-msp1/ , Python, 564 linescoglib/ meeg/ ged/ Co02_ged_pfc.py - MEG_preprocessing/
cogitate-msp1/ , Python, 330 linescoglib/ meeg/ ged/ Co03_ged_selectivity_ga. py - MEG_preprocessing/
cogitate-msp1/ , Python, 318 linescoglib/ meeg/ preprocessing/ P01_maxwell_filtering.py - MEG_preprocessing/
cogitate-msp1/ , Python, 269 linescoglib/ meeg/ preprocessing/ P02_find_bad_eeg.py - MEG_preprocessing/
cogitate-msp1/ , Python, 243 linescoglib/ meeg/ preprocessing/ P03_artifact_annotation. py - MEG_preprocessing/
cogitate-msp1/ , Python, 281 linescoglib/ meeg/ preprocessing/ P04_extract_events.py - MEG_preprocessing/
cogitate-msp1/ , Python, 265 linescoglib/ meeg/ preprocessing/ P05_run_ica.py - MEG_preprocessing/
cogitate-msp1/ , Python, 228 linescoglib/ meeg/ preprocessing/ P06_apply_ica.py - MEG_preprocessing/
cogitate-msp1/ , Python, 287 linescoglib/ meeg/ preprocessing/ P07_make_epochs.py - MEG_preprocessing/
cogitate-msp1/ , Python, 125 linescoglib/ meeg/ preprocessing/ P99_run_preproc.py - MEG_preprocessing/
cogitate-msp1/ , Python, 386 linescoglib/ meeg/ qc/ P00_bids_conversion.py - MEG_preprocessing/
cogitate-msp1/ , Python, 82 linescoglib/ meeg/ qc/ P00_run_qc.py - MEG_preprocessing/
cogitate-msp1/ , Python, 82 linescoglib/ meeg/ qc/ P00_run_qc_epochs.py - MEG_preprocessing/
cogitate-msp1/ , Python, 231 linescoglib/ meeg/ qc/ QC_epochs.py - MEG_preprocessing/
cogitate-msp1/ , Python, 463 linescoglib/ meeg/ qc/ QC_processing.py - MEG_preprocessing/
cogitate-msp1/ , Python, 331 lines, 1 matchcoglib/ meeg/ qc/ QC_processing_eeg.py - MEG_preprocessing/
cogitate-msp1/ , Python, 115 linescoglib/ meeg/ qc/ qc/ extract_events.py - MEG_preprocessing/
cogitate-msp1/ , Python, 49 linescoglib/ meeg/ qc/ qc/ maxwell_filtering.py - MEG_preprocessing/
cogitate-msp1/ , Python, 26 linescoglib/ meeg/ qc/ qc/ viz_psd.py - MEG_preprocessing/
cogitate-msp1/ , Python, 30 linescoglib/ meeg/ qc/ srun_bids.py - MEG_preprocessing/
cogitate-msp1/ , Python, 502 linescoglib/ meeg/ roi_mvpa/ D01_ROI_MVPA_Cat.py - MEG_preprocessing/
cogitate-msp1/ , Python, 450 linescoglib/ meeg/ roi_mvpa/ D01_ROI_MVPA_Cat_PFC.py - MEG_preprocessing/
cogitate-msp1/ , Python, 231 linescoglib/ meeg/ roi_mvpa/ D01_ROI_MVPA_Cat_subROI. py - MEG_preprocessing/
cogitate-msp1/ , Python, 334 linescoglib/ meeg/ roi_mvpa/ D02_ROI_MVPA_Ori.py - MEG_preprocessing/
cogitate-msp1/ , Python, 480 linescoglib/ meeg/ roi_mvpa/ D02_ROI_MVPA_Ori_PFC.py - MEG_preprocessing/
cogitate-msp1/ , Python, 553 linescoglib/ meeg/ roi_mvpa/ D03_ROI_MVPA_GAT_Cat.py - MEG_preprocessing/
cogitate-msp1/ , Python, 353 linescoglib/ meeg/ roi_mvpa/ D04_ROI_MVPA_GAT_Ori.py - MEG_preprocessing/
cogitate-msp1/ , Python, 357 linescoglib/ meeg/ roi_mvpa/ D05_ROI_MVPA_RSA_Cat.py - MEG_preprocessing/
cogitate-msp1/ , Python, 299 linescoglib/ meeg/ roi_mvpa/ D06_ROI_MVPA_RSA_Ori.py - MEG_preprocessing/
cogitate-msp1/ , Python, 316 linescoglib/ meeg/ roi_mvpa/ D07_ROI_MVPA_RSA_ID.py - MEG_preprocessing/
cogitate-msp1/ , Python, 426 linescoglib/ meeg/ roi_mvpa/ D98_group_stat_bayes_fac tors.py - MEG_preprocessing/
cogitate-msp1/ , Python, 1,053 linescoglib/ meeg/ roi_mvpa/ D98_group_stat_sROI_plot .py - MEG_preprocessing/
cogitate-msp1/ , Python, 603 linescoglib/ meeg/ roi_mvpa/ D98_group_stat_sROI_plot _GAT.py - MEG_preprocessing/
cogitate-msp1/ , Python, 626 linescoglib/ meeg/ roi_mvpa/ D98_group_stat_sROI_plot _RSA.py - MEG_preprocessing/
cogitate-msp1/ , Python, 629 linescoglib/ meeg/ roi_mvpa/ D98_group_stat_sROI_plot _RSA_phaseII.py - MEG_preprocessing/
cogitate-msp1/ , Python, 1,116 linescoglib/ meeg/ roi_mvpa/ D98_group_stat_sROI_plot _phaseII.py - MEG_preprocessing/
cogitate-msp1/ , Python, 1,373 linescoglib/ meeg/ roi_mvpa/ D98_group_stat_sROI_plot _subROI_phaseII.py - MEG_preprocessing/
cogitate-msp1/ , Python, 202 linescoglib/ meeg/ roi_mvpa/ D99_group_data_pkl.py - MEG_preprocessing/
cogitate-msp1/ , Python, 208 linescoglib/ meeg/ roi_mvpa/ D99_group_data_pkl_phase II.py - MEG_preprocessing/
cogitate-msp1/ , Python, 939 linescoglib/ meeg/ roi_mvpa/ D_MEG_function.py - MEG_preprocessing/
cogitate-msp1/ , Python, 259 linescoglib/ meeg/ roi_mvpa/ config.py - MEG_preprocessing/
cogitate-msp1/ , Python, 1,153 linescoglib/ meeg/ roi_mvpa/ rsa_helper_functions_meg .py - MEG_preprocessing/
cogitate-msp1/ , Python, 37 linescoglib/ meeg/ roi_mvpa/ sublist.py - MEG_preprocessing/
cogitate-msp1/ , Python, 31 linescoglib/ meeg/ roi_mvpa/ sublist_phase2.py - MEG_preprocessing/
cogitate-msp1/ , Python, 118 linescoglib/ meeg/ source_modelling/ S00a_scalp_surfaces.py - MEG_preprocessing/
cogitate-msp1/ , Python, 132 linescoglib/ meeg/ source_modelling/ S00b_bem.py - MEG_preprocessing/
cogitate-msp1/ , Python, 173 linescoglib/ meeg/ source_modelling/ S01_forward_model.py - MEG_preprocessing/
cogitate-msp1/ , Python, 109 linescoglib/ meeg/ source_modelling/ S01b_forward_model_templ ate.py - MEG_preprocessing/
cogitate-msp1/ , Python, 76 linescoglib/ xnat/ download_sample_datasets .py - MEG_preprocessing/
combine_time_series_from , Python, 61 lines_MEG.py - MEG_preprocessing/
extract_time_series_from , Python, 351 lines_MEG.py - barycenter_robustness/
barycenter_robustness_ch , Jupyter, 356 lines, 2 matchesecks.ipynb - barycenter_robustness/
kNN_divergence.py , Python, 150 lines - barycenter_robustness/
mixed_sigmoid_normalisat , Python, 199 linesion.py - classification/
call_classification.sh , Shell, 31 lines - classification/
fit_pyspi_classifiers.py , Python, 894 lines, 3 matches - classification/
mixed_sigmoid_normalisat , Python, 193 linesion.py - data_visualization/
MEG_dipole_robustness.ip , Jupyter, 358 linesynb - data_visualization/
barycenter_empirical_ana , Jupyter, 935 lineslysis.ipynb - data_visualization/
classification_analysis_ , Jupyter, 718 lines, 2 matchesvisualization.ipynb - data_visualization/
classification_robustnes , Jupyter, 138 liness.ipynb - data_visualization/
kNN_divergence.py , Python, 150 lines - data_visualization/
kl_divergence_from_kNN.i , Jupyter, 261 linespynb - data_visualization/
methods.ipynb , Jupyter, 100 lines, 2 matches - data_visualization/
region_robustness.ipynb , Jupyter, 51 lines - functional_connectivity_
analysis/ , Shell, 29 linescall_feature_extraction. sh - functional_connectivity_
analysis/ , Python, 177 linesrun_barycenter_pyspi_for _subject_averaged_epochs .py - functional_connectivity_
analysis/ , Python, 144 linesrun_pyspi_for_subject_av eraged_epochs.py - install_R_packages_for_v
isualization.R , R, 16 lines - modeling/
CogitateModels.ipynb , Jupyter, 395 lines, 2 matches - modeling/
kNN_divergence.py , Python, 150 lines - modeling/
run_barycenter_pyspi_for , Python, 249 lines_model_simulated_epochs. py - modeling/
select_parameters_based_ , Jupyter, 289 lineson_KL.ipynb - README.md, Text, 106 lines
The paper's code and data availability statement is in the Data section.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 288 scripts, each with its path and the digest of its content;
- 17 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
Datasets cited
- zenodo:18294156, at Zenodo; found in “Code and data availability”
Code and data availability
All MEG data analyzed in this study are openly available upon registration at https://
Reproduced under the paper's license (CC BY-NC), from the paper cited above.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 2 authors, 4 keywords, 68 references.
Cite
This paper
Bryant, A. G., & Whyte, C. J. (2026). A data-driven approach to identifying and evaluating connectivity-based neural correlates of conscious visual perception. Neuroscience of consciousness, 2026(1), niag029. https://
BibTeX
@article{bryant2026data,
author = {Bryant, Annie G and Whyte, Christopher J},
title = {{A data-driven approach to identifying and evaluating connectivity-based neural correlates of conscious visual perception}},
journal = {Neuroscience of consciousness},
year = {2026},
month = jul,
volume = {2026},
number = {1},
pages = {niag029},
publisher = {Oxford University Press},
issn = {2057-2107},
doi = {10.1093/
url = {https://
pmid = {42415873},
pmcid = {PMC13338905}
}
RIS
TY - JOUR
AU - Bryant, Annie G
AU - Whyte, Christopher J
TI - A data-driven approach to identifying and evaluating connectivity-based neural correlates of conscious visual perception
T2 - Neuroscience of consciousness
J2 - Neurosci Conscious
PY - 2026
DA - 2026/
VL - 2026
IS - 1
SP - niag029
SN - 2057-2107
PB - Oxford University Press
DO - 10.1093/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1093/
"type": "article-journal",
"title": "A data-driven approach to identifying and evaluating connectivity-based neural correlates of conscious visual perception",
"container-title": "Neuroscience of consciousness",
"author": [
{
"family": "Bryant",
"given": "Annie G"
},
{
"family": "Whyte",
"given": "Christopher J"
}
],
"container-title-short":
"volume": "2026",
"issue": "1",
"page": "niag029",
"DOI": "10.1093/
"PMID": "42415873",
"PMCID": "PMC13338905",
"ISSN": "2057-2107",
"publisher": "Oxford University Press",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
7,
7
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.1038/s41597-026-07350-9 [code]
- An open multi-center MEG-EEG dataset for studying conscious visual perception.Journal: Scientific dataIn common: PyPREP, MNE-Connectivity, autoreject, 27 other tools, MEG, 7 references
- [2] doi:10.1038/s41597-026-07377-y [code]
- An open-access multi-site fMRI dataset for investigating conscious visual perception.Journal: Scientific dataIn common: PyPREP, MNE-Connectivity, autoreject, 27 other tools, 5 references
- [3] doi:10.1162/imag.a.1245 [code]
- Towards precision EEG connectomics: Evaluating the benefits of dense sampling.Journal: Imaging neuroscience (Cambridge, Mass.)In common: MNE-Connectivity, autoreject, AFNI, 19 other tools, 2 references
- [4] doi:10.1162/imag.a.1321 [code]
- Phase similarity between similar objects indicates representational merging across retrieval training but not sleep.Journal: Imaging neuroscience (Cambridge, Mass.)In common: autoreject, Pingouin, easystats, 15 other tools, cognitive, 2 references
- [5] doi:10.1002/hbm.70605 [code]
- BrainEnrich: Revealing Biological Insights for Imaging-Derived Phenotypes Through Transcriptomic Enrichment.Journal: Human brain mappingIn common: ggseg, easystats, broom, 17 other tools, 1 reference
- [6] doi:10.1016/j.nicl.2026.104012 [code]
- Structural-functional multilayer brain network properties and outcome of combined repetitive transcranial magnetic stimulation and psychotherapy for obsessive-compulsive disorder.Journal: NeuroImage. ClinicalIn common: afex, Pingouin, car, 16 other tools, 2 references
- [7] doi:10.1038/s41467-026-74824-0 [code]
- Learning regularities in noise engages both neural predictive activity and representational changes.Journal: Nature communicationsIn common: autoreject, MNE-BIDS, Pingouin, 12 other tools, MEG, cognitive, 3 references
- [8] doi:10.1038/s41467-026-71830-0 [code]
- Predicting individual differences of fear and cognitive learning and extinction.Journal: Nature communicationsIn common: AFNI, car, broom, 14 other tools, cognitive, 1 reference
- [9] doi:10.1093/cercor/bhag113 [code]
- Long-term reliability and stability of parameterized resting state EEG: evidence from a five-year follow-up.Journal: Cerebral cortex (New York, N.Y. : 1991)In common: PyPREP, MNE-BIDS, easystats, 14 other tools, 1 reference
- [10] doi:10.1038/s41467-026-73865-9 [code]
- Histamine shapes the neurocomputational dynamics of human learning.Journal: Nature communicationsIn common: BayesFactor, easystats, car, 13 other tools, cognitive
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 1 repository of the authors' code, each at its verified commit and with its license, 288 scripts, and 17 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:7f80c9b954c5a2e9…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
