Skip to content

FAQ and troubleshooting

Running

Which command do I use? stride tmaze for T-maze recordings with a pose and an ROI model; stride gait for gait from pose tracking alone (Home).

unknown setting(s) [...] or unknown step(s) [...]. A key in the config file, or a step name, is not one STRIDE knows. The message lists the valid ones (Configuration reference).

ERROR: config file not found: ... config.yaml from run_all.py. The repository ships no config.yaml. Copy config.example.yaml, edit its batches: section and pass it with --config (Stage-by-stage batch runs).

The run finished but N video(s) were left out. Each is listed with its reason in SUMMARY.md: no pose file, no ROI file, or an error in that clip. Fix the cause and run the same command again; finished work is not repeated. --strict makes a left-out video an error.

A second run does nothing. Finished steps are skipped when their inputs and settings are unchanged. --force redoes the analysis. To redo inference for a video, delete its pose or ROI file from the output folder.

N video(s) have no pose file: pose inference needs your trained pose model. STRIDE ships no models. Pass --pose-model (and --roi-model for stride tmaze) or set them in the config; or use --skip-inference to analyse only the videos that already have pose and ROI files. stride gait stops in the same way when none of the videos has a pose file and no pose model was given.

sleap-nn is not installed in this Python environment. The two inference steps need sleap-nn installed in the same environment as STRIDE; the analysis of existing pose and ROI files does not.

Scale

stride gait stops with no scale. There is no ROI to fall back on. Give --px-per-cm, or have a ChArUco board in view (Scale calibration).

only N usable ChArUco reading(s). Is the board in view during the first 10 s of the clips, flat and unobstructed, and does the board specification (squares, sizes, dictionary) match the print? scale/calibration_summary.txt lists the clips in which no board was found.

the readings spread by X %. The board or the camera moved between clips, or one reading is bad. Compare the _checkerboard.png images.

The px_per_cm column of the gait table is about 0.04. That column stores centimetres per pixel. The scale in px/cm is in scale/px_per_cm.json.

px_per_cm is 1.0 in the gait table. The scale of that clip could not be derived (no ROI file, no value given). Its centimetre values are invalid; the run warns about it. Fix the inputs and run again.

Decisions

correct_TF is empty. The rewarded arm of that trial is unknown: no metadata, or no row that matches the video. With day + mouse rows the video must be named Day<N>_<mouse>_Trial<T>; for any other name use a video column (Inputs).

Accuracy looks too low. Rows with ok == False carry correct_bin = 0 when the reward is known. Subset on ok first, and use decisions_clean.csv for choices. In the batch entry points (run_all.py) a trial without a reward row is also scored not correct.

ROI inference finds no frame for most clips of a day. Something covers a maze corner in the sampled frames. STRIDE then runs the whole video, and after that borrows the folder's consensus ROI. Check roi/roi_sources.csv and the montage under roi/roi_consensus_qc/ (Pose and ROI models).

The consensus ROI was refused. The detected ROIs of the folder differ by more than roi.drift_max_px (25 px): the maze or the camera moved within the session. Split the folder at the move, or raise the limit after looking at the overlays.

n_reversals is 1 on a trial where the mouse ran straight. That is how the count is coded (glossary).

Gait

Few strides survive the filters. The filters remove, in this order: every stride of a video whose mean keypoint confidence is not above 0.3; the first and the last stride of every video (a video with one or two strides keeps none); strides with a mean angular velocity outside -20 to +20 deg/s; and strides whose stride_length_cm has the other sign than the run's median. The run log prints how many strides each filter removed. The last filter assumes walking along the image x-axis; the run warns when a recording does not meet that, and STRIDE does not rotate the data.

Gait filtering stops with confidence merge matched 0 stems. The stride table and the per-video confidence table name the clips differently, so no stride could be matched to a confidence value (for example tables from two different runs, or pose files that carry another video name than the file on disk). Run the gait step again so that both tables are written by the same run. When only some strides are unmatched the run warns, counts them, and the confidence filter removes them.

Stride length is shorter than the distance covered on the ground. stride_length_cm is the paw's excursion relative to the body (Stride detection and gait measures).

Stride length differs between two cameras for the same mice. Expected. Scale and tracking noise differ by rig. Compare within rig or z-score within cohort (Statistics).

A keypoint is missing from my skeleton. stride gait stops before any analysis and prints what is missing and which nodes the pose file has. Map other names with keypoints:; the tail tip is optional (STRIDE Gait).

Pose inference is slow or stalls on a network share. Decode is CPU-bound and network filesystems add latency. Keep videos on local disk during inference, or at least run the workers on the machine that holds the data.

Scope

Can STRIDE score an elevated plus maze, Y-maze or open field? Gait: yes, with stride gait (Gait on a different maze). Decisions: only the T geometry is implemented.

Does STRIDE correct lens distortion? No. The distortion check reports it; undistort the videos first if it says they need it.