Source code for pyNAVIS.dataset_gen

#################################################################################
##                                                                             ##
##    Copyright C 2018  Juan P. Dominguez-Morales                              ##
##                                                                             ##
##    This file is part of pyNAVIS.                                            ##
##                                                                             ##
##    pyNAVIS is free software: you can redistribute it and/or modify          ##
##    it under the terms of the GNU General Public License as published by     ##
##    the Free Software Foundation, either version 3 of the License, or        ##
##    (at your option) any later version.                                      ##
##                                                                             ##
##    pyNAVIS is distributed in the hope that it will be useful,               ##
##    but WITHOUT ANY WARRANTY; without even the implied warranty of           ##
##    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the              ##
##    GNU General Public License for more details.                             ##
##                                                                             ##
##    You should have received a copy of the GNU General Public License        ##
##    along with pyNAVIS.  If not, see <http://www.gnu.org/licenses/>.         ##
##                                                                             ##
#################################################################################

import os
import time
import matplotlib
import numpy as np

from .functions import Functions
from .loaders import Loaders
from .plots import Plots
from .savers import Savers



[docs]class DatasetGenerators:
[docs] @staticmethod def generate_sonogram_dataset(path_input_folder, path_output_folder, settings, allow_subdirectories = False, verbose = False): """ Automatically generates and saves sonograms from a set of AEDAT files. Parameters: path_input_folder (string): Path of the folder where AEDAT files are. path_output_folder (string): Path of the folder where sonogram images will be saved. settings (MainSettings): Configuration parameters of the files in the path_input_folder. allow_subdirectories (boolean, optional): Allow the function to navigate deeper in the path_input_folder folder structure to look for input files. verbose (boolean, optional): Set to True if you want the execution time of the function to be printed. Returns: None. """ if verbose == True: print("---- SONOGRAM DATASET GENERATION ----") start_time = time.time() if not os.path.exists(path_output_folder): os.makedirs(path_output_folder) files = [] progress = 0 for r, d, f in os.walk(path_input_folder): # r=root, d=directories, f = files for file in f: if '.aedat' in file: files.append(os.path.join(r, file)) if allow_subdirectories == False: break for file in files: spikes_file = Loaders.loadAEDAT(file, settings) Functions.adapt_timestamps(spikes_file, settings) sonogram_data = Plots.sonogram(spikes_file, settings, return_data = True) matplotlib.image.imsave(os.path.join(path_output_folder, os.path.basename(file)) + '.png', sonogram_data, origin='lower') if verbose == True: progress += 1 print("Progress: " + str(float(progress)*100/len(files)) + "%") if verbose == True: print('Dataset generation process completed. Took ' + str(time.time()-start_time) + " seconds.")
[docs] @staticmethod def generate_phaselock_dataset(path_input_folder, path_output_folder, settings, allow_subdirectories = False, verbose = False): """ Automatically generates and saves phaselocked AEDAT files from a set of AEDAT files. Parameters: path_input_folder (string): Path of the folder where AEDAT files are. path_output_folder (string): Path of the folder where phaselocked AEDAT files will be saved. settings (MainSettings): Configuration parameters of the files in the path_input_folder. allow_subdirectories (boolean, optional): Allow the function to navigate deeper in the path_input_folder folder structure to look for input files. verbose (boolean, optional): Set to True if you want the execution time of the function to be printed. Returns: None. """ if verbose == True: print("---- PHASELOCK DATASET GENERATION ----") start_time = time.time() if not os.path.exists(path_output_folder): os.makedirs(path_output_folder) files = [] progress = 0 for r, d, f in os.walk(path_input_folder): # r=root, d=directories, f = files for file in f: if '.aedat' in file: files.append(os.path.join(r, file)) if allow_subdirectories == False: break for file in files: spikes_file = Loaders.loadAEDAT(file, settings) #sonogram_data = Plots.sonogram(spikes_file.addresses, spikes_file.timestamps, settings, return_data = True) #matplotlib.image.imsave(os.path.join(path_output_folder, os.path.basename(file)) + '.png', sonogram_data) phaselocked_spikes = Functions.phase_lock(spikes_file, settings) Savers.save_AEDAT(phaselocked_spikes, os.path.join(path_output_folder, os.path.basename(file)), settings) if verbose == True: progress += 1 print("Progress: " + str(float(progress)*100/len(files)) + "%") if verbose == True: print('Dataset generation process completed. Took ' + str(time.time()-start_time) + " seconds.")
[docs] @staticmethod def generate_histogram_dataset(path_input_folder, path_output_folder, settings, allow_subdirectories = False, verbose = False): """ Automatically generates and saves histograms in CSV format from a set of AEDAT files. Parameters: path_input_folder (string): Path of the folder where AEDAT files are. path_output_folder (string): Path of the folder where CSV files with the histogram information will be saved. settings (MainSettings): Configuration parameters of the files in the path_input_folder. allow_subdirectories (boolean, optional): Allow the function to navigate deeper in the path_input_folder folder structure to look for input files. verbose (boolean, optional): Set to True if you want the execution time of the function to be printed. Returns: None. """ if verbose == True: print("---- HISTOGRAM DATASET GENERATION ----") start_time = time.time() if not os.path.exists(path_output_folder): os.makedirs(path_output_folder) files = [] progress = 0 for r, d, f in os.walk(path_input_folder): # r=root, d=directories, f = files for file in f: if '.aedat' in file: files.append(os.path.join(r, file)) if allow_subdirectories == False: break for file in files: spikes_file = Loaders.loadAEDAT(file, settings) Functions.adapt_timestamps(spikes_file, settings) histogram_data = Plots.histogram(spikes_file, settings) np.savetxt(os.path.join(path_output_folder, os.path.basename(file)) + ".csv", histogram_data, delimiter=",", fmt='%d') if verbose == True: progress += 1 print("Progress: " + str(float(progress)*100/len(files)) + "%") if verbose == True: print('Dataset generation process completed. Took ' + str(time.time()-start_time) + " seconds.")