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 ask_confirm_session_idx(session_idx): # Confirm this is the session to load with user. If not override SESSION_IDX sess_num = int(session_idx + 1) sess_num = graph.numinput( "Confirm session to load", "Load recording session number", default=sess_num, askint=True, minval=1, maxval=12 ) if sess_num != session_idx + 1: session_idx = sess_num - 1 return session_idx
def ask_confirm_session_idx(session_idx): # Confirm this is the session to load with user. If not override SESSION_IDX sess_num = int(session_idx + 1) sess_num = graph.numinput( "Confirm pregenerated session to load", "Load trial sequence for recording day number:", default=sess_num, askint=True, minval=1, ) if sess_num != session_idx + 1: session_idx = sess_num - 1 return session_idx
def main() -> 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 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_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 load_session_order_and_idx(sph: object) -> object: if ((not sph.LAST_SETTINGS_DATA) or ('SESSION_ORDER' not in sph.LAST_SETTINGS_DATA.keys())): sph.SESSION_ORDER = misc.draw_session_order() sph.SESSION_IDX = 0 elif 'SESSION_ORDER' in sph.LAST_SETTINGS_DATA.keys(): sph.SESSION_ORDER = sph.LAST_SETTINGS_DATA['SESSION_ORDER'] sph.SESSION_IDX = sph.LAST_SETTINGS_DATA['SESSION_IDX'] + 1 # Confirm this is the session to load. If not override SESSION_IDX ses_num = int(sph.SESSION_IDX + 1) ses_num = numinput("Confirm session to load", "Load recording session number", default=ses_num, askint=True, minval=1, maxval=12) if ses_num != sph.SESSION_IDX + 1: sph.SESSION_IDX = ses_num - 1 return sph
def get_subject_weight(self): return numinput( "Subject weighing (gr)", f"{self.PYBPOD_SUBJECTS[0]} weight (gr):", nullable=False)
"ndrops", "mean_measured_weight", "std_measured_weight", ]) ntrials = sph.NTRIALS # in milliseconds, 10 to 100ms opening time open_times = range(sph.MIN_OPEN_TIME, sph.MAX_OPEN_TIME, sph.STEP) open_times = [ i for i in range(sph.MIN_OPEN_TIME, sph.MAX_OPEN_TIME, sph.STEP) for _ in range(sph.PASSES) ] if sph.OAHUS_SCALE_PORT: stopweight = scale_read(sph.OAHUS_SCALE_PORT) else: stopweight = numinput(f"Initialize weight", "Enter the weight diplayed on the scale (gr):") pass_ = 1 progress = 0 mw = [] for open_time in open_times: # Set the startweight to be the last recorded stopweight startweight = stopweight # Run the state machine; deliver ntrials drops of water water_drop(open_time / 1000, ntrials=ntrials, iti=sph.IPI, bpod=bpod) # wait for the scale update delay time.sleep(1) # Get the value if sph.OAHUS_SCALE_PORT: stopweight = scale_read(sph.OAHUS_SCALE_PORT) else:
def ask_subject_weight(subject: str) -> float: return graph.numinput("Subject weighing (gr)", f"{subject} weight (gr):", nullable=False)