def from_path(session_path, force=False, save=True): """ Extract a session from full ALF path (ex: '/scratch/witten/ibl_witten_01/2018-12-18/001') :param force: (False) overwrite existing files :param save: (True) boolean or list of ALF file names to extract :return: None """ logger_.info('Extracting ' + str(session_path)) extractor_type = extractors_exist(session_path) if is_extracted(session_path) and not force: logger_.info(f"Session {session_path} already extracted.") return if extractor_type == 'training': settings, data = raw.load_bpod(session_path) logger_.info('training session on ' + settings['PYBPOD_BOARD']) training_trials.extract_all(session_path, data=data, save=save) training_wheel.extract_all(session_path, bp_data=data, save=save) logger_.info('session extracted \n') # timing info in log if extractor_type == 'biased': settings, data = raw.load_bpod(session_path) logger_.info('biased session on ' + settings['PYBPOD_BOARD']) biased_trials.extract_all(session_path, data=data, save=save) biased_wheel.extract_all(session_path, bp_data=data, save=save) logger_.info('session extracted \n') # timing info in log if extractor_type == 'ephys': data = raw.load_data(session_path) ephys_trials.extract_all(session_path, data=data, save=save) ephys_fpga.extract_all(session_path, save=save)
def from_path(session_path, force=False, save=True): """ Extract a session from full ALF path (ex: '/scratch/witten/ibl_witten_01/2018-12-18/001') :param force: (False) overwrite existing files :param save: (True) boolean or list of ALF file names to extract :return: None """ extractor_type = get_session_extractor_type(session_path) logger_.info(f"Extracting {session_path} as {extractor_type}") if is_extracted(session_path) and not force: logger_.info(f"Session {session_path} already extracted.") return if extractor_type == 'training': settings, data = rawio.load_bpod(session_path) logger_.info('training session on ' + settings['PYBPOD_BOARD']) training_trials.extract_all(session_path, data=data, save=save) training_wheel.extract_all(session_path, bp_data=data, save=save) logger_.info('session extracted \n') # timing info in log if extractor_type == 'biased': settings, data = rawio.load_bpod(session_path) logger_.info('biased session on ' + settings['PYBPOD_BOARD']) biased_trials.extract_all(session_path, data=data, save=save) biased_wheel.extract_all(session_path, bp_data=data, save=save) logger_.info('session extracted \n') # timing info in log if extractor_type == 'ephys': data = rawio.load_data(session_path) logger_.info('extract BPOD for ephys session') ephys_trials.extract_all(session_path, data=data, save=save) logger_.info('extract FPGA information for ephys session') tmax = data[-1]['behavior_data']['States timestamps']['exit_state'][0][-1] + 60 ephys_fpga.extract_all(session_path, save=save, tmax=tmax) if extractor_type == 'sync_ephys': ephys_fpga.extract_sync(session_path, save=save)
def load_raw_data(self): """ Loads the TTLs, raw task data and task settings :return: """ self.log.info(f"Loading raw data from {self.session_path}") self.type = self.type or get_session_extractor_type(self.session_path) self.settings, self.raw_data = raw.load_bpod(self.session_path) # Fetch the TTLs for the photodiode and audio if self.type != 'ephys' or self.bpod_only is True: # Extract from Bpod self.frame_ttls, self.audio_ttls = raw.load_bpod_fronts( self.session_path, data=self.raw_data) else: # Extract from FPGA sync, chmap = ephys_fpga.get_main_probe_sync(self.session_path) def channel_events(name): """Fetches the polarities and times for a given channel""" keys = ('polarities', 'times') mask = sync['channels'] == chmap[name] return dict(zip(keys, (sync[k][mask] for k in keys))) ttls = [ channel_events(ch) for ch in ('frame2ttl', 'audio', 'bpod') ] self.frame_ttls, self.audio_ttls, self.bpod_ttls = ttls
def extract_training(session_path, save=True): """ Extracts a training session from its path. NB: Wheel must be extracted first in order to extract trials.firstMovement_times. :param session_path: :param save: :return: trials: Bunch/dict of trials :return: wheel: Bunch/dict of wheel positions :return: out_Files: list of output files """ extractor_type = rawio.get_session_extractor_type(session_path) _logger.info(f"Extracting {session_path} as {extractor_type}") settings, bpod_trials = rawio.load_bpod(session_path) if extractor_type == 'training': _logger.info('training session on ' + settings['PYBPOD_BOARD']) wheel, files_wheel = training_wheel.extract_all( session_path, bpod_trials=bpod_trials, settings=settings, save=save) trials, files_trials = training_trials.extract_all( session_path, bpod_trials=bpod_trials, settings=settings, save=save) elif extractor_type == 'biased': _logger.info('biased session on ' + settings['PYBPOD_BOARD']) wheel, files_wheel = training_wheel.extract_all( session_path, bpod_trials=bpod_trials, settings=settings, save=save) trials, files_trials = biased_trials.extract_all( session_path, bpod_trials=bpod_trials, settings=settings, save=save) else: raise ValueError(f"No extractor for task {extractor_type}") _logger.info('session extracted \n') # timing info in log return trials, wheel, files_trials + files_wheel