Raw XY data tutorial


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.

Top

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.

Top

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
Top

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.