def test_dual_regression(group_level="migp"): from samri.analysis import fc substitutions_a = bids_substitution_iterator( [ "ofM", ], ["5689", "5690", "5691"], ["EPI_CBV_chr_longSOA"], "~/ni_data/ofM.dr/", "as_composite", ) substitutions_b = bids_substitution_iterator( [ "ofM_cF2", ], ["5689", "5690", "5691"], ["EPI_CBV_chr_longSOA"], "~/ni_data/ofM.dr/", "as_composite", ) fc.dual_regression( substitutions_a, substitutions_b, group_level=group_level, )
def label_activity(label): """ Create a DataFrame containing the per-session per-subject mean values for an autogenerated ROI based on the given label. Other parameter customizations are hard-coded below. """ import pandas as pd from samri.plotting import summary from samri.report import roi from samri.utilities import bids_substitution_iterator from samri.fetch.local import roi_from_atlaslabel from os.path import basename, splitext mapping='/usr/share/mouse-brain-atlases/dsurqec_mapping.csv' atlas='/usr/share/mouse-brain-atlases/dsurqec_40micron_labels.nii' my_roi = roi_from_atlaslabel(atlas, mapping=mapping, label_names=[label], ) workflow_name = 'generic' substitutions = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], ['5691',"5689","5690","5700","6451","6460","6456","6461","6462"], ["CogB",], "~/ni_data/ofM.dr/bids/", workflow_name, acquisitions=["EPI",], validate_for_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', ) df = roi.per_session(substitutions, filename_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', roi_mask=my_roi, feature=[label], atlas=atlas, mapping=mapping, ) df['treatment']='Fluoxetine' substitutions_ = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], ["6262","6255","5694","5706",'5704','6455','6459'], ["CogB",], "~/ni_data/ofM.dr/bids/", workflow_name, acquisitions=["EPI",], validate_for_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', ) df_ = roi.per_session(substitutions_, filename_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', roi_mask=my_roi, feature=[label], atlas=atlas, mapping=mapping, ) df_['treatment']='Vehicle' df=pd.concat([df_,df]) df=df.rename(columns={'session': 'Session',}) df.to_csv('~/ni_data/ofM.dr/bids/l1/{}/{}.csv'.format(workflow_name, label))
def dr_activity(): import pandas as pd from behaviopy.plotting import qualitative_times from samri.plotting import summary from samri.report import roi from samri.utilities import bids_substitution_iterator from samri.fetch.local import roi_from_atlaslabel workflow_name = 'composite' substitutions = bids_substitution_iterator( ["ofM", "ofMaF", "ofMcF1", "ofMcF2", "ofMpF"], ['5691', "5689", "5690", "5700"], [ "CogB", ], "~/ni_data/ofM.dr/", workflow_name, acquisitions=[ "EPI", ], check_file_format= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_trial-{trial}_cbv_tstat.nii.gz', ) fit, anova, subjectdf, voxeldf = roi.per_session( substitutions, filename_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_trial-{trial}_cbv_tstat.nii.gz', roi_mask="~/ni_data/templates/roi/DSURQEc_dr.nii.gz", ) subjectdf['treatment'] = 'Fluoxetine' substitutions_ = bids_substitution_iterator( ["ofM", "ofMaF", "ofMcF1", "ofMcF2", "ofMpF"], ["6262", "6255", "5694", "5706", '5704'], [ "CogB", ], "~/ni_data/ofM.dr/", workflow_name, acquisitions=[ "EPI", ], check_file_format= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_trial-{trial}_cbv_tstat.nii.gz', ) fit_, anova_, subjectdf_, voxeldf_ = roi.per_session( substitutions_, filename_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_trial-{trial}_cbv_tstat.nii.gz', roi_mask="~/ni_data/templates/roi/DSURQEc_dr.nii.gz", ) subjectdf_['treatment'] = 'Vehicle' subjectdf = pd.concat([subjectdf_, subjectdf]) subjectdf = subjectdf.rename(columns={ 'session': 'Session', }) subjectdf.to_csv( '~/ni_data/ofM.dr/l1/{}/dr_summary.csv'.format(workflow_name))
def label_connectivity(workflow_name='DSURQEc_drp', labels=['cortex']): import pandas as pd from samri.plotting import summary from samri.report import roi from samri.utilities import bids_substitution_iterator from samri.fetch.local import roi_from_atlaslabel mapping='/usr/share/mouse-brain-atlases/dsurqec_mapping.csv' atlas='/usr/share/mouse-brain-atlases/dsurqec_40micron_labels.nii' my_roi = roi_from_atlaslabel(atlas, mapping=mapping, label_names=labels, ) substitutions = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], ['5691',"5689","5690","5700","6451","6460","6456","6461","6462"], ["CogB",], "~/ni_data/ofM.dr/bids", workflow_name, acquisitions=["EPI",], validate_for_template='{data_dir}/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_zstat.nii.gz', ) df = roi.per_session(substitutions, filename_template='{data_dir}/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_zstat.nii.gz', roi_mask=my_roi, feature=labels, atlas=atlas, mapping=mapping, ) df['treatment']='Fluoxetine' substitutions_ = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], ["6262","6255","5694","5706",'5704','6455','6459'], ["CogB",], "~/ni_data/ofM.dr/bids", workflow_name, acquisitions=["EPI",], validate_for_template='{data_dir}/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_zstat.nii.gz', ) df_ = roi.per_session(substitutions_, filename_template='{data_dir}/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_zstat.nii.gz', roi_mask=my_roi, feature=labels, atlas=atlas, mapping=mapping, ) df_['treatment']='Vehicle' df = pd.concat([df_,df]) df = df.rename(columns={'session': 'Session','t':'z'}) df.to_csv('~/ni_data/ofM.dr/bids/fc/{}/{}_summary.csv'.format(workflow_name,'-'.join(labels)))
def pattern_fc(): import pandas as pd from samri.plotting import summary from samri.report import roi from samri.utilities import bids_substitution_iterator from samri.fetch.local import roi_from_atlaslabel workflow_name = 'drs_seed' substitutions = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], ['5691',"5689","5690","5700"], ["CogB",], "~/ni_data/ofM.dr/", workflow_name, acquisitions=["EPI",], check_file_format='{data_dir}/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_zstat.nii.gz', ) subjectdf = summary.analytic_pattern_per_session(substitutions, '~/ni_data/ofM.dr/l2/anova_ctx/anova_zfstat.nii.gz', t_file_template='{data_dir}/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_zstat.nii.gz', figure="per-participant", color="#309079", xy_label=["Session","Pattern Score"], ) subjectdf['treatment']='Fluoxetine' substitutions_ = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], ["6262","6255","5694","5706",'5704'], ["CogB",], "~/ni_data/ofM.dr/", workflow_name, acquisitions=["EPI",], check_file_format='{data_dir}/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_zstat.nii.gz', ) subjectdf_ = summary.analytic_pattern_per_session(substitutions_, '~/ni_data/ofM.dr/l2/anova_ctx/anova_zfstat.nii.gz', t_file_template='{data_dir}/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_zstat.nii.gz', figure="per-participant", color="#309079", xy_label=["Session","Pattern Score"], ) subjectdf_['treatment']='Vehicle' subjectdf=pd.concat([subjectdf_,subjectdf]) subjectdf=subjectdf.rename(columns={'session': 'Session',}) subjectdf.to_csv('~/ni_data/ofM.dr/fc/{}/ctx_pattern_summary.csv'.format(workflow_name))
def p_clusters(mask): from samri.plotting import summary, timeseries substitutions = bids_substitution_iterator( ["ofM", "ofM_aF", "ofM_cF1", "ofM_cF2", "ofM_pF"], ["4011", "4012", "5689", "5690", "5691"], # ["4007","4008","4011","4012","5689","5690","5691"], ["EPI_CBV_jb_long", "EPI_CBV_chr_longSOA"], "~/ni_data/ofM.dr/", "composite", l1_dir="dr", ) timecourses, designs, stat_maps, events_dfs, subplot_titles = summary.p_filtered_ts( substitutions, ts_file_template= "{data_dir}/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_task-{scan}.nii.gz", beta_file_template= "{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{scan}_cope.nii.gz", # p_file_template="{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{scan}_pstat.nii.gz", p_file_template= "{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{scan}_pfstat.nii.gz", design_file_template= "{data_dir}/l1/{l1_workdir}/_subject_session_scan_{subject}.{session}.{scan}/modelgen/run0.mat", event_file_template= "{data_dir}/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_task-{scan}_events.tsv", brain_mask=mask, p_level=0.05, ) timeseries.multi(timecourses, designs, stat_maps, events_dfs, subplot_titles, figure="timecourses") plt.show()
def reg_cc( path="~/ni_data/ofM.dr/preprocessing/composite", template="/usr/share/mouse-brain-atlases/dsurqec_200micron.nii", radius=8, autofind=False, plot=False, save_as="f_reg_quality", # metrics = ['CC','GC'], metrics=['CC', 'GC', 'MI'], ): from samri.report.registration import iter_measure_sim from samri.utilities import bids_substitution_iterator if autofind: path_template, substitutions = bids_autofind(path, "func") else: path_template = "{data_dir}/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv.nii.gz" substitutions = bids_substitution_iterator( ["ofM", "ofMaF", "ofMcF1", "ofMcF2", "ofMpF"], [ "4001", "4007", "4008", "4011", "5692", "5694", "5699", "5700", "5704", "6255", "6262" ], ["CogB", "JogB"], "~/ni_data/ofM.dr/", "composite", acquisitions=['EPI', 'EPIlowcov'], validate_for_template=path_template, ) df = iter_measure_sim( path_template, template, substitutions, metric=metrics[0], radius_or_number_of_bins=radius, sampling_strategy="Regular", sampling_percentage=0.95, save_as=False, ) df = df.rename(columns={ 'similarity': metrics[0], }) for metric in metrics[1:]: _df = iter_measure_sim( path_template, template, substitutions, metric=metric, radius_or_number_of_bins=radius, sampling_strategy="Regular", sampling_percentage=0.95, save_as=False, ) df[metric] = _df['similarity'].values if save_as: df.to_csv(save_as + ".csv") return df
def test_reg_qc( radius=5, autofind=False, plot=False, ): """This could be used as a continuous integration test function once we can distribute demo data.""" from samri.utilities import bids_autofind from samri.plotting.aggregate import registration_qc from samri.report.registration import get_scores from samri.typesetting import inline_anova from samri.utilities import bids_substitution_iterator if autofind: path_template, substitutions = bids_autofind("~/ni_data/ofM.dr/preprocessing/composite","func") else: path_template = "{data_dir}/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_trial-{trial}_cbv.nii.gz" substitutions = bids_substitution_iterator( ["ofM", "ofMaF", "ofMcF1", "ofMcF2", "ofMpF"], ["5689","5690","5691","5694","5706","5700","5704","6255","6262"], ["CogB"], "~/ni_data/ofM.dr/", "composite", acquisitions=['EPI'], check_file_format=path_template, ) df = get_scores(path_template, substitutions, "~/ni_data/templates/DSURQEc_200micron_average.nii", metric="CC", radius_or_number_of_bins=radius, sampling_strategy="Regular", sampling_percentage=0.33, save_as="f_reg_quality.csv", )
def roi_per_session(l1_dir, roi, color, roi_mask_normalize="", ): from samri.plotting import summary substitutions = bids_substitution_iterator( ["ofM","ofM_aF","ofM_cF1","ofM_cF2","ofM_pF"], # ["5689","5690","5691"], ["4005","5687","4007","4011","4012","5689","5690","5691"], # ["4007","4011","4012","5689","5690","5691"], # ["4009","4011","4012","5689","5690","5691"], # ["4008","4009","4011","4012",], ["EPI_CBV_jb_long","EPI_CBV_chr_longSOA"], "~/ni_data/ofM.dr/", "", l1_dir=l1_dir, ) if isinstance(roi, list) and not "/" in roi[0]: roi = roi_from_atlaslabel("~/ni_data/templates/roi/DSURQEc_200micron_labels.nii", mapping="~/ni_data/templates/roi/DSURQE_mapping.csv", label_names=roi, ) fit, anova = summary.roi_per_session(substitutions, t_file_template="{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_trial-{scan}_tstat.nii.gz", legend_loc=2, # figure="per-voxel", figure="per-participant", roi_mask=roi, roi_mask_normalize=roi_mask_normalize, color=color, ) print(anova)
def temporal_qc_separate(): import matplotlib.pyplot as plt import matplotlib.ticker as plticker import numpy as np import pandas as pd from samri.report.snr import base_metrics from samri.plotting.timeseries import multi from samri.utilities import bids_substitution_iterator substitutions = bids_substitution_iterator( ['testSTIM'], ['COILphantom'], ['CcsI'], '/home/chymera/ni_data/phantoms/', 'bids', acquisitions=['EPIalladj','EPIcopyadjNODUM','EPIcopyadj','EPImoveGOP'], ) for i in substitutions: timecourses = base_metrics('{data_dir}/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_trial-{trial}.nii', i) events_df = pd.read_csv('{data_dir}/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_trial-{trial}_events.tsv'.format(**i), sep='\t') multi(timecourses, designs=[], events_dfs=[events_df], subplot_titles='acquisition', quantitative=False, save_as='temp_{acquisition}.pdf'.format(**i), samri_style=True, ax_size=[16,6], unit_ticking=True, )
def plot_roi_per_session(l1_dir, roi_mask, color, roi_mask_normalize="", ): from samri.plotting import summary from samri.report import roi substitutions = bids_substitution_iterator( ["ofM","ofM_aF","ofM_cF1","ofM_cF2","ofM_pF"], # ["5689","5690","5700"], ["6262","6255","5694","5706",'5704'], # ["4007","4011","4012","5689","5690","5691"], # ["4009","4011","4012","5689","5690","5691"], # ["4008","4009","4011","4012",], ["EPI_CBV_chr_longSOA"], "~/ni_data/ofM.dr/", "", l1_dir=l1_dir, ) if isinstance(roi, list) and not "/" in roi[0]: roi = roi_from_atlaslabel("~/ni_data/templates/roi/DSURQEc_200micron_labels.nii", mapping="~/ni_data/templates/roi/DSURQE_mapping.csv", label_names=roi, ) fit, anova, subjectdf, voxeldf = roi.roi_per_session(substitutions, t_file_template="{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_trial-{trial}_tstat.nii.gz", roi_mask=roi_mask, roi_mask_normalize=roi_mask_normalize, ) summary.plot_roi_per_session(subjectdf, voxeldf, legend_loc=2, figure="per-participant", color=color, save_as="~/test.png") print(anova)
def dr_seed_fc(): import numpy as np from os import path from labbookdb.report.tracking import treatment_group, append_external_identifiers from samri.plotting.overview import multiplot_matrix, multipage_plot from samri.utilities import bids_substitution_iterator from samri.analysis import fc db_path = '~/syncdata/meta.db' groups = treatment_group(db_path, ['cFluDW','cFluDW_'], 'cage') groups = append_external_identifiers(db_path, groups, ['Genotype_code']) all_subjects = groups['ETH/AIC'].unique() substitutions = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], all_subjects, ["CogB",], "~/ni_data/ofM.dr/", "composite", acquisitions=["EPI",], check_file_format='~/ni_data/ofM.dr/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv.nii.gz') fc_results = fc.seed_based(substitutions, "~/ni_data/templates/roi/DSURQEc_dr.nii.gz", "/usr/share/mouse-brain-atlases/dsurqec_200micron_mask.nii", ts_file_template='~/ni_data/ofM.dr/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv.nii.gz', save_results="~/ni_data/ofM.dr/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_zstat.nii.gz", )
def temporal_qc_separate(): import matplotlib.pyplot as plt import matplotlib.ticker as plticker import numpy as np import pandas as pd from samri.report.snr import base_metrics from samri.plotting.timeseries import multi from samri.utilities import bids_substitution_iterator substitutions = bids_substitution_iterator( ['testSTIM'], ['COILphantom'], ['CcsI'], '/home/chymera/ni_data/phantoms/', 'bids', acquisitions=['EPIalladj','EPIcopyadjNODUM','EPIcopyadj','EPImoveGOP'], ) for i in substitutions: timecourses = base_metrics('{data_dir}/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}.nii', i) events_df = pd.read_csv('{data_dir}/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_events.tsv'.format(**i), sep='\t') multi(timecourses, designs=[], events_dfs=[events_df], subplot_titles='acquisition', quantitative=False, save_as='temp_{acquisition}.pdf'.format(**i), samri_style=True, ax_size=[16,6], unit_ticking=True, )
def temporal_qc_al_in_one(): import matplotlib.pyplot as plt import matplotlib.ticker as plticker import numpy as np from samri.report.snr import iter_base_metrics from samri.plotting.timeseries import multi from samri.utilities import bids_substitution_iterator substitutions = bids_substitution_iterator( ['testSTIM'], ['COILphantom'], ['CcsI'], '/home/chymera/ni_data/phantoms/', 'bids', acquisitions=['EPIalladj','EPIcopyadjNODUM','EPIcopyadj','EPImoveGOP'], ) timecourses = iter_base_metrics('{data_dir}/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}.nii', substitutions) multi(timecourses, designs=[], events_dfs=[], subplot_titles='acquisition', quantitative=False, save_as="temp_qc.pdf", samri_style=True, ax_size=[16,6], unit_ticking=True, )
def temporal_qc_al_in_one(): import matplotlib.pyplot as plt import matplotlib.ticker as plticker import numpy as np from samri.report.snr import iter_base_metrics from samri.plotting.timeseries import multi from samri.utilities import bids_substitution_iterator substitutions = bids_substitution_iterator( ['testSTIM'], ['COILphantom'], ['CcsI'], '/home/chymera/ni_data/phantoms/', 'bids', acquisitions=[ 'EPIalladj', 'EPIcopyadjNODUM', 'EPIcopyadj', 'EPImoveGOP' ], ) timecourses = iter_base_metrics( '{data_dir}/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}.nii', substitutions) multi( timecourses, designs=[], events_dfs=[], subplot_titles='acquisition', quantitative=False, save_as="temp_qc.pdf", samri_style=True, ax_size=[16, 6], unit_ticking=True, )
def dr_seed_fc(): import numpy as np from os import path from labbookdb.report.tracking import treatment_group, append_external_identifiers from samri.plotting.overview import multiplot_matrix, multipage_plot from samri.utilities import bids_substitution_iterator from samri.analysis import fc db_path = '~/syncdata/meta.db' groups = treatment_group(db_path, ['cFluDW','cFluDW_'], 'cage') groups = append_external_identifiers(db_path, groups, ['Genotype_code']) all_subjects = groups['ETH/AIC'].unique() substitutions = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], all_subjects, ["CogB",], "~/ni_data/ofM.dr/", "composite", acquisitions=["EPI",], check_file_format='~/ni_data/ofM.dr/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv.nii.gz') fc_results = fc.seed_based(substitutions, "~/ni_data/templates/roi/DSURQEc_dr.nii.gz", '/usr/share/mouse-brain-atlases/dsurqec_200micron_mask.nii', ts_file_template='~/ni_data/ofM.dr/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv.nii.gz', save_results="~/ni_data/ofM.dr/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_zstat.nii.gz", )
def reg_cc( radius=5, autofind=True, ): from samri.utilities import bids_autofind from samri.plotting.aggregate import registration_qc from samri.report.registration import get_scores from samri.typesetting import inline_anova from samri.utilities import bids_substitution_iterator if autofind: path_template, substitutions = bids_autofind( "~/ni_data/ofM.dr/preprocessing/composite", "func") else: substitutions = bids_substitution_iterator( ["ofM", "ofM_aF", "ofM_cF1", "ofM_cF2", "ofM_pF"], [ "4001", "4007", "4008", "4011", "5692", "5694", "5699", "5700", "5704", "6255", "6262" ], ["EPI_CBV_chr_longSOA", "EPI_CBV_jb_long"], "~/ni_data/ofM.dr/", "composite", ) path_template = "~/ni_data/ofM.dr/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_trial-{trial}.nii.gz" df = get_scores( path_template, substitutions, "~/ni_data/templates/DSURQEc_200micron_average.nii", metric="CC", radius_or_number_of_bins=radius, sampling_strategy="Regular", sampling_percentage=0.33, save_as="f_reg_quality.csv", ) anova_summary = registration_qc( df, value={"similarity": "Similarity"}, group={"sub": "Subject"}, repeat={"ses": "Session"}, extra={"trial": "Type"}, model="{value} ~ C({extra}) + C({repeat}) + C({group}) -1", save_as="registration_qc.png", print_model=True, print_anova=True, show=False, ) subject_effect = inline_anova(anova_summary, "C(Subject)", style="python") print("Subject Main Effect: {}".format(subject_effect)) session_effect = inline_anova(anova_summary, "C(Session)", style="python", max_len=2) print("Session Main Effect: {}".format(session_effect)) type_effect = inline_anova(anova_summary, "C(Type)", style="python") print("Scan Type Main Effect: {}".format(type_effect))
def ctx_pattern_mask_drs_sfc(): import pandas as pd from samri.plotting import summary from samri.report import roi from samri.utilities import bids_substitution_iterator from samri.fetch.local import roi_from_atlaslabel workflow_name = 'drs_seed' my_roi = '~/ni_data/ofM.dr/l2/anova_ctx/anova_fstat.nii.gz' my_roi = roi.from_img_threshold(my_roi, 2., save_as='~/ni_data/ofM.dr/fc/{}/ctx_pattern_mask.nii.gz'.format(workflow_name)) substitutions = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], ['5691',"5689","5690","5700"], ["CogB",], "~/ni_data/ofM.dr/", workflow_name, acquisitions=["EPI",], check_file_format='~/ni_data/ofM.dr/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_zstat.nii.gz', ) subjectdf, voxeldf = roi.per_session(substitutions, filename_template='~/ni_data/ofM.dr/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_zstat.nii.gz', roi_mask=my_roi, ) subjectdf['treatment']='Fluoxetine' substitutions_ = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], ["6262","6255","5694","5706",'5704'], ["CogB",], "~/ni_data/ofM.dr/", workflow_name, acquisitions=["EPI",], check_file_format='~/ni_data/ofM.dr/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_zstat.nii.gz', ) subjectdf_, voxeldf_ = roi.per_session(substitutions_, filename_template='~/ni_data/ofM.dr/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_zstat.nii.gz', roi_mask=my_roi, ) subjectdf_['treatment']='Vehicle' subjectdf=pd.concat([subjectdf_,subjectdf]) subjectdf=subjectdf.rename(columns={'session': 'Session','t':'z'}) subjectdf.to_csv('~/ni_data/ofM.dr/fc/{}/ctx_pattern_mask_summary.csv'.format(workflow_name))
def pattern_activity(): import pandas as pd from samri.report import roi from samri.utilities import bids_substitution_iterator from samri.fetch.local import roi_from_atlaslabel workflow_name = 'generic' substitutions = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], ['5691',"5689","5690","5700","6451","6460","6456","6461","6462"], ["CogB",], "~/ni_data/ofM.dr/bids", workflow_name, acquisitions=["EPI",], validate_for_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', ) df = roi.analytic_pattern_per_session(substitutions, '~/ni_data/ofM.dr/bids/l2/best_responders/sessionofM/tstat1.nii.gz', t_file_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', ) df['treatment']='Fluoxetine' substitutions_ = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], ["6262","6255","5694","5706",'5704','6455','6459'], ["CogB",], "~/ni_data/ofM.dr/bids", workflow_name, acquisitions=["EPI",], validate_for_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', ) df_ = roi.analytic_pattern_per_session(substitutions_, '~/ni_data/ofM.dr/bids/l2/best_responders/sessionofM/tstat1.nii.gz', t_file_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', ) df_['treatment']='Vehicle' df=pd.concat([df_,df]) df=df.rename(columns={'session': 'Session',}) df.to_csv('~/ni_data/ofM.dr/bids/l1/{}/pattern_summary.csv'.format(workflow_name))
def roi(roi_path="~/ni_data/templates/roi/f_dr_chr.nii.gz"): from samri.plotting import summary, timeseries substitutions = bids_substitution_iterator( ["ofM","ofM_aF","ofM_cF1","ofM_cF2","ofM_pF"], [4007,4008,4009,4011,4012], ["EPI_CBV_jb_long"], "~/ni_data/ofM.dr/", "composite", ) timecourses, designs, stat_maps, subplot_titles = summary.roi_ts(substitutions, roi_path=roi_path,) timeseries.multi(timecourses, designs, stat_maps, subplot_titles, figure="timecourses") plt.show()
def roi_teaching(roi_path="~/ni_data/templates/roi/f_dr_chr.nii.gz"): from samri.plotting import timeseries design_file_template="~/ni_data/ofM.dr/l1/{l1_workdir}/_subject_session_scan_{subject}.{session}.{scan}/modelgen/run0.mat" substitutions = bids_substitution_iterator( ["ofM_cF2"], [4008], ["EPI_CBV_jb_long"], "~/ni_data/ofM.dr/" "composite", ) timeseries.roi_based(substitutions[0], design_file_template=design_file_template, flip=True, plot_design_regressors=[0]) plt.show()
def test_multi_roi_timeseries(): import matplotlib.pyplot as plt from os import path from samri.plotting import summary, timeseries from samri.utilities import bids_substitution_iterator from samri.fetch.local import roi_from_atlaslabel substitutions = bids_substitution_iterator( sessions=[ 'ofM', 'ofMaF', ], subjects=[ '4007', ], runs=[ '0', '1', ], modalities=[ 'bold', 'cbv', ], data_dir='/usr/share/samri_bidsdata', # BOLD scans are not recognized, since the current (=sci-biology/samri_bidsdata-0.2) filt file suffix also contains `_maths_` for CBV, but not for BOLD. validate_for_template="{data_dir}/l1/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-JogB_acq-EPIlowcov_run-{run}_{modality}.nii.gz", ) mapping='/usr/share/mouse-brain-atlases/dsurqe_labels.csv' atlas='/usr/share/mouse-brain-atlases/dsurqec_40micron_labels.nii' my_roi = roi_from_atlaslabel(atlas, mapping=mapping, label_names=['cortex'], ) timecourses, designs, _, events_dfs, subplot_titles = summary.ts_overviews(substitutions, my_roi, ts_file_template="{data_dir}/l1/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-JogB_acq-EPIlowcov_run-{run}_{modality}.nii.gz", betas_file_template="{data_dir}/l1/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-JogB_acq-EPIlowcov_run-{run}_{modality}_betas.nii.gz", design_file_template="{data_dir}/l1/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-JogB_acq-EPIlowcov_run-{run}_{modality}_design.mat", event_file_template='{data_dir}/preprocessing/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_task-JogB_acq-EPIlowcov_run-{run}_events.tsv', n_jobs_percentage=0.5, ) style_file = path.join(path.dirname(path.realpath(__file__)),'../samri_multiple-ts.conf') plt.style.use(style_file) timeseries.multi(timecourses, designs, events_dfs, subplot_titles, quantitative=False, save_as='_multi_roi_timeseries.pdf', )
def seed_connectivity_overview( template="~/ni_data/templates/DSURQEc_40micron_masked.nii.gz", ): substitutions = bids_substitution_iterator( ["ofM","ofM_aF","ofM_cF1","ofM_cF2","ofM_pF"], # ["5689","5690","5691"], ["4005","5687","4007","4011","4012","5689","5690","5691"], # ["4007","4011","4012","5689","5690","5691"], # ["4009","4011","4012","5689","5690","5691"], # ["4008","4009","4011","4012",], ["EPI_CBV_jb_long","EPI_CBV_chr_longSOA"], "~/ni_data/ofM.dr/", "as_composite", ) subjectdf, voxeldf = aggregate.seed_fc_rois(substitutions, "~/ni_data/templates/roi/DSURQEc_dr.nii.gz", "~/ni_data/templates/roi/DSURQEc_ctx.nii.gz", ts_file_template="~/ni_data/ofM.dr/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_trial-{scan}.nii.gz", )
def test_contours_substitutions(): import itertools import matplotlib.pyplot as plt from samri.plotting.maps import contour_slices from samri.utilities import bids_substitution_iterator subjects = [ '4007', ] contrasts = [ #'bold', 'cbv', ] for i in list(itertools.product(subjects, contrasts)): file_template = '{{data_dir}}/preprocessing/sub-{{subject}}/ses-{{session}}/func/sub-{{subject}}_ses-{{session}}_task-JogB_acq-EPIlowcov_run-{{run}}_{}.nii.gz'.format( i[1]) substitutions = bids_substitution_iterator( sessions=[ 'ofM', 'ofMaF', 'ofMcF1', 'ofMcF2', ], subjects=[i[0]], runs=[0, 1], data_dir='/usr/share/samri_bidsdata', validate_for_template=file_template, ) cmap = plt.get_cmap('tab20').colors contour_slices( '/usr/share/mouse-brain-atlases/dsurqec_40micron.nii', alpha=[0.6], colors=cmap[::2], figure_title='Multi-Session Fit and Coherence Control', file_template=file_template, force_reverse_slice_order=True, legend_template='{session} session', levels_percentile=[77], save_as='_contours_multi_{}_{}.pdf'.format(i[0], i[1]), slice_spacing=0.45, substitutions=substitutions, )
def test_contours_substitutions(): import itertools import matplotlib.pyplot as plt from samri.plotting.maps import contour_slices from samri.utilities import bids_substitution_iterator subjects = [ '4007', ] contrasts= [ #'bold', 'cbv', ] for i in list(itertools.product(subjects, contrasts)): file_template='{{data_dir}}/preprocessing/sub-{{subject}}/ses-{{session}}/func/sub-{{subject}}_ses-{{session}}_task-JogB_acq-EPIlowcov_run-{{run}}_{}.nii.gz'.format(i[1]) substitutions = bids_substitution_iterator( sessions=[ 'ofM', 'ofMaF', 'ofMcF1', 'ofMcF2', ], subjects=[i[0]], runs=[0,1], data_dir='/usr/share/samri_bidsdata', validate_for_template=file_template, ) cmap = plt.get_cmap('tab20').colors contour_slices('/usr/share/mouse-brain-atlases/dsurqec_40micron.nii', alpha=[0.6], colors=cmap[::2], figure_title='Multi-Session Fit and Coherence Control', file_template=file_template, force_reverse_slice_order=True, legend_template='{session} session', levels_percentile=[77], save_as='_contours_multi_{}_{}.pdf'.format(i[0],i[1]), slice_spacing=0.45, substitutions=substitutions, )
def reg_cc( path="~/ni_data/ofM.dr/preprocessing/composite", template="/usr/share/mouse-brain-atlases/dsurqec_200micron.nii", radius=8, autofind=False, plot=False, save="f_reg_quality", metrics=['CC', 'GC', 'MI'], ): from samri.utilities import bids_autofind from samri.plotting.aggregate import registration_qc from samri.report.registration import iter_measure_sim from samri.typesetting import inline_anova from samri.utilities import bids_substitution_iterator if autofind: path_template, substitutions = bids_autofind(path, "func") else: path_template = "{data_dir}/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv.nii.gz" substitutions = bids_substitution_iterator( ["ofM", "ofMaF", "ofMcF1", "ofMcF2", "ofMpF"], [ "4001", "4007", "4008", "4011", "5692", "5694", "5699", "5700", "5704", "6255", "6262" ], ["CogB", "JogB"], "~/ni_data/ofM.dr/", "composite", acquisitions=['EPI', 'EPIlowcov'], validate_for_template=path_template, ) for metric in metrics: df = iter_measure_sim( path_template, substitutions, template, metric=metric, radius_or_number_of_bins=radius, sampling_strategy="Regular", sampling_percentage=0.33, save_as=save + "_" + metric + ".csv", )
def qc_regressor(sessions, subjects, scans, workflow_name, mask, data_dir="~/ni_data/ofM.dr", save_as="", ): from samri.plotting import summary, timeseries plt.style.use('samri_multiple-ts.conf') substitutions = bids_substitution_iterator(sessions,subjects,scans,data_dir,workflow_name) timecourses, designs, stat_maps, events_dfs, subplot_titles = summary.ts_overviews(substitutions, mask, ts_file_template="{data_dir}/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_task-{scan}.nii.gz", beta_file_template="{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{scan}_cope.nii.gz", design_file_template="{data_dir}/l1/{l1_workdir}/_subject_session_scan_{subject}.{session}.{scan}/modelgen/run0.mat", event_file_template="{data_dir}/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_task-{scan}_events.tsv", ) timeseries.multi(timecourses, designs, stat_maps, events_dfs, subplot_titles, figure="timecourses", quantitative=False, save_as=save_as, )
def qc_regressor(sessions, subjects, scans, workflow_name, mask, data_dir="~/ni_data/ofM.dr", save_as="", ): from samri.plotting import summary, timeseries plt.style.use('samri_multiple-ts.conf') substitutions = bids_substitution_iterator(sessions,subjects,scans,data_dir,workflow_name) timecourses, designs, stat_maps, events_dfs, subplot_titles = summary.ts_overviews(substitutions, mask, ts_file_template="{data_dir}/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_trial-{scan}.nii.gz", beta_file_template="{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_trial-{scan}_cope.nii.gz", design_file_template="{data_dir}/l1/{l1_workdir}/_subject_session_scan_{subject}.{session}.{scan}/modelgen/run0.mat", event_file_template="{data_dir}/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_trial-{scan}_events.tsv", ) timeseries.multi(timecourses, designs, stat_maps, events_dfs, subplot_titles, figure="timecourses", quantitative=False, save_as=save_as, )
def reg_cc( path = "~/ni_data/ofM.dr/preprocessing/composite", template = "/usr/share/mouse-brain-atlases/dsurqec_200micron.nii", radius=8, autofind=False, plot=False, save = "f_reg_quality", metrics = ['CC','GC','MI'], ): from samri.utilities import bids_autofind from samri.plotting.aggregate import registration_qc from samri.report.registration import iter_measure_sim from samri.typesetting import inline_anova from samri.utilities import bids_substitution_iterator if autofind: path_template, substitutions = bids_autofind(path,"func") else: path_template = "{data_dir}/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv.nii.gz" substitutions = bids_substitution_iterator( ["ofM", "ofMaF", "ofMcF1", "ofMcF2", "ofMpF"], ["4001","4007","4008","4011","5692","5694","5699","5700","5704","6255","6262"], ["CogB","JogB"], "~/ni_data/ofM.dr/", "composite", acquisitions=['EPI','EPIlowcov'], validate_for_template=path_template, ) for metric in metrics: df = iter_measure_sim(path_template, substitutions, template, metric=metric, radius_or_number_of_bins=radius, sampling_strategy="Regular", sampling_percentage=0.33, save_as= save + "_" + metric + ".csv", )
def p_clusters(mask): from samri.plotting import summary, timeseries substitutions = bids_substitution_iterator( ["ofM","ofM_aF","ofM_cF1","ofM_cF2","ofM_pF"], ["4011","4012","5689","5690","5691"], # ["4007","4008","4011","4012","5689","5690","5691"], ["EPI_CBV_jb_long","EPI_CBV_chr_longSOA"], "~/ni_data/ofM.dr/", "composite", l1_dir="dr", ) timecourses, designs, stat_maps, events_dfs, subplot_titles = summary.p_filtered_ts(substitutions, ts_file_template="{data_dir}/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_task-{scan}.nii.gz", beta_file_template="{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{scan}_cope.nii.gz", # p_file_template="{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{scan}_pstat.nii.gz", p_file_template="{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{scan}_pfstat.nii.gz", design_file_template="{data_dir}/l1/{l1_workdir}/_subject_session_scan_{subject}.{session}.{scan}/modelgen/run0.mat", event_file_template="{data_dir}/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_task-{scan}_events.tsv", brain_mask=mask, p_level=0.05, ) timeseries.multi(timecourses, designs, stat_maps, events_dfs, subplot_titles, figure="timecourses") plt.show()
def drs_activity( roi, atlas='/usr/share/mouse-brain-templates/dsurqec_40micron_labels.nii', mapping='/usr/share/mouse-brain-templates/dsurqe_labels.csv', ): """ TODO : make more generalizable, too many hardcoded values TODO : Make more elegant, atlas/split could be (partly) relegated to masking function instead of being done here. Create a DataFrame containing the per-session per-subject mean values for an autogenerated ROI based on the given label. Other parameter customizations are hard-coded below. """ import pandas as pd from samri.report import roi from samri.utilities import bids_substitution_iterator from samri.fetch.local import roi_from_atlaslabel from os.path import basename, splitext if mapping and atlas: mapping = path.abspath(path.expanduser(mapping)) atlas = path.abspath(path.expanduser(atlas)) my_roi = roi_from_atlaslabel( atlas, mapping=mapping, label_names=[roi], ) roi_name = roi else: roi = path.abspath(path.expanduser(roi)) roi_name = splitext(basename(roi))[0] if roi_name[-4:] == '.nii': roi_name = roi_name[:-4] source_workflow = 'generic' substitutions = bids_substitution_iterator( ["ofM", "ofMaF", "ofMcF1", "ofMcF2", "ofMpF"], [ '5691', "5689", "5690", "5700", "6451", "6460", "6456", "6461", "6462" ], [ "CogB", ], "~/ni_data/ofM.dr", source_workflow, acquisitions=[ "EPI", ], validate_for_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', ) if mapping and atlas: df = roi.per_session( substitutions, filename_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', roi_mask=my_roi, feature=[roi], atlas=atlas, mapping=mapping, ) else: df = roi.per_session( substitutions, filename_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', roi_mask=roi, ) df['treatment'] = 'Fluoxetine' substitutions_ = bids_substitution_iterator( ["ofM", "ofMaF", "ofMcF1", "ofMcF2", "ofMpF"], ["6262", "6255", "5694", "5706", '5704', '6455', '6459'], [ "CogB", ], "~/ni_data/ofM.dr", source_workflow, acquisitions=[ "EPI", ], validate_for_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', ) if mapping and atlas: df_ = roi.per_session( substitutions_, filename_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', roi_mask=my_roi, feature=[roi], atlas=atlas, mapping=mapping, ) else: df_ = roi.per_session( substitutions_, filename_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', roi_mask=roi, ) df_['treatment'] = 'Vehicle' df = pd.concat([df_, df]) df = df.rename(columns={ 'session': 'Session', }) df.to_csv('~/ni_data/ofM.dr/l1/{}/{}.csv'.format(source_workflow, roi_name))
def seed_connectivity_overview( template='/usr/share/mouse-brain-atlases/dsurqec_40micron_masked.nii', cut_coords=[None, [0, -4.9, -3.3]], plot=False, ): import numpy as np from labbookdb.report.tracking import treatment_group, append_external_identifiers from samri.plotting.overview import multiplot_matrix, multipage_plot db_path = '~/syncdata/meta.db' groups = treatment_group(db_path, ['cFluDW', 'cFluDW_'], 'cage') groups = append_external_identifiers(db_path, groups, ['Genotype_code']) all_subjects = groups['ETH/AIC'].unique() treatment = groups[(groups['Genotype_code'] == "eptg") & (groups['Cage_TreatmentProtocol_code'] == "cFluDW" )]['ETH/AIC'].tolist() no_treatment = groups[(groups['Genotype_code'] == "eptg") & (groups['Cage_TreatmentProtocol_code'] == "cFluDW_" )]['ETH/AIC'].tolist() negative_controls = groups[groups['Genotype_code'] == "epwt"]['ETH/AIC'].tolist() print(treatment, no_treatment, negative_controls) substitutions = bids_substitution_iterator( ["ofM", "ofM_aF", "ofM_cF1", "ofM_cF2", "ofM_pF"], all_subjects, [ "EPI_CBV_chr_longSOA", ], "~/ni_data/ofM.dr/", "composite", ) fc_results = fc.seed_based( substitutions, "~/ni_data/templates/roi/DSURQEc_dr_xs.nii.gz", '/usr/share/mouse-brain-atlases/dsurqec_200micron_mask.nii', ts_file_template= "~/ni_data/ofM.dr/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_task-{task}.nii.gz", ) print([i['subject'] for i in fc_results]) return if plot: multipage_plot( fc_results, treatment, figure_title="Chronic Fluoxetine (drinking water) Treatment Group", template=template, threshold=0.1, base_cut_coords=cut_coords, save_as="fc_treatment.pdf", overlays=['~/ni_data/templates/roi/DSURQEc_dr_xs.nii.gz'], scale=0.4, ) multipage_plot( fc_results, no_treatment, figure_title="Chronic Fluoxetine (drinking water) Treatment Group", template=template, threshold=0.1, base_cut_coords=cut_coords, save_as="fc_no_treatment.pdf", overlays=['~/ni_data/templates/roi/DSURQEc_dr_xs.nii.gz'], scale=0.4, ) multipage_plot( fc_results, negative_controls, figure_title="Chronic Fluoxetine (drinking water) Treatment Group", template=template, threshold=0.1, base_cut_coords=cut_coords, save_as="fc_negative_control.pdf", overlays=['~/ni_data/templates/roi/DSURQEc_dr_xs.nii.gz'], scale=0.4, )
def roi_activity(roi_mask="~/ni_data/templates/roi/DSURQEc_drp.nii.gz"): """ Create a DataFrame containing the per-session per-subject mean values for the specified ROI. Other parameter customizations are hard-coded below. """ import pandas as pd from samri.plotting import summary from samri.report import roi from samri.utilities import bids_substitution_iterator from samri.fetch.local import roi_from_atlaslabel from os.path import basename, splitext workflow_name = 'generic' substitutions = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], #["5689","5690","6456","6461"], ['5691',"5689","5690","5700","6451","6460","6456","6461","6462"], #['5691',"5689","5690","5700",], ["CogB",], "~/ni_data/ofM.dr/bids/", workflow_name, acquisitions=["EPI",], validate_for_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', ) df = roi.per_session(substitutions, filename_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', roi_mask=roi_mask, ) df['treatment'] = 'Fluoxetine' substitutions_ = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], #["5694","5706",'5704','6455','6459','5794'], ["6262","6255","5694","5706",'5704','6455','6459'], #["6262","6255","5694","5706",'5704',], ["CogB",], "~/ni_data/ofM.dr/bids/", workflow_name, acquisitions=["EPI",], validate_for_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', ) df_ = roi.per_session(substitutions_, filename_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', roi_mask=roi_mask, ) df_['treatment'] = 'Vehicle' substitutions__ = bids_substitution_iterator( ["ofM"], #["5694","5706",'5704','6455','6459','5794'], ["6530","6532","6542","6548",'6549','6552','6553','6556','6557'], #["6262","6255","56","5706",'5704',], ["CogB",], "~/ni_data/ofM.dr/bids/", workflow_name, acquisitions=["EPI",], validate_for_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', ) df__ = roi.per_session(substitutions__, filename_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', roi_mask=roi_mask, ) df__['treatment'] = 'New' df = pd.concat([df__,df_,df]) df = df.rename(columns={'session': 'Session',}) roi_name = splitext(basename(roi_mask))[0] if roi_name[-4:] == '.nii': roi_name = roi_name[:-4] df.to_csv('~/ni_data/ofM.dr/bids/l1/{}/{}.csv'.format(workflow_name, roi_name))
def seed_connectivity_overview( template="/usr/share/mouse-brain-atlases/dsurqec_40micron_masked.nii", cut_coords=[None,[0,-4.9,-3.3]], plot=False, ): import numpy as np from labbookdb.report.tracking import treatment_group, append_external_identifiers from samri.plotting.overview import multiplot_matrix, multipage_plot db_path = '~/syncdata/meta.db' groups = treatment_group(db_path, ['cFluDW','cFluDW_'], 'cage') groups = append_external_identifiers(db_path, groups, ['Genotype_code']) all_subjects = groups['ETH/AIC'].unique() treatment = groups[ (groups['Genotype_code']=="eptg")& (groups['Cage_TreatmentProtocol_code']=="cFluDW") ]['ETH/AIC'].tolist() no_treatment = groups[ (groups['Genotype_code']=="eptg")& (groups['Cage_TreatmentProtocol_code']=="cFluDW_") ]['ETH/AIC'].tolist() negative_controls = groups[groups['Genotype_code']=="epwt"]['ETH/AIC'].tolist() print(treatment, no_treatment, negative_controls) substitutions = bids_substitution_iterator( ["ofM","ofM_aF","ofM_cF1","ofM_cF2","ofM_pF"], all_subjects, ["EPI_CBV_chr_longSOA",], "~/ni_data/ofM.dr/", "composite", ) fc_results = fc.seed_based(substitutions, "~/ni_data/templates/roi/DSURQEc_dr_xs.nii.gz", "/usr/share/mouse-brain-atlases/dsurqec_200micron_mask.nii", ts_file_template="~/ni_data/ofM.dr/preprocessing/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_task-{task}.nii.gz", ) print([i['subject'] for i in fc_results]) return if plot: multipage_plot(fc_results, treatment, figure_title="Chronic Fluoxetine (drinking water) Treatment Group", template=template, threshold=0.1, base_cut_coords=cut_coords, save_as="fc_treatment.pdf", overlays=['~/ni_data/templates/roi/DSURQEc_dr_xs.nii.gz'], scale=0.4, ) multipage_plot(fc_results, no_treatment, figure_title="Chronic Fluoxetine (drinking water) Treatment Group", template=template, threshold=0.1, base_cut_coords=cut_coords, save_as="fc_no_treatment.pdf", overlays=['~/ni_data/templates/roi/DSURQEc_dr_xs.nii.gz'], scale=0.4, ) multipage_plot(fc_results, negative_controls, figure_title="Chronic Fluoxetine (drinking water) Treatment Group", template=template, threshold=0.1, base_cut_coords=cut_coords, save_as="fc_negative_control.pdf", overlays=['~/ni_data/templates/roi/DSURQEc_dr_xs.nii.gz'], scale=0.4, )
struct_registration.inputs.output_warped_image = os.path.join( workdir, '{subject}_{session}.nii.gz'.format(**substitution)) struct_registration.inputs.moving_image = n4_out print("Running registration:\n{}".format( struct_registration.cmdline)) struct_registration_run = struct_registration.run() if __name__ == '__main__': # substitutions = bids_substitution_iterator( # ["ofM","ofM_aF","ofM_cF1","ofM_cF2","ofM_pF"], # ["4011","4012","5689","5690","5691"], # ["EPI_CBV_jb_long","EPI_CBV_chr_longSOA"], # "composite") substitutions = bids_substitution_iterator( ["ofM", "ofM_aF", "ofM_cF1", "ofM_cF2", "ofM_pF"], ["5690"], ["TurboRARE"], "~/ni_data/ofM.dr", "composite") structural( substitutions, [PHASES["rigid"], PHASES["affine"], PHASES["syn"]], structural_file_template= "~/ni_data/ofM.dr/preprocessing/{preprocessing_workdir}/_subject_session_{subject}.{session}/_scan_type_{scan}/s_bru2nii/", ) # structural_to_functional_per_participant_test( # subjects_participants = [{'subjfect' : 11, 'session': 'rstFMRI_with_medetadomine'}], # template = "~/GitHub/mriPipeline/templates/waxholm/WHS_SD_rat_T2star_v1.01_downsample3.nii.gz", # f_file_format = "~/GitHub/mripipeline/base/preprocessing/generic_work/_subject_session_{subject}.{session}/_scan_type_SE_EPI/f_bru2nii/", # s_file_format = "~/GitHub/mripipeline/base/preprocessing/generic_work/_subject_session_{subject}.{session}/_scan_type_T2_TurboRARE/s_bru2nii/", # )
def drs_activity(roi, atlas='/usr/share/mouse-brain-atlases/dsurqec_40micron_labels.nii', mapping='/usr/share/mouse-brain-atlases/dsurqe_labels.csv', ): """ TODO : make more generalizable, too many hardcoded values TODO : Make more elegant, atlas/split could be (partly) relegated to masking function instead of being done here. Create a DataFrame containing the per-session per-subject mean values for an autogenerated ROI based on the given label. Other parameter customizations are hard-coded below. """ import pandas as pd from samri.plotting import summary from samri.report import roi from samri.utilities import bids_substitution_iterator from samri.fetch.local import roi_from_atlaslabel from os.path import basename, splitext if mapping and atlas: mapping = path.abspath(path.expanduser(mapping)) atlas = path.abspath(path.expanduser(atlas)) my_roi = roi_from_atlaslabel(atlas, mapping=mapping, label_names=[roi], ) roi_name = roi else: roi = path.abspath(path.expanduser(roi)) roi_name = splitext(basename(roi))[0] if roi_name[-4:] == '.nii': roi_name = roi_name[:-4] source_workflow = 'generic' substitutions = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], ['5691',"5689","5690","5700","6451","6460","6456","6461","6462"], ["CogB",], "~/ni_data/ofM.dr", source_workflow, acquisitions=["EPI",], validate_for_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', ) if mapping and atlas: df = roi.per_session(substitutions, filename_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', roi_mask=my_roi, feature=[roi], atlas=atlas, mapping=mapping, ) else: df = roi.per_session(substitutions, filename_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', roi_mask=roi, ) df['treatment']='Fluoxetine' substitutions_ = bids_substitution_iterator( ["ofM","ofMaF","ofMcF1","ofMcF2","ofMpF"], ["6262","6255","5694","5706",'5704','6455','6459'], ["CogB",], "~/ni_data/ofM.dr", source_workflow, acquisitions=["EPI",], validate_for_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', ) if mapping and atlas: df_ = roi.per_session(substitutions_, filename_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_task-{task}_cbv_tstat.nii.gz', roi_mask=my_roi, feature=[roi], atlas=atlas, mapping=mapping, ) else: df_ = roi.per_session(substitutions_, filename_template='{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', roi_mask=roi, ) df_['treatment']='Vehicle' df=pd.concat([df_,df]) df=df.rename(columns={'session': 'Session',}) df.to_csv('~/ni_data/ofM.dr/l1/{}/{}.csv'.format(source_workflow, roi_name))
def test_multi_roi_timeseries(): import matplotlib.pyplot as plt from os import path from samri.plotting import summary, timeseries from samri.utilities import bids_substitution_iterator from samri.fetch.local import roi_from_atlaslabel substitutions = bids_substitution_iterator( sessions=[ 'ofM', 'ofMaF', ], subjects=[ '4007', ], runs=[ '0', '1', ], modalities=[ 'bold', 'cbv', ], data_dir='/usr/share/samri_bidsdata', # BOLD scans are not recognized, since the current (=sci-biology/samri_bidsdata-0.2) filt file suffix also contains `_maths_` for CBV, but not for BOLD. validate_for_template= "{data_dir}/l1/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-JogB_acq-EPIlowcov_run-{run}_{modality}.nii.gz", ) mapping = '/usr/share/mouse-brain-atlases/dsurqe_labels.csv' atlas = '/usr/share/mouse-brain-atlases/dsurqec_40micron_labels.nii' my_roi = roi_from_atlaslabel( atlas, mapping=mapping, label_names=['cortex'], ) timecourses, designs, _, events_dfs, subplot_titles = summary.ts_overviews( substitutions, my_roi, ts_file_template= "{data_dir}/l1/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-JogB_acq-EPIlowcov_run-{run}_{modality}.nii.gz", betas_file_template= "{data_dir}/l1/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-JogB_acq-EPIlowcov_run-{run}_{modality}_betas.nii.gz", design_file_template= "{data_dir}/l1/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-JogB_acq-EPIlowcov_run-{run}_{modality}_design.mat", event_file_template= '{data_dir}/preprocessing/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_task-JogB_acq-EPIlowcov_run-{run}_events.tsv', n_jobs_percentage=0.5, ) style_file = path.join(path.dirname(path.realpath(__file__)), '../samri_multiple-ts.conf') plt.style.use(style_file) timeseries.multi( timecourses, designs, events_dfs, subplot_titles, quantitative=False, save_as='_multi_roi_timeseries.pdf', )
def roi_activity(roi_mask="~/ni_data/templates/roi/DSURQEc_drp.nii.gz"): """ Create a DataFrame containing the per-session per-subject mean values for the specified ROI. Other parameter customizations are hard-coded below. """ import pandas as pd from samri.plotting import summary from samri.report import roi from samri.utilities import bids_substitution_iterator from samri.fetch.local import roi_from_atlaslabel from os.path import basename, splitext workflow_name = 'generic' substitutions = bids_substitution_iterator( ["ofM", "ofMaF", "ofMcF1", "ofMcF2", "ofMpF"], #["5689","5690","6456","6461"], [ '5691', "5689", "5690", "5700", "6451", "6460", "6456", "6461", "6462" ], #['5691',"5689","5690","5700",], [ "CogB", ], "~/ni_data/ofM.dr/bids/", workflow_name, acquisitions=[ "EPI", ], validate_for_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', ) df = roi.per_session( substitutions, filename_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', roi_mask=roi_mask, ) df['treatment'] = 'Fluoxetine' substitutions_ = bids_substitution_iterator( ["ofM", "ofMaF", "ofMcF1", "ofMcF2", "ofMpF"], #["5694","5706",'5704','6455','6459','5794'], ["6262", "6255", "5694", "5706", '5704', '6455', '6459'], #["6262","6255","5694","5706",'5704',], [ "CogB", ], "~/ni_data/ofM.dr/bids/", workflow_name, acquisitions=[ "EPI", ], validate_for_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', ) df_ = roi.per_session( substitutions_, filename_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', roi_mask=roi_mask, ) df_['treatment'] = 'Vehicle' substitutions__ = bids_substitution_iterator( ["ofM"], #["5694","5706",'5704','6455','6459','5794'], [ "6530", "6532", "6542", "6548", '6549', '6552', '6553', '6556', '6557' ], #["6262","6255","56","5706",'5704',], [ "CogB", ], "~/ni_data/ofM.dr/bids/", workflow_name, acquisitions=[ "EPI", ], validate_for_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', ) df__ = roi.per_session( substitutions__, filename_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_task-{task}_acq-{acquisition}_cbv_tstat.nii.gz', roi_mask=roi_mask, ) df__['treatment'] = 'New' df = pd.concat([df__, df_, df]) df = df.rename(columns={ 'session': 'Session', }) roi_name = splitext(basename(roi_mask))[0] if roi_name[-4:] == '.nii': roi_name = roi_name[:-4] df.to_csv('~/ni_data/ofM.dr/bids/l1/{}/{}.csv'.format( workflow_name, roi_name))
def ctx_drs_connectivity(): import pandas as pd from behaviopy.plotting import qualitative_times from samri.plotting import summary from samri.report import roi from samri.utilities import bids_substitution_iterator from samri.fetch.local import roi_from_atlaslabel workflow_name = 'drs_seed' my_roi = roi_from_atlaslabel( "~/ni_data/templates/roi/DSURQEc_200micron_labels.nii", mapping="~/ni_data/templates/roi/DSURQE_mapping.csv", label_names=["cortex"], ) substitutions = bids_substitution_iterator( ["ofM", "ofMaF", "ofMcF1", "ofMcF2", "ofMpF"], ['5691', "5689", "5690", "5700"], [ "CogB", ], "~/ni_data/ofM.dr/", workflow_name, acquisitions=[ "EPI", ], check_file_format= '~/ni_data/ofM.dr/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_trial-{trial}_cbv_zstat.nii.gz', ) fit, anova, subjectdf, voxeldf = roi.per_session( substitutions, filename_template= '~/ni_data/ofM.dr/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_trial-{trial}_cbv_zstat.nii.gz', roi_mask=my_roi, ) subjectdf['treatment'] = 'Fluoxetine' substitutions_ = bids_substitution_iterator( ["ofM", "ofMaF", "ofMcF1", "ofMcF2", "ofMpF"], ["6262", "6255", "5694", "5706", '5704'], [ "CogB", ], "~/ni_data/ofM.dr/", workflow_name, acquisitions=[ "EPI", ], check_file_format= '~/ni_data/ofM.dr/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_trial-{trial}_cbv_zstat.nii.gz', ) fit_, anova_, subjectdf_, voxeldf_ = roi.per_session( substitutions_, filename_template= '~/ni_data/ofM.dr/fc/{preprocessing_dir}/sub-{subject}/ses-{session}/func/sub-{subject}_ses-{session}_acq-{acquisition}_trial-{trial}_cbv_zstat.nii.gz', roi_mask=my_roi, ) subjectdf_['treatment'] = 'Vehicle' subjectdf = pd.concat([subjectdf_, subjectdf]) subjectdf = subjectdf.rename(columns={'session': 'Session', 't': 'z'}) subjectdf.to_csv( '~/ni_data/ofM.dr/fc/{}/ctx_summary.csv'.format(workflow_name))
def pattern_activity(): import pandas as pd from behaviopy.plotting import qualitative_times from samri.plotting import summary from samri.report import roi from samri.utilities import bids_substitution_iterator from samri.fetch.local import roi_from_atlaslabel workflow_name = 'composite' substitutions = bids_substitution_iterator( ["ofM", "ofMaF", "ofMcF1", "ofMcF2", "ofMpF"], ['5691', "5689", "5690", "5700"], [ "CogB", ], "~/ni_data/ofM.dr/", workflow_name, acquisitions=[ "EPI", ], check_file_format= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_trial-{trial}_cbv_tstat.nii.gz', ) subjectdf = summary.analytic_pattern_per_session( substitutions, '~/ni_data/ofM.dr/l2/best_responders/sessionofM/tstat1.nii.gz', t_file_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_trial-{trial}_cbv_tstat.nii.gz', legend_loc=2, figure="per-participant", color="#309079", xy_label=["Session", "Pattern Score"], ) subjectdf['treatment'] = 'Fluoxetine' substitutions_ = bids_substitution_iterator( ["ofM", "ofMaF", "ofMcF1", "ofMcF2", "ofMpF"], ["6262", "6255", "5694", "5706", '5704'], [ "CogB", ], "~/ni_data/ofM.dr/", workflow_name, acquisitions=[ "EPI", ], check_file_format= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_trial-{trial}_cbv_tstat.nii.gz', ) subjectdf_ = summary.analytic_pattern_per_session( substitutions_, '~/ni_data/ofM.dr/l2/best_responders/sessionofM/tstat1.nii.gz', t_file_template= '{data_dir}/l1/{l1_dir}/sub-{subject}/ses-{session}/sub-{subject}_ses-{session}_acq-{acquisition}_trial-{trial}_cbv_tstat.nii.gz', legend_loc=2, figure="per-participant", color="#309079", xy_label=["Session", "Pattern Score"], ) subjectdf_['treatment'] = 'Vehicle' subjectdf = pd.concat([subjectdf_, subjectdf]) subjectdf = subjectdf.rename(columns={ 'session': 'Session', }) subjectdf.to_csv( '~/ni_data/ofM.dr/l1/{}/pattern_summary.csv'.format(workflow_name))