Skip to content

radiatR 0.1.2

Latest

Choose a tag to compare

@JohnKirwan JohnKirwan released this 21 Jul 15:49
· 10 commits to master since this release
c119d90

radiatR 0.1.2

Breaking changes

  • The ctrax loader dialect and its optional R.matlab dependency have been
    removed. .mat files are no longer supported; read_tracks(dialect = "ctrax")
    now errors as an unknown dialect. Pre-computed orientation angles remain
    supported through the general ellipse_axis heading rule on any column.
  • read_tracks() now fails on non-finite coordinate rows by default, reporting
    the affected row numbers and ids; pass on_invalid = "drop" to drop them with
    a warning instead of the previous silent drop (breaking).

Bug fixes

  • The Shiny app no longer shows a previous analysis's results after a new
    headings upload. In headings mode a failed file upload used to leave the
    earlier (e.g. example) headings in place, and the "example headings already
    loaded" shortcut could then display them as if they belonged to the file
    just selected. The upload now clears any prior analysis before reading and
    commits the parsed data only on success, and the shortcut to Results fires
    only for genuinely example-sourced headings.
  • c(Tracks, ...) now rejects trajectory ids that collide across the objects
    being combined, and errors when the inputs carry conflicting frame_rate,
    distance_scale, distance_unit, or normalize_xy metadata (including one
    input having it set and another not). Previously these were silently merged,
    discarding one object's calibration in favour of the other's, and could
    interleave rows from two different trajectories that happened to share an
    id. Per-id/per-run metadata (reference, trial_limits, sim_conditions,
    oob_points, oob_trials) is now merged/summed across all combined inputs
    instead of only the first object's being kept.
  • read_tracks() and read_tracks_dir() now preserve trajectory identity when
    importing multiple files. Previously, reading a character vector of paths with
    no id column (the common case, relying on id_from_filename = TRUE) silently
    collapsed every file into a single "(multiple)" trajectory whose rows were
    then interleaved by time across files. Each file now yields its own trajectory
    keyed by the file-name stem. A new id_collision = c("error", "namespace")
    argument controls what happens when a real id value appears under more than one
    file: "error" (the default) stops with a message naming the colliding id and
    files, and "namespace" prefixes every id with its file stem
    (file::id). Multi-file imports with no id column and id_from_filename = FALSE
    now fail with a clear error instead of the silent collapse, and duplicate
    (id, time) keys produced by combining files are reported rather than passed
    through.
  • read_tracks(..., time_type = "frames", fps = ) no longer converts frame
    indices to seconds twice. The time column is now kept as a raw frame index
    and elapsed_seconds() (and everything built on it: track_duration(),
    track_speed(), velocity, and turning-rate) performs the frame -> seconds
    division exactly once, on demand, using the stored frame_rate().
    Previously the loader divided by fps immediately and then stored the same
    fps as the frame rate, so downstream kinematics divided by fps a second
    time -- e.g. an expected 60 units/s speed came out as 3600 units/s. Loading
    with time_type = "seconds" no longer stores a spurious frame rate either.
  • wrappedcauchy_fit()'s convergence column now matches its documentation.
    circular::mle.wrappedcauchy() reports convergence as a logical, which the
    previous code passed through as.integer(), yielding 1 for a converged
    fit -- the opposite of the documented "0 = converged". The column is now
    0 when the fit converged and 1 when it did not, and the (incorrect)
    "optim return code" wording in the docs has been corrected.
  • Between-group tests (test_mean_directions(), test_concentration(),
    test_distributions()) now signal a structured radiatR_nonestimable
    condition (carrying method, group, n, and reason) for non-estimable inputs,
    so callers can distinguish expected non-estimable cases from bugs.

App

  • The app no longer assumes a capture rate of 30 fps. The frame-rate controls
    now start unset, and time/speed colouring, the kinematics plot and its
    downloads, and the generated kinematics code stay disabled until a positive
    finite frame rate is entered or carried by the loaded data. The app shows
    whether the active rate came from the data or was entered by the user, and
    downloaded kinematics code no longer emits a fabricated set_frame_rate(ts, 30) when no rate is set. Previously, uncalibrated numeric-frame data produced
    plausible-looking speed and turning-rate results based on the unsupported
    default.
  • Ingest failures now show the original exception (with affected rows/ids)
    under "Technical details" and no longer suppress ingest warnings; the
    group-comparison table shows the non-estimable reason instead of a blank dash
    and re-raises unexpected errors; downloads are gated (results_ok()) so a
    failed or partial run cannot emit an apparently-valid result.