anchor.diff:    (:method ((metric (eql :m)) field)
       (parse-field-for-metric :float field)))
   
  -(defun parse-frame (data markers)
  -  (let ((frame (make-instance 'frame :id (parse-integer (first data))
  -                                     :sub-id (parse-integer (second data))))
  +(defun parse-frame (data markers vicon-file)
  +  (let ((frame (make-instance 'frame
  +                              :vicon-file vicon-file
  +                              :id (parse-integer (first data))
  +                              :sub-id (parse-integer (second data))))
           (data (cddr data)))
       (loop for (marker . fields) in markers
             for point = (make-instance 'marker-point :marker marker)
  
positive.code:   (print-unreadable-object (frame stream :type T)
      (format stream "~d~@[/~d~]"
              (id frame) (sub-id frame))))
  
  (defgeneric marker-point (name frame)
    (:method ((name string) (frame frame))
  
negative.code:              (setf (marker-point marker frame) point))
      frame))
  
  (defun parse-frames (data markers vicon-file)
    (let ((frames (make-array (length data) :adjustable T :fill-pointer 0)))
      (dolist (record data)
        (vector-push-extend (parse-frame (cl-ppcre:split "," record) markers vicon-file) frames))
      frames))
  
  (defun parse-vicon-file (pathname &key external-format)
  