Timing


How to suspend the experiment

We often meet the need of keeping showing the text, the shape, etc., but the experiment program will jump the next command once the last command executed, which means there's no interval between drawText("Please look at the stimuli") and drawText("Please press the keyboard"). So, how could we insert an 1s' interval between two drawText operations?

We will insert the command show(1) between two commands. The method show will keep running and blocking the experiment procedure for a given duration which depends on the parameter "out_time".

About the unit of time measurement

All the numbers should given based on second.

About "shared.start_tp"

Normally, the method (e.g. show and waitForResponse) with the parameter "out_time" will keep running for the duration of "out_time". Thus the onset of "out_time" is the onset of those commands. But we sometimes want the "out_time" to refer to longer time -- the onset should be refered to another timepoint. In that case, you should setted the "shared.start_tp = time.time()" before those commands, the "out_time" would mean the duration between "shared.start_tp = time.time()" and those commands.

The default value of timing onset

If not assigned, the default value of timing onset, which means the value of "shared.start_tp", will be the ending time of last win.flip().

Object position


Coordinate

We designed two types of coordinate: - Pixel coordinate: The coordinate bases on pixel number (int) while you give the method integral number. - The position index (x=0, y=0) means the lower-left corner of current window. - The range of x: [0, the width of window] - The range of y: [0, the height of window] - Ratio coordinate: The coordinate bases on the ratio (float) of current window size while you give the method decimal fraction. - The position index (x=0.0, y=0.0) means the center of current window. - The range of x: [-1.0, 1.0] - The range of y: [-1.0, 1.0]

Supported position's anchors

The default anchor of an object is its lower-left corner. If you want another anchor, you could change the parameters "anchor_x" and "anchor_y":

Display tricks


Font

Simhei is the default font under Windows and Linux, and 'Hei' is the default font under MacOSX. But if you put a "ttf" font file under expy package's path, then you can use the font by its font name (not the filename). e.g.

drawText(text, font='Source Han Sans SC Normal')

Supported colornames

C_black, C_white, C_red, C_lime, C_blue, C_yellow, C_aqua, C_fuchsia, C_silver, C_gray, C_maroon, C_olive, C_green, C_purple, C_teal, C_navy

Draw things on previous screen / new screen

In default, the drawXXX() command will draw thing on a new screen, but you can also draw a thing on previous screen by a parameter setting show_on=False. e.g.

w, h = drawText('Hello world!', show_now=False) drawRect(w, h, color=C_red, fill=False, show_now=False) show(3)

Keyboard


Keyboard controller

You could press F12 to suspend/resume the program; You could press ESC to quit the program; You could press WIN to return to the desktop and leave the program running

Response

todo list, dictionary, max wating time whilePressing

Sound


Play sound while keeping the experiment procedure going

Setting the parameter busy=False in playSound() can start a new thread for sound playing, and so the experiment procedure won't be stopped by playSound(). And in this case, playSound() will return a number refers to the playing track. You can stop the sound by the command shared.states[playing_track_id] = False

IO


Read whole/partial stimuli list

You can get whole stimuli list by readStimuli(path); You can get part of the list by readStimuli(path, query=XXX). XXX should be a string discribing the filter (https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.query.html). For example, query='block==2' means the rows with 2 at the block attribute will be selected.

Write the result

The format of result

List of numbers or strings, or list of list/tuples. e.g. ['A','B','C','D'] or [('A', 1), ('B', 0), ('C', 1), ('D', 0)]

Append to existing result file

If block_tag was undefined in saveResult() and the result file was existed, the new result will be added to existing result file.

Attach the stimuli list to the result

By giving the stimuli list (List or DataFrame) to the parameter stim, saveResult() will store the stimuli list as well. e.g.

stimuli_list = pd.Dataframe(['A','B','C','D']) saveResult(resp=[(1, 0), (2, 0), (3, 0), (4, 0)], columns=['resp1', 'resp2'], stim=stimuli_list)

Subject name in result file

If the shared.subject has been assigned a value or the command getSubjectID() was executed before saveResult(), the assigned value/input will be part of the result filename.

Send trigger

todo

Log the events in experiment

todo

Scaffolds


todo

Others


Outside control of programm

todo

About "extend.py"

A internal space for your DIY methods.