def walk_current_folder(root_path, mars_opts): trials_to_run = [] fullpaths = [] for path, subdirs, filenames in os.walk(root_path): for numv, fname in enumerate(filenames): # start by looping over all movie files that have "Top" in their name cond1 = all(x not in fname for x in ['.seq', '.avi', '.mpg', '.mp4']) cond2 = 'skipped' in path cond3 = 'Top' not in fname and '_t.seq' not in fname if cond1 | cond2 | cond3: continue if 'Top' in fname or '_t.seq' in fname: front_fname, top_fname, mouse_name = mof.get_names(fname) print(front_fname + ' ' + top_fname + ' ' + mouse_name) if top_fname != fname: continue fullpath_to_front = os.path.join(path, front_fname) fullpath_to_top = os.path.join(path, top_fname) cond1 = not (os.path.exists(fullpath_to_front)) cond2 = mars_opts['doFront'] cond3 = not mars_opts['doTop'] cond4 = not mars_opts['doToppcf'] # If the front video doesn't exist and we need it, continue. if (cond1 and cond2): # |(cond3 and cond4): continue elif 'Front' in fname: front_fname = fname front_fname, top_fname, mouse_name = mof.get_names(front_fname) # if front_fname != fname: continue fullpath_to_top = os.path.join(path, top_fname) fullpath_to_front = os.path.join(path, front_fname) cond1 = not (os.path.exists(fullpath_to_top)) cond2 = mars_opts['doTop'] cond3 = not mars_opts['doFront'] cond4 = not mars_opts['doToppcf'] if (cond1 and cond2 and cond4) | cond3: continue else: # This is a movie file, but doesnt have "Top" or "Front" in it. Let's skip it. continue # Save the paths we want to use. mouse_trial = dict() mouse_trial['top'] = fullpath_to_top mouse_trial['front'] = fullpath_to_front trials_to_run.append(mouse_trial) fullpaths.append(fullpath_to_top) return trials_to_run, fullpaths
def dump_bento_across_dir(root_path): ''' This function makes a bento file for a specific directory.''' wb = xlwt.Workbook(encoding='utf-8') ws1 = wb.add_sheet('Sheet1', cell_overwrite_ok=True) ws1.write(0, 0, os.path.abspath(root_path)) # A1 ws1.write(0, 1, 'Ca framerate:') # B1 ws1.write(0, 2, 0) # C1 ws1.write(0, 3, 'Annot framerate:') # D1 ws1.write(0, 4, 30) # E1 ws1.write(0, 5, 'Multiple trials/Ca file:') # F1 ws1.write(0, 6, 0) # G1 ws1.write(0, 7, 'Multiple trails/annot file') # H1 ws1.write(0, 8, 0) # I1 ws1.write(0, 9, 'Includes behavior movies:') # J1 ws1.write(0, 10, 1) # K1 ws1.write( 0, 11, 'Offset (in seconds; positive values = annot starts before Ca):') # L1 ws1.write(0, 12, 0) # M1 ws1.write(0, 13, 'Includes tracking data:') ws1.write(0, 14, 0) ws1.write(0, 15, 'Includes audio files:') ws1.write(0, 16, 0) ws1.write(1, 0, 'Mouse') # A2 mouse_col_num = 0 session_col_num = 1 trial_col_num = 2 ws1.write(1, 1, 'Sessn') # B2 ws1.write(1, 2, 'Trial') # C2 ws1.write(1, 3, 'Stim') # D2 ws1.write(1, 4, 'Calcium imaging file') # E2 ws1.write(1, 5, 'Start Ca') # F2 ws1.write(1, 6, 'Stop Ca') # G2 ws1.write(1, 7, 'FR Ca') # H2 ws1.write(1, 8, 'Alignments') # I2 ws1.write(1, 9, 'Annotation file') # J2 annot_file_col_num = 9 ws1.write(1, 10, 'Start Anno') # K2 ws1.write(1, 11, 'Stop Anno') # L2 ws1.write(1, 12, 'FR Anno') # M2 ws1.write(1, 13, 'Offset') # N2 ws1.write(1, 14, 'Behavior movie') # O2 behavior_movie_col_num = 14 ws1.write(1, 15, 'Tracking') # P2 tracking_file_col_num = 15 ws1.write(1, 16, 'Audio file') audio_file_col_num = 16 ws1.write(1, 17, 'tSNE') # ws1.write(2, 0, 1) # A2 # ws1.write(2, 1, 1) # B2 # ws1.write(2, 2, 1) # C2 # ws1.write(2, 3, '') # D2 # ws1.write(2, 4, '') # E2 # ws1.write(2, 5, '') # F2 # ws1.write(2, 6, '') # G2 # ws1.write(2, 7, '') # H2 # ws1.write(2, 8, '') # I2 mouse_number = 0 row_num = 2 # Going through everything in this directory. audio_filenames = [] add_audio_count = 0 nonaudio_filenames = [] for path, subdirs, filenames in os.walk(root_path): for fname in sorted(filenames): fname = os.path.join(path, fname) if fname.endswith('.wav'): audio_filenames.append(fname) else: nonaudio_filenames.append(fname) audio_filenames = sorted(audio_filenames) nonaudio_filenames = sorted(nonaudio_filenames) for fname in nonaudio_filenames: try: cond1 = '.seq' not in fname cond2 = 'skipped' in path if (cond1) | cond2: continue if 'Top' in fname: front_fname, top_fname, mouse_name = mof.get_names(fname) fullpath_to_front = os.path.join(path, front_fname) fullpath_to_top = os.path.join(path, top_fname) else: # This is a seq file, but doesnt have "Top" or "Front" in it. Let's skip it. continue # Add their info to the bento file at the appropriate level. video_fullpath = fullpath_to_top output_suffix = '' video_path = os.path.dirname(video_fullpath) video_name = os.path.basename(video_fullpath) # Get the output folder for this specific mouse. output_folder = mof.get_mouse_output_dir( dir_output_should_be_in=video_path, video_name=video_name, output_suffix=output_suffix) _, _, mouse_name = mof.get_names(video_name=video_name) pose_basename = mof.get_pose_no_ext(video_fullpath=video_fullpath, output_folder=output_folder, view='top', output_suffix=output_suffix) top_pose_fullpath = pose_basename + '.json' same_path_ann = [ os.path.join(root_path, f) for f in os.listdir(root_path) if is_annotation_file(f, mouse_name) ] ann = [ os.path.join(output_folder, f) for f in os.listdir(output_folder) if is_annotation_file(f, mouse_name) ] ann = sorted(ann) ann = [get_normrel_path(f, root_path) for f in ann] pose_cond = os.path.exists(top_pose_fullpath) video_cond = os.path.exists(video_fullpath) should_write = (pose_cond and video_cond) if should_write: old_mouse_number = mouse_number mouse_number = get_mouse_number(video_fullpath) mouse_cond = (old_mouse_number == mouse_number) # TODO: Session condition sess_cond = (True) if mouse_cond and sess_cond: trial_count += 1 else: trial_count = 1 ws1.write(row_num, mouse_col_num, mouse_number) # A2 ws1.write(row_num, session_col_num, 1) # B2 ws1.write(row_num, trial_col_num, trial_count) # C2 ws1.write(row_num, annot_file_col_num, ';'.join(ann)) # J2 ws1.write(row_num, 10, '') # K2 ws1.write(row_num, 11, '') # L2 ws1.write(row_num, 12, '') # M2 ws1.write(row_num, 13, '') # N2 track_file = get_normrel_path(top_pose_fullpath, root_path) ws1.write(row_num, behavior_movie_col_num, get_normrel_path(fullpath_to_top, root_path)) # O2 ws1.write(row_num, tracking_file_col_num, track_file) # P2 row_num += 1 except Exception as e: print(e) error_msg = 'ERROR: ' + fname + ' has failed. ' + str(e) continue # End of try-except block # End of particular fname # End of the particular root_path last_row = row_num row_num = 2 for audio_file_count, audio_file in enumerate(audio_filenames): # Write the files in order. ws1.write(row_num + audio_file_count, audio_file_col_num + 2, get_normrel_path(audio_file, root_path)) bento_name = 'bento_' + mof.get_version_suffix() + '.xls' wb.save(os.path.join(root_path, bento_name)) return