anchor.diff:              (pathname-name (file file)))))
   
   (defclass frame ()
  -  ((id :initarg :id :accessor id)
  +  ((vicon-file :initarg :vicon-file :accessor vicon-file)
  +   (id :initarg :id :accessor id)
      (sub-id :initarg :sub-id :accessor sub-id)
      (points :initarg :points :accessor points))
     (:default-initargs
  +   :vicon-file (error "VICON-FILE required.")
      :id (error "ID required.")
      :sub-id NIL
      :points (make-hash-table :test 'eql)))
  
positive.code:   (: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))))
          (data (cddr data)))
      (loop for (marker . fields) in markers
            for point = (make-instance 'marker-point :marker marker)
  
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)
  