def _run_from_folder(cls, output_folder, params, verbose): recording = load_extractor(output_folder / 'spikeinterface_recording.json') assert isinstance(recording, BinaryRecordingExtractor) assert recording.get_num_segments() == 1 dat_path = recording._kwargs['file_paths'][0] print('dat_path', dat_path) num_chans = recording.get_num_channels() locations = recording.get_channel_locations() print(locations) print(type(locations)) # ks_probe is not probeinterface Probe at all ks_probe = Bunch() ks_probe.NchanTOT = num_chans ks_probe.chanMap = np.arange(num_chans) ks_probe.kcoords = np.ones(num_chans) ks_probe.xc = locations[:, 0] ks_probe.yc = locations[:, 1] run( dat_path, params=params, probe=ks_probe, dir_path=output_folder, n_channels=num_chans, dtype=recording.get_dtype(), sample_rate=recording.get_sampling_frequency(), )
def import_matlab_chanmap(chanmap_matfile): '''Load a MATLAB channel map file. Parameters ---------- chanmap_matfile (str): MATLAB file containing probe information Returns ------- probe (pykilosort.Bunch): Object containing probe information ''' # read MAT file and extract relevant info mat = loadmat(chanmap_matfile) chanmap_zeroidx = mat['chanMap'].squeeze().astype(np.int64) - 1 # 0-indexed xcoords = mat['xcoords'].squeeze().astype(np.float32) ycoords = mat['ycoords'].squeeze().astype(np.float32) # Create `probe` object probe = Bunch() probe.chanMap = chanmap_zeroidx probe.xc = xcoords probe.yc = ycoords probe.NchanTOT = len(chanmap_zeroidx) return probe
def run_spike_sorting_ibl(bin_file): _logger = logging.getLogger("pykilosort") START_TIME = datetime.datetime.now() out_dir = Path("/datadisk/Data/spike_sorting/datasets").joinpath( '_'.join(list(bin_file.parts[-6:-3]) + [bin_file.parts[-2]])) out_dir.mkdir(exist_ok=True, parents=True) add_default_handler(level='DEBUG') add_default_handler( level='DEBUG', filename=out_dir.joinpath(f"{START_TIME.isoformat()}_kilosort.log")) files_chmap = Path( "/home/olivier/Documents/MATLAB/Kilosort2/configFiles/neuropixPhase3A_kilosortChanMap.mat" ) matdata = Bunch(scipy.io.loadmat(files_chmap)) probe = Bunch() probe.NchanTOT = 385 # WARNING: indexing mismatch with MATLAB hence the -1 probe.chanMap = (matdata.chanMap - 1).squeeze() probe.xc = matdata.xcoords.squeeze() probe.yc = matdata.ycoords.squeeze() probe.kcoords = probe.yc * 0 + 1 try: _logger.info(f"Starting KS, output in {out_dir}") run(bin_file, probe=probe, dir_path=out_dir, n_channels=385, dtype=np.int16, sample_rate=3e4) except Exception as e: _logger.exception("Error in the main loop") [_logger.removeHandler(h) for h in _logger.handlers]
import kachery as ka from pykilosort import Bunch, add_default_handler, run from spikeextractors.extractors import bindatrecordingextractor as dat from spikeforest2_utils import AutoRecordingExtractor, AutoSortingExtractor dat_path = Path("test/test.bin").absolute() dir_path = dat_path.parent ka.set_config(fr="default_readonly") recording_path = "sha1dir://c0879a26f92e4c876cd608ca79192a84d4382868.manual_franklab/tetrode_600s/sorter1_1" recording = AutoRecordingExtractor(recording_path, download=True) recording.write_to_binary_dat_format(str(dat_path)) n_channels = len(recording.get_channel_ids()) probe = Bunch() probe.NchanTOT = n_channels probe.chanMap = np.array(range(0, n_channels)) probe.kcoords = np.ones(n_channels) probe.xc = recording.get_channel_locations()[:, 0] probe.yc = recording.get_channel_locations()[:, 1] add_default_handler(level="DEBUG") params = {"nfilt_factor": 8, "AUCsplit": 0.85, "nskip": 5} run( dat_path, params=params, probe=probe, dir_path=dir_path,
create_test_directory(test_dir) dir_path = dat_path.parent # Use spikeinterface to get a consistent interface to the recording recording = dat.BinDatRecordingExtractor( dat_path, sampling_frequency=3e4, numchan=4, dtype='int16' ) n_channels = len(recording.get_channel_ids()) # Load the config into pykilosort2. # This should be automatic in the future. probe = Bunch() probe.NchanTOT = n_channels probe.chanMap = np.array(range(0, n_channels)) probe.kcoords = np.ones(n_channels) probe.xc = np.load(dir_path.as_posix()+'/xc.npy') probe.yc = np.load(dir_path.as_posix()+'/yc.npy') add_default_handler(level="DEBUG") params = { "nfilt_factor": 8, "AUCsplit": 0.85, "nskip": 5 }
# Set up (and download if necessary) a test recording if not dat_path.is_file(): create_test_directory(test_dir) dir_path = dat_path.parent # Use spikeinterface to get a consistent interface to the recording recording = dat.BinDatRecordingExtractor(dat_path, sampling_frequency=3e4, numchan=64, dtype='int16') n_channels = len(recording.get_channel_ids()) # Load the config into pykilosort2. # This should be automatic in the future. probe = Bunch() probe.NchanTOT = n_channels probe.chanMap = np.load(dir_path.as_posix() + '/chanMap.npy').flatten().astype(int) probe.kcoords = np.ones(n_channels) probe.xc = np.load(dir_path.as_posix() + '/xc.npy').flatten() probe.yc = np.load(dir_path.as_posix() + '/yc.npy').flatten() add_default_handler(level="DEBUG") #params = { # "nfilt_factor": 8, # "AUCsplit": 0.85, # "nskip": 5 #} params = None #{}