def ask_subject_weight(subject: str, settings_file_path: str = None) -> float: out = graph.numinput("Subject weighing (gr)", f"{subject} weight (gr):", nullable=False) log.info(f'Subject weight {out}') if settings_file_path is not None: patch = {'SUBJECT_WEIGHT': out} patch_settings_file(settings_file_path, patch) return out
def ask_session_delay(settings_file_path: str = None) -> int: out = graph.numinput( "Session delay", "Delay session initiation by (min):", default=0, minval=0, maxval=60, nullable=False, askint=True) out = out * 60 if settings_file_path is not None: patch = {'SESSION_START_DELAY_SEC': out} patch_settings_file(settings_file_path, patch) return out
def poop() -> None: poop_flags = list(IBLRIG_DATA.rglob('poop_count.flag')) poop_flags = sorted( poop_flags, key=lambda x: (parser.parse(x.parent.parent.name), int(x.parent.name))) if not poop_flags: return flag = poop_flags[-1] session_name = '/'.join(flag.parent.parts[-3:]) poop_count = numinput( 'Poop up window', f'Enter poop pellet count for session: \n{session_name}') patch = {'POOP_COUNT': poop_count} patch_settings_file(str(flag.parent), patch) flag.unlink()
def ask_is_mock(settings_file_path: str = None) -> bool: out = None resp = graph.strinput( "Session type", "IS this a MOCK recording? (yes/NO)", default='NO', nullable=True) if resp is None: return ask_is_mock(settings_file_path) if resp.lower() in ['no', 'n', '']: out = False elif resp.lower() in ['yes', 'y']: out = True else: return ask_is_mock(settings_file_path) if settings_file_path is not None and out is not None: patch = {'IS_MOCK': out} patch_settings_file(settings_file_path, patch) return out
def ask_subject_project(subject: str, settings_file_path: str = None) -> float: import datetime import json from one.api import ONE one = ONE() all_subjects = list(one.alyx.rest("subjects", "list")) all_subjects.append({"dump_date": datetime.datetime.utcnow().isoformat()}) fpath = None # Find Subjects folder # Save json in Subjects folder with open(fpath, "w+") as f: f.write(json.dumps(all_subjects, indent=1)) f.write("\n") # Load subjects from disk with open(fpath, "r") as f: all_subjects = json.loads(f.readlines()) # Given Subject load 'session_projects' all_projects = {x["nickname"]: x["session_projects"] for x in all_subjects} projects = all_projects[subject] if not projects: return projects elif len(projects) == 1: return projects[0] else: resp = graph.strinput( "Select project", str(projects), default=projects[0], nullable=False, ) return resp out = graph.numinput("Subject project", f"{subject} project (gr):", nullable=False) log.info(f"Subject weight {out}") if settings_file_path is not None: patch = {"SUBJECT_WEIGHT": out} patch_settings_file(settings_file_path, patch) return out
def ask_is_mock(settings_file_path: str = None) -> bool: out = None resp = graph.strinput( "Session type", "IS this a MOCK recording? (yes/NO)", default="NO", nullable=True, ) if resp is None: return ask_is_mock(settings_file_path) if resp.lower() in ["no", "n", ""]: out = False elif resp.lower() in ["yes", "y"]: out = True else: return ask_is_mock(settings_file_path) if settings_file_path is not None and out is not None: patch = {"IS_MOCK": out} patch_settings_file(settings_file_path, patch) return out
def patch_settings_file(self, patch): self.__dict__.update(patch) misc.patch_settings_file(self.SETTINGS_FILE_PATH, patch)
sph.OSC_CLIENT, pcs_idx, sph.POSITIONS[pcs_idx], sph.CONTRASTS[pcs_idx], sph.STIM_PHASE[pcs_idx], ) pcs_idx += 1 # time.sleep(0.3) scount += 1 # FIXME: From here if task loop crashes nothing runs # Patch the PYBPOD_PROTOCOL of both ephys and passive sessions if session is mock if sph.IS_MOCK: ephys_patch = {"PYBPOD_PROTOCOL": "_iblrig_tasks_ephysMockChoiceWorld"} passive_patch = {"PYBPOD_PROTOCOL": "_iblrig_tasks_passiveMockChoiceWorld"} misc.patch_settings_file(sph.CORRESPONDING_EPHYS_SESSION, patch=ephys_patch) misc.patch_settings_file(sph.SETTINGS_FILE_PATH, patch=passive_patch) # Create a flag files misc.create_flag(sph.SESSION_FOLDER, "passive_data_for_ephys.flag") misc.create_flag(sph.SESSION_FOLDER, "poop_count") bpod.close() # Turn bpod light's back on bpod_lights(PARAMS["COM_BPOD"], 1) # Close Bonsai stim bonsai.stop_wrkfl("stim") msg = "Passive protocol done, please remove subject.\n" * 42 log.info(msg) msg = "Passive protocol is over.\nMake sure you turn the VALVE back ON!" popup("WARNING!", msg) # Locks