Releases: open-ephys/OpenEphys.ProbeInterface.NET
Releases · open-ephys/OpenEphys.ProbeInterface.NET
Release list
0.4.0
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
v0.2.0
v0.1.1
v0.1.0
What's Changed
- Refactor folder levels by @bparks13 in #2
- Update documentation by @bparks13 in #4
- Add Github Actions by @bparks13 in #6
- Modularize API and code review by @jonnew in #9
- Modify Actions by @bparks13 in #12
New Contributors
Full Changelog: https://github.com/open-ephys/OpenEphys.ProbeInterface.NET/commits/v0.1.0