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
Esempio n. 3
0
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
Esempio n. 5
0
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
Esempio n. 6
0
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)
Esempio n. 8
0
            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