This tutorial demonstrates how to use the Zanscript language to collect, per frame, in-depth XY coordinate data. Learning how the Zantiks systems calculate XY data can clarify how distance travelled data is calculated.
Commands to collect per frame XY coordinate data
RAW_XY:A# - per-frame data from the exact time of the timestamp. This is the 'actual' XY coordinate for where the animal is located at the precise time. It captures any pixel change.
TARGET_X:A# and TARGET_Y:A# - these are reference coordinates for the distance moved calculation. They are the last XY coordinates used by the system to calculate distance moved, e.g., the distance between last TARGET_X:A# and the current TARGET_X:A#. They need to reach the threshold of the move tolerance (minimum distance moved) before they change.
ARENA_SEGMENTS:A# - the segment data shows you where there is missing tracking. This number will increase by 1 whenever tracking either has not begun or is lost and starts again. This will read 1 throughout the whole experiment, unless the organism moves out of the arena. When it returns, a new segment would be recorded (e.g., changes to 2).
DISTANCE_DELTA:A# - Calculation between the current frame and previous frames distance moved. It is the distance measured in pixels since the previous line’s reading (with a minimum distance moved applied). The distances are calculated from either the first position or the last position to which a distance moved was calculated previously for the animal. It is calculated this way to avoid counting large distances moved for animals that are not moving, but their position could move from frame to frame due to video noise.
ARENA_MSD_PERFRAME:A# - Mean square difference / pixel change (MSD) is a measure of activity. The system outputs image data at 30 frames per second. MSD works by subtracting one frame from the next, leaving a frame of the pixel difference between the two images. The data is reported as the mean value per pixel for each arena. It is then summed over the interval over which it is reported.
Full example script
SET(TARGET_SIZE,2) SET(DETECTOR_THRESHOLD,6) SET(MSD_MODE,ON) SET(MSD_THRESHOLD,10) SET(AUTOREF_MODE,MOVEMENT) SET(AUTOREF_TIMEOUT,10) DEFINE X_LOGDATA_TRACKS 799 DEFINE X_DRAWTRACKS 30011 LOGFILE(1,"raw_data") SET(LOG_STREAM_PERFRAME,1) # Select per-frame stream ############################### ACTION MAIN LOAD(ARENAS,"a12.bmp") LOGCREATE("TEXT:RUNTIME|TEXT:ARENA_DISTANCE_A1|TEXT:ARENA_DISTANCE_A2") LOFAPPEND("TEXT:ARENA_DISTANCE_A3|TEXT:ARENA_DISTANCE_A4") LOGAPPEND("TEXT:ARENA_DISTANCE_B1|TEXT:ARENA_DISTANCE_B2|TEXT:ARENA_DISTANCE_B3") LOGAPPEND("TEXT:ARENA_DISTANCE_B4|TEXT:ARENA_DISTANCE_C1|TEXT:ARENA_DISTANCE_C2") LOGAPPEND("TEXT:ARENA_DISTANCE_C3|TEXT:ARENA_DISTANCE_C4") LOGRUN SET(LOG_STREAM,1) LOGCREATE("TEXT:RUNTIME|TEXT:RAWX_A1|TEXT:RAWY_A1|TEXT:X_A1|TEXT:Y_A1|TEXT:DISTANCE_A1|TEXT:SEGMENT_A1|TEXT:MSD_A1") LOGAPPEND("TEXT:RAWX_A2|TEXT:RAWY_A2|TEXT:X_A2|TEXT:Y_A2|TEXT:DISTANCE_A2|TEXT:SEGMENT_A2|TEXT:MSD_A2") LOGAPPEND("TEXT:RAWX_A3|TEXT:RAWY_A3|TEXT:X_A3|TEXT:Y_A3|TEXT:DISTANCE_A3|TEXT:SEGMENT_A3|TEXT:MSD_A3") LOGAPPEND("TEXT:RAWX_A4|TEXT:RAWY_A4|TEXT:X_A4|TEXT:Y_A4|TEXT:DISTANCE_A4|TEXT:SEGMENT_A4|TEXT:MSD_A4") LOGAPPEND("TEXT:RAWX_B1|TEXT:RAWY_B1|TEXT:X_B1|TEXT:Y_B1|TEXT:DISTANCE_B1|TEXT:SEGMENT_B1|TEXT:MSD_B1") LOGAPPEND("TEXT:RAWX_B2|TEXT:RAWY_B2|TEXT:X_B2|TEXT:Y_B2|TEXT:DISTANCE_B2|TEXT:SEGMENT_B2|TEXT:MSD_B2") LOGAPPEND("TEXT:RAWX_B3|TEXT:RAWY_B3|TEXT:X_B3|TEXT:Y_B3|TEXT:DISTANCE_B3|TEXT:SEGMENT_B3|TEXT:MSD_B3") LOGAPPEND("TEXT:RAWX_B4|TEXT:RAWY_B4|TEXT:X_B4|TEXT:Y_B4|TEXT:DISTANCE_B4|TEXT:SEGMENT_B4|TEXT:MSD_B4") LOGAPPEND("TEXT:RAWX_C1|TEXT:RAWY_C1|TEXT:X_C1|TEXT:Y_C1|TEXT:DISTANCE_C1|TEXT:SEGMENT_C1|TEXT:MSD_C1") LOGAPPEND("TEXT:RAWX_C2|TEXT:RAWY_C2|TEXT:X_C2|TEXT:Y_C2|TEXT:DISTANCE_C2|TEXT:SEGMENT_C2|TEXT:MSD_C2") LOGAPPEND("TEXT:RAWX_C3|TEXT:RAWY_C3|TEXT:X_C3|TEXT:Y_C3|TEXT:DISTANCE_C3|TEXT:SEGMENT_C3|TEXT:MSD_C3") LOGAPPEND("TEXT:RAWX_C4|TEXT:RAWY_C4|TEXT:X_C4|TEXT:Y_C4|TEXT:DISTANCE_C4|TEXT:SEGMENT_C4|TEXT:MSD_C4") LOGRUN LOGCREATE("RUNTIME|RAW_XY:A1|TARGET_X:A1|TARGET_Y:A1|DISTANCE_DELTA:A1|ARENA_SEGMENTS:A1|ARENA_MSD_PERFRAME:A1") LOGAPPEND("RAW_XY:A2|TARGET_X:A2|TARGET_Y:A2|DISTANCE_DELTA:A2|ARENA_SEGMENTS:A2|ARENA_MSD_PERFRAME:A2") LOGAPPEND("RAW_XY:A3|TARGET_X:A3|TARGET_Y:A3|DISTANCE_DELTA:A3|ARENA_SEGMENTS:A3|ARENA_MSD_PERFRAME:A3") LOGAPPEND("RAW_XY:A4|TARGET_X:A4|TARGET_Y:A4|DISTANCE_DELTA:A4|ARENA_SEGMENTS:A4|ARENA_MSD_PERFRAME:A4") LOGAPPEND("RAW_XY:A5|TARGET_X:A5|TARGET_Y:A5|DISTANCE_DELTA:A5|ARENA_SEGMENTS:A5|ARENA_MSD_PERFRAME:A5") LOGAPPEND("RAW_XY:A6|TARGET_X:A6|TARGET_Y:A6|DISTANCE_DELTA:A6|ARENA_SEGMENTS:A6|ARENA_MSD_PERFRAME:A6") LOGAPPEND("RAW_XY:A7|TARGET_X:A7|TARGET_Y:A7|DISTANCE_DELTA:A7|ARENA_SEGMENTS:A7|ARENA_MSD_PERFRAME:A7") LOGAPPEND("RAW_XY:A8|TARGET_X:A8|TARGET_Y:A8|DISTANCE_DELTA:A8|ARENA_SEGMENTS:A8|ARENA_MSD_PERFRAME:A8") LOGAPPEND("RAW_XY:A9|TARGET_X:A9|TARGET_Y:A9|DISTANCE_DELTA:A9|ARENA_SEGMENTS:A9|ARENA_MSD_PERFRAME:A9") LOGAPPEND("RAW_XY:A10|TARGET_X:A10|TARGET_Y:A10|DISTANCE_DELTA:A10|ARENA_SEGMENTS:A10|ARENA_MSD_PERFRAME:A10") LOGAPPEND("RAW_XY:A11|TARGET_X:A11|TARGET_Y:A11|DISTANCE_DELTA:A11|ARENA_SEGMENTS:A11|ARENA_MSD_PERFRAME:A11") LOGAPPEND("RAW_XY:A12|TARGET_X:A12|TARGET_Y:A12|DISTANCE_DELTA:A12|ARENA_SEGMENTS:A12|ARENA_MSD_PERFRAME:A12") SET(X_DRAWTRACKS,1) SET(LOG_STREAM,0) AUTOREFERENCE() SET(LOG_PERFRAME,ON) LOGDATA(DATA_SNAPSHOT,"begin") WAIT(5) LOGDATA(DATA_SNAPSHOT,"end") LOGDATA(DATA_SELECT,"begin") LOGDATA(DATA_DELTA,"end") LOGCREATE("RUNTIME|ARENA_DISTANCES:A1-12") LOGRUN SET(LOG_PERFRAME,OFF) SET(X_DRAWTRACKS,0) COMPLETE
Script download
To download the raw_xy_all_data demo script as a .zs file (file type Zantiks software reads), choose the Save File As option in the right-click dialogue box. Clicking on the script name hyperlink will open a read-only version of the script.
Script download: raw_xy_all_data.zs
Assets
You will need to upload the appropriate asset into the Asset directory on your Zantiks Control Console and ensure the correct asset name is in the LOAD(DETECTORS,"name_of_asset") command in the script.
See the Calibrating your Zantiks unit page and Asset building in the MWP unit, Asset building in the AD unit page or Asset building in the LT unit page for details on how to create assets customised to your system.