def main(args): logfile = args['logfile'] directory = args['directory'] # full fly func path behavior = args['behavior'] printlog = getattr(flow.Printlog(logfile=logfile), 'print_to_log') #brain_path = os.path.join(directory, 'brain_zscored_green.nii') brain_path = os.path.join(directory, 'brain_zscored_green_high_pass_masked.nii') brain = np.asarray(nib.load(brain_path).get_data(), dtype='float32') timestamps = bbb.load_timestamps(os.path.join(directory, 'imaging')) fictrac_raw = bbb.load_fictrac(os.path.join(directory, 'fictrac')) resolution = 10 #desired resolution in ms expt_len = 1000 * 30 * 60 fps = 50 #of fictrac camera fictrac_interp = interp_fictrac(fictrac_raw, fps, resolution, expt_len, timestamps, behavior) xnew = np.arange(0, expt_len, resolution) printlog("Performing Correlation on {}; behavior: {}".format( brain_path, behavior)) corr_brain = np.zeros((256, 128, 49)) for z in range(49): for i in range(256): for j in range(128): corr_brain[i, j, z] = scipy.stats.pearsonr(fictrac_interp, brain[i, j, z, :])[0] corr_directory = os.path.join(directory, 'corr') if not os.path.exists(corr_directory): os.mkdir(corr_directory) save_file = os.path.join(corr_directory, '20201020_corr_{}.nii'.format(behavior)) nib.Nifti1Image(corr_brain, np.eye(4)).to_filename(save_file) printlog("Saved {}".format(save_file))
def main(directory): ### Load PCA save_file = os.path.join(directory, 'pca', 'scores_(spatial).npy') pca_spatial = np.load(save_file) save_file = os.path.join(directory, 'pca', 'loadings_(temporal).npy') pca_loadings = np.load(save_file) print('pca_loadings_shape: {}'.format(pca_loadings.shape)) ### Load timestamps timestamps = bbb.load_timestamps(os.path.join(directory, 'imaging')) ### Load fictrac fictrac_raw = bbb.load_fictrac(os.path.join(directory, 'fictrac')) fictrac = bbb.smooth_and_interp_fictrac(fictrac_raw, fps=50, resolution=10, expt_len=1000 * 30 * 60, behavior='dRotLabY', timestamps=timestamps) ### Fit model num_pcs = 100 Y_glm = fictrac X_glm = pca_loadings[:, :num_pcs] model = LassoCV().fit(X_glm, Y_glm) score = model.score(X_glm, Y_glm) brain_map = np.tensordot(model.coef_, pca_spatial[:num_pcs, :, :, :], axes=1) pca_glm_directory = os.path.join(directory, 'pca_glm') if not os.path.exists(pca_glm_directory): os.mkdir(pca_glm_directory) save_file = os.path.join(pca_glm_directory, 'forward.nii') bbb.save_brain(save_file, brain_map)
def load_timestamps(self): self.timestamps = bbb.load_timestamps( os.path.join(self.dir, 'imaging'))
def main(args): logfile = args['logfile'] directory = args['directory'] # full fly func path pca_subfolder = args['pca_subfolder'] glm_date = args['glm_date'] printlog = getattr(flow.Printlog(logfile=logfile), 'print_to_log') ### Load PCA ### pca_directory = os.path.join(directory, 'pca', pca_subfolder) printlog("performing glm on {}".format(pca_directory)) file = os.path.join(pca_directory, 'scores_(spatial).npy') pca_spatial = np.load(file) file = os.path.join(pca_directory, 'loadings_(temporal).npy') pca_loadings = np.load(file) ### Load Fictrac and Timstamps### timestamps = bbb.load_timestamps(os.path.join(directory, 'imaging')) fictrac_raw = bbb.load_fictrac(os.path.join(directory, 'fictrac')) ### Prepare Fictrac ### resolution = 100 #desired resolution in ms expt_len = 1000 * 30 * 60 fps = 50 #of fictrac camera behaviors = ['dRotLabY', 'dRotLabZ'] fictrac = {} for behavior in behaviors: if behavior == 'dRotLabY': short = 'Y' elif behavior == 'dRotLabZ': short = 'Z' fictrac[short] = bbb.smooth_and_interp_fictrac(fictrac_raw, fps, resolution, expt_len, behavior, timestamps=timestamps, smoothing=51) fictrac[short] = fictrac[short] / np.std(fictrac[short]) xnew = np.arange(0, expt_len, resolution) ### Fit GLM ### Y_glm = {} Y_glm['Y'] = fictrac['Y'].copy() Y_glm['Z'] = np.abs(fictrac['Z'].copy()) models = {} num_pcs = 1000 behaviors = ['Y', 'Z'] for behavior in behaviors: t0 = time.time() models[behavior] = {'num_pcs': num_pcs, 'model': LassoCV()} X_glm = pca_loadings[:, :num_pcs] models[behavior]['model'].fit(X_glm, Y_glm[behavior]) models[behavior]['score'] = models[behavior]['model'].score( X_glm, Y_glm[behavior]) ### Construct Spatial Map ### coef = models[behavior]['model'].coef_ spatial_map = np.tensordot(coef, pca_spatial[:1000, :, :, :], axes=1) ### Save map ### glm_directory = os.path.join(directory, 'glm') if not os.path.exists(glm_directory): os.mkdir(glm_directory) save_file = os.path.join(glm_directory, '{}_{}.nii'.format(glm_date, behavior)) nib.Nifti1Image(spatial_map, np.eye(4)).to_filename(save_file) ### Save scores ### score_file = os.path.join(glm_directory, '{}_score_{}.txt'.format(glm_date, behavior)) with open(score_file, "a") as f: f.write("{}:{}".format(behavior, models[behavior]['score']))