コード例 #1
0
FRAMES_PER_SEC = get_frame_rate(win)

clock_image = visual.ImageStim(win=win,
                               image=join('images', 'clock.png'),
                               interpolate=True,
                               size=config['CLOCK_SIZE'],
                               pos=config['CLOCK_POS'])

accept_box = AcceptBox(win, config["ACCEPT_BOX_POS"],
                       config["ACCEPT_BOX_SIZE"], config["ACCEPT_BOX_TEXT"],
                       config["START_BOX_COLOR"], config["START_TEXT_COLOR"],
                       config["END_BOX_COLOR"], config["END_TEXT_COLOR"])

feedback_positive = visual.TextStim(win=win,
                                    text=read_text_from_file(
                                        join('.', 'messages',
                                             "feedback_positive.txt")),
                                    antialias=True,
                                    font=u'Arial',
                                    height=config['FEEDBACK_SIZE'],
                                    wrapWidth=win.size[0],
                                    color=u'black',
                                    alignHoriz='center',
                                    alignVert='center',
                                    pos=config["FEEDBACK_POS"])

feedback_negative = visual.TextStim(win=win,
                                    text=read_text_from_file(
                                        join('.', 'messages',
                                             "feedback_negative.txt")),
                                    antialias=True,
コード例 #2
0
def ophthalmic_procedure(win,
                         screen_res,
                         frames_per_sec,
                         trigger_no,
                         triggers_list,
                         text_size,
                         send_eeg_triggers=False,
                         send_nirs_triggers=False,
                         port_eeg=None,
                         port_nirs=None,
                         vis_offset=60,
                         secs_of_msg=5,
                         secs_of_blinks=9,
                         secs_of_saccades=9,
                         exit_key='f7'):
    """
    :param port_nirs:
    :param port_eeg:
    :param send_nirs_triggers:
    :param text_size:
    :param triggers_list:
    :param trigger_no:
    :param frames_per_sec:
    :param screen_res:
    :param win:
    :param send_eeg_triggers:
    :param vis_offset: No of pixels of margin between fixation crosses and screen border
    :param secs_of_msg:
    :param secs_of_blinks:
    :param secs_of_saccades:
    :return:
    """
    logging.info('Starting ophthalmic procedure... ')
    # prepare stim's
    ophthalmic_info = read_text_from_file(
        os.path.join('.', 'messages', 'ophthalmic_instruction.txt'))
    corners_info = read_text_from_file(
        os.path.join('.', 'messages', 'ophthalmic_corners.txt'))

    ophthalmic_info = visual.TextStim(win=win,
                                      font=u'Arial',
                                      text=ophthalmic_info,
                                      height=text_size,
                                      wrapWidth=screen_res['width'],
                                      color=u'black')
    corners_info = visual.TextStim(win=win,
                                   font=u'Arial',
                                   text=corners_info,
                                   height=text_size,
                                   wrapWidth=screen_res['width'],
                                   color=u'black')
    # crosses are located in corners
    crosses = [[x, y] for x in [
        -screen_res['width'] / 2 + vis_offset, screen_res['width'] / 2 -
        vis_offset
    ] for y in [
        -screen_res['height'] / 2 + vis_offset, screen_res['height'] / 2 -
        vis_offset
    ]]
    crosses = [
        visual.TextStim(win=win,
                        text=u'+',
                        height=3 * text_size,
                        color=u'black',
                        pos=pos) for pos in crosses
    ]

    ophthalmic_info.setAutoDraw(True)
    for _ in range(frames_per_sec * secs_of_msg):
        win.flip()
        check_exit(exit_key)
    ophthalmic_info.setAutoDraw(False)
    win.flip()

    for frame_counter in range(frames_per_sec * secs_of_blinks):
        if frame_counter % frames_per_sec == 0:
            trigger_no, triggers_list = prepare_trigger(
                trigger_type=TriggerTypes.BLINK,
                trigger_no=trigger_no,
                triggers_list=triggers_list)
            send_trigger(port_eeg=port_eeg,
                         port_nirs=port_nirs,
                         trigger_no=trigger_no,
                         send_eeg_triggers=send_eeg_triggers,
                         send_nirs_triggers=send_nirs_triggers)
        win.flip()
        check_exit(exit_key)

    corners_info.setAutoDraw(True)
    for _ in range(frames_per_sec * secs_of_msg):
        win.flip()
        check_exit(exit_key)
    corners_info.setAutoDraw(False)

    [item.setAutoDraw(True) for item in crosses]
    for frame_counter in range(frames_per_sec * secs_of_saccades):
        if frame_counter % frames_per_sec == 0:
            trigger_no, triggers_list = prepare_trigger(
                trigger_type=TriggerTypes.BLINK,
                trigger_no=trigger_no,
                triggers_list=triggers_list)
            send_trigger(port_eeg=port_eeg,
                         port_nirs=port_nirs,
                         trigger_no=trigger_no,
                         send_eeg_triggers=send_eeg_triggers,
                         send_nirs_triggers=send_nirs_triggers)
        win.flip()
        check_exit(exit_key)
    [item.setAutoDraw(False) for item in crosses]
    win.flip()

    logging.info('Ophthalmic procedure finished correctly!')

    return trigger_no, triggers_list
コード例 #3
0
ファイル: run_trial.py プロジェクト: ociepkam/DIS_PER
def run_trial(trial, config, response_clock, clock_image, mouse, win, fixation, stim_time,
              instruction=None, training=False, training_trial_idx=None):
    win.callOnFlip(response_clock.reset)
    win.flip()
    while response_clock.getTime() < config["FIXATION_TIME"]:
        fixation.draw(win)
        win.flip()

    acc = -1
    chosen_answer = {"word": None, "length": None, "category": None}
    rt = None
    trial.set_auto_draw(True)
    if instruction is not None:
        instruction.setAutoDraw(True)
    clock_is_shown = False
    win.callOnFlip(response_clock.reset)
    win.flip()
    event.clearEvents()

    while response_clock.getTime() < stim_time and acc == -1:
        for idx, frame in enumerate(trial.frames):
            if frame.contains(mouse.getPos()) and config["SHOW_FRAMES"]:
                frame.draw()
            if mouse.isPressedIn(frame):
                chosen_answer = trial.info["answers"][idx]
                acc = chosen_answer == trial.info["task"]
                rt = response_clock.getTime()
                break

        if clock_image is not None and \
                not clock_is_shown and \
                config["STIM_TIME"] - response_clock.getTime() < config["SHOW_CLOCK"]:
            clock_image.setAutoDraw(True)
            clock_is_shown = True
            win.flip()

        check_exit()
        win.flip()
    if clock_image is not None:
        clock_image.setAutoDraw(False)
    if training:
        if acc == 1:
            feedback_file_name = "feedback_positive.txt"
        elif acc == -1:
            feedback_file_name = "feedback_no_answer.txt"
        else:
            feedback_file_name = "feedback_negative.txt"
        text = read_text_from_file(join('.', 'messages', feedback_file_name)) + \
               read_text_from_file(join('.', 'messages', "feedback_info_{}.txt".format(training_trial_idx + 1)))

        feedback = visual.TextStim(win=win, height=config['FEEDBACK_SIZE'], alignHoriz='center', alignVert='center',
                                   font=u'Arial', pos=config["FEEDBACK_POS"], text=text, wrapWidth=win.size[0],
                                   color=config["FEEDBACK_COLOR"])
        feedback.setAutoDraw(True)

        answer_idx = trial.info["answers"].index(trial.info["task"])
        trial.frames[answer_idx].lineColor = config["FRAME_COLOR_CORR"]
        trial.frames[answer_idx].setAutoDraw(True)
        if not acc:
            chosen_idx = trial.info["answers"].index(chosen_answer)
            trial.frames[chosen_idx].lineColor = config["FRAME_COLOR_WRONG"]
            trial.frames[chosen_idx].setAutoDraw(True)

        win.flip()
        event.waitKeys(keyList=['space'])
        feedback.setAutoDraw(False)

    trial.set_auto_draw(False)
    if instruction is not None:
        instruction.setAutoDraw(False)
    win.flip()
    time.sleep(config["WAIT_TIME"] + random.uniform(config["WAIT_JITTER"][0], config["WAIT_JITTER"][1]))

    return chosen_answer, acc, rt
コード例 #4
0
ファイル: main.py プロジェクト: ociepkam/DIS_SEM
                           color=config["FIXATION_COLOR"])

