def move_ephys_files(session_folder: str) -> None: """move_ephys_files is system agnostic (3A, 3B1, 3B2). Moves all properly named ephys files to appropriate locations for transfer. Use rename_ephys_files function before this one. :param session_folder: Session folder path :type session_folder: str :return: None - Moves files on filesystem :rtype: None """ session_path = Path(session_folder) raw_ephys_data_path = session_path / "raw_ephys_data" imec_files = session_path.rglob("*.imec*") for imf in imec_files: # For 3B system probe0x == imecx probe_number = re.match(r'_spikeglx_ephysData_g\d_t\d.imec(\d+).*', imf.name) if not probe_number: # For 3A system imec files must be in a 'probexx' folder probe_label = re.search(r'probe\d+', str(imf)) assert probe_label, f'Cannot assign probe number to file {imf}' probe_label = probe_label.group() else: probe_number, = probe_number.groups() probe_label = f'probe{probe_number.zfill(2)}' raw_ephys_data_path.joinpath(probe_label).mkdir(exist_ok=True) shutil.move(imf, raw_ephys_data_path.joinpath(probe_label, imf.name)) # NIDAq files (3B system only) nidq_files = session_path.rglob("*.nidq.*") for nidqf in nidq_files: shutil.move(str(nidqf), str(raw_ephys_data_path / nidqf.name)) # Delete all empty folders recursively delete_empty_folders(raw_ephys_data_path, dry=False, recursive=True)
def move_ephys_files(session_folder: str) -> None: """move_ephys_files is system agnostic (3A, 3B1, 3B2). Moves all properly named ephys files to appropriate locations for transfer. Use rename_ephys_files function before this one. :param session_folder: Session folder path :type session_folder: str :return: None - Moves files on filesystem :rtype: None """ session_path = Path(session_folder) raw_ephys_data_path = session_path / "raw_ephys_data" probe00_path = raw_ephys_data_path / "probe00" probe01_path = raw_ephys_data_path / "probe01" # 3A system imec only imec_files = session_path.rglob("*.imec.*") for imf in imec_files: if "probe00" in str(imf): shutil.move(str(imf), str(probe00_path / imf.name)) elif "probe01" in str(imf): shutil.move(str(imf), str(probe01_path / imf.name)) # 3B system imec0_files = session_path.rglob("*.imec0.*") imec1_files = session_path.rglob("*.imec1.*") nidq_files = session_path.rglob("*.nidq.*") # All imec 0 in probe00 folder for i0f in imec0_files: shutil.move(str(i0f), str(probe00_path / i0f.name)) # All imec 1 in probe01 folder for i1f in imec1_files: shutil.move(str(i1f), str(probe01_path / i1f.name)) # NIDAq files nidq_files = session_path.rglob("*.nidq.*") for nidqf in nidq_files: shutil.move(str(nidqf), str(raw_ephys_data_path / nidqf.name)) # Delete all empty folders recursively from ibllib.io.misc import delete_empty_folders delete_empty_folders(raw_ephys_data_path, dry=False, recursive=True)
def test_delete_empty_folders(self): pre = [x.exists() for x in self.subdirs] pre_expected = [True, True, True, True] self.assertTrue(all([x == y for x, y in zip(pre, pre_expected)])) # Test dry run pos_expected = None pos = misc.delete_empty_folders(self.tempdir) self.assertTrue(pos == pos_expected) # Test dry=False, non recursive pos_expected = [True, False, False, True] misc.delete_empty_folders(self.tempdir, dry=False) pos = [x.exists() for x in self.subdirs] self.assertTrue(all([x == y for x, y in zip(pos, pos_expected)])) self._resetup_folders() # Test recursive pos_expected = [False, False, False, True] misc.delete_empty_folders(self.tempdir, dry=False, recursive=True) pos = [x.exists() for x in self.subdirs] self.assertTrue(all([x == y for x, y in zip(pos, pos_expected)]))