Skip to content

Releases: open-ephys/OpenEphys.ProbeInterface.NET

0.4.0

Choose a tag to compare

@jonnew jonnew released this 16 Jul 13:49
78f9de9

Library rewrite to bring it into alignment with probeinterface spec 0.3.x and to replace weakly-typed, mutation-heavy API with an immutable, strongly-typed design.

Breaking API changes

  • Contact changed from readonly struct to sealed class; PosX/PosY changed from float to double; PosZ (double?) added for 3D probe support
  • Contact.DeviceId and Contact.Index removed; channel mapping now lives exclusively on Probe.ChannelMap via ChannelWiring
  • Contact.ContactId/ShankId are now nullable (string?)
  • ContactAnnotations.cs removed; contact_annotations is now backed by an internal ContactAnnotationStore shared across all contacts on a probe
  • Contact now has GetAnnotation, SetAnnotation, RemoveAnnotation for per-contact typed annotation access
  • Probe parallel-array properties (ContactPositions, ContactPlaneAxes, ContactShapes, ContactShapeParams, DeviceChannelIndices, ContactIds, ShankIds) removed; all per-contact data is now accessed via Probe.Contacts
  • Probe static factory helpers (DefaultContactShapes, DefaultCircleParams, etc.) removed
  • ProbeAnnotations.Name renamed to ModelName to match JSON key "model_name"
  • ProbeAnnotations.AdditionalProperties made private; typed access via GetAnnotation, SetAnnotation, RemoveAnnotation, AnnotationKeys
  • ContactShapeParam shape properties changed from float? to double?; null shape params omitted from JSON (NullValueHandling.Ignore)
  • ProbeGroup.Validate() now only throws; it no longer mutates data
  • ProbeGroup.Normalize() removed; optional fields such as contact_plane_axes, device_channel_indices, contact_ids, and shank_ids are omitted from JSON when absent rather than defaulted
  • ProbeGroup.ForceContactIdsToZeroIndexed() removed; contact IDs are labels, not indices, and forcing them corrupted valid data
  • ProbeGroup.SetDefaultDeviceChannelIndicesIfMissing() removed; device_channel_indices is optional per the spec
  • ProbeGroup.GetContactIds(), GetDeviceChannelIndices(), GetContacts() removed

New API Surface

  • ChannelWiring static class: WireChannels, WireChannel, UnwireChannel, UnwireChannels with cross-probe uniqueness validation and rollback
  • ProbeGroup.GetChannelMap() returns a global channel -> (probe, contact) map
  • Probe.GetContactAnnotation, SetContactAnnotation, RemoveContactAnnotation for bulk parallel-array annotation access
  • Probe.ContactAnnotationKeys enumerates defined annotation keys
  • Probe.ChannelMap exposes the contact→channel mapping as a read-only dictionary; null means no channels assigned

Test Infrastructure

  • Test project, generated using claude code, added tests covering round-trips against all probeinterface_library fixtures, schema validation, channel wiring, probe/contact annotation API, and spec validation edge cases
  • probeinterface_library added as a git submodule for real-world round-trip and schema tests
  • probe.json.schema bundled as an embedded resource for schema validation
  • generate_fixtures.py added for regenerating synthetic test fixtures

v0.3.0

Choose a tag to compare

@bparks13 bparks13 released this 18 Dec 20:13
00f0e05

What's Changed

🐞 Bug Fixes

  • Ensure contact annotations use the correct Json Property name by @bparks13 in #17

Full Changelog: v0.2.0...v0.3.0

v0.2.0

Choose a tag to compare

@bparks13 bparks13 released this 07 Nov 20:58
8c51ac8

What's Changed

🐞 Bug Fixes

  • Add JsonProperty attributes to contact shape parameters by @bparks13 in #15

Full Changelog: v0.1.1...v0.2.0

v0.1.1

Choose a tag to compare

@bparks13 bparks13 released this 28 Aug 20:40
4b87cbc

What's Changed

  • Bump version to 0.1.1 by @bparks13 in #14
    • Removes extra NumberOfContacts field from being serialized

Full Changelog: v0.1.0...v0.1.1

v0.1.0

Choose a tag to compare

@bparks13 bparks13 released this 14 Aug 21:12
4f90c29

What's Changed

New Contributors

Full Changelog: https://github.com/open-ephys/OpenEphys.ProbeInterface.NET/commits/v0.1.0