mouse = event.Mouse()

response_clock = core.Clock()

in_trial_instruction = None
if config["SHOW_IN_TRIAL_INSTRUCTION"]:
    in_trial_instruction = visual.TextStim(
        win=win,
        height=config['IN_TRIAL_INSTRUCTION_SIZE'],
        alignHoriz='center',
        alignVert='center',
        font=u'Arial',
        pos=config["IN_TRIAL_INSTRUCTION_POS"],
        text=read_text_from_file(
            join('.', 'messages', "in_trial_instruction.txt")),
        wrapWidth=win.size[0],
        color=config["IN_TRIAL_INSTRUCTION_COLOR"])

# TRAINING 1
# show_info(win, join('.', 'messages', "instruction1.txt"), text_size=config['TEXT_SIZE'], screen_width=SCREEN_RES[0])
show_image(win,
           "instruction_1.jpg",
           size=config["INSTRUCTION_SIZE_TRAINING_1"])
training = True
training_trials_info = load_training_trials("training_1_trials.yaml")
training_trials = create_training_trials(config, win, training_trials_info)
train_clock = clock_image if config["SHOW_CLOCK_IN_TRAINING_1"] else None
for i, t in enumerate(training_trials):
    chosen_answer, acc, rt = run_trial(
        trial=t,
コード例 #5
0
                       config["ACCEPT_BOX_SIZE"], config["ACCEPT_BOX_TEXT"],
                       config["START_BOX_COLOR"], config["START_TEXT_COLOR"],
                       config["END_BOX_COLOR"], config["END_TEXT_COLOR"])

mouse = event.Mouse()

response_clock = core.Clock()
trial_nr = 1

# TRAINING
# show_info(win, join('.', 'messages', "instruction1.txt"), text_size=config['TEXT_SIZE'], screen_width=SCREEN_RES[0])
show_image(win, "instrukcja_1.jpg", size=SCREEN_RES)
show_image(win, "instrukcja_2.jpg", size=SCREEN_RES)
# show_image(window, 'instruction.png', SCREEN_RES)
for item in config["TRAINING_TRIALS"]:
    text = read_text_from_file(join('.', 'messages', "feedback_positive.txt")) + \
           read_text_from_file(join('.', 'messages', "feedback_info_{}.txt".format(item)))
    feedback_positive = visual.TextStim(win=win,
                                        text=text,
                                        antialias=True,
                                        font=u'Arial',
                                        height=config['FEEDBACK_SIZE'],
                                        wrapWidth=win.size[0],
                                        color=u'black',
                                        alignHoriz='center',
                                        alignVert='center',
                                        pos=config["FEEDBACK_POS"])

    text = read_text_from_file(join('.', 'messages', "feedback_negative.txt")) + \
           read_text_from_file(join('.', 'messages', "feedback_info_{}.txt".format(item)))
    feedback_negative = visual.TextStim(win=win,