From 344079ffcc5ba8b2998482cf67631a439b376e92 Mon Sep 17 00:00:00 2001 From: jonnew Date: Fri, 30 Aug 2024 18:05:36 -0400 Subject: [PATCH 1/2] Improve documentation for MutliDeviceFactories - Add features to class description in bullet list format. --- OpenEphys.Onix1/ConfigureBreakoutBoard.cs | 13 +++++ OpenEphys.Onix1/ConfigureHeadstage64.cs | 49 +++++++++++++------ ...onfigureHeadstage64ElectricalStimulator.cs | 18 ++++--- .../ConfigureHeadstage64OpticalStimulator.cs | 17 ++++--- .../ConfigureNeuropixelsV1eHeadstage.cs | 17 ++++++- .../ConfigureNeuropixelsV2eBetaHeadstage.cs | 15 ++++++ .../ConfigureNeuropixelsV2eHeadstage.cs | 15 ++++++ 7 files changed, 111 insertions(+), 33 deletions(-) diff --git a/OpenEphys.Onix1/ConfigureBreakoutBoard.cs b/OpenEphys.Onix1/ConfigureBreakoutBoard.cs index 923e8ac..49014e6 100644 --- a/OpenEphys.Onix1/ConfigureBreakoutBoard.cs +++ b/OpenEphys.Onix1/ConfigureBreakoutBoard.cs @@ -6,6 +6,19 @@ namespace OpenEphys.Onix1 /// /// Configures an ONIX breakout board. /// + /// + /// The ONIX breakout board is a general purpose interface for neural data acquisition. It provides the + /// following features on the headstage: + /// + /// 2x general purpose input ports for headstage, miniscopes, etc. + /// 12x configurable ±10V analog input/output channels sampled/updated at 100 kHz per + /// channel. + /// 8x digital inputs + /// 8x digital outputs + /// Time-stamped buttons for manual event logging + /// Dark mode for light-sensitive applications. + /// + /// [Description("Configures an ONIX breakout board.")] public class ConfigureBreakoutBoard : MultiDeviceFactory { diff --git a/OpenEphys.Onix1/ConfigureHeadstage64.cs b/OpenEphys.Onix1/ConfigureHeadstage64.cs index 89e0b41..986b220 100644 --- a/OpenEphys.Onix1/ConfigureHeadstage64.cs +++ b/OpenEphys.Onix1/ConfigureHeadstage64.cs @@ -7,6 +7,21 @@ namespace OpenEphys.Onix1 /// /// Configures an ONIX headstage-64 on the specified port. /// + /// + /// Headstage-64 is a 1.5g serialized, multifunction headstage for small animals. This headstage is + /// designed to function with tetrode microdrives. Alternatively it can be used with other passive probes + /// (e.g. silicon arrays, EEG/ECOG arrays, etc.). It provides the following features on the headstage: + /// + /// 64 analog ephys channels and 3 auxiliary channels sampled at 30 kHz per + /// channel. + /// A BNO055 9-axis IMU for real-time, 3D orientation tracking. + /// Three TS4231 light to digital converters for real-time, 3D position tracking with + /// HTC Vive base stations. + /// A single electrical stimulator (current controlled, +/-15V compliance, automatic + /// electrode discharge). + /// Two optical stimulators (800 mA peak current per channel). + /// + /// [Description("Configures an ONIX headstage-64 in the specified port.")] public class ConfigureHeadstage64 : MultiDeviceFactory { @@ -30,10 +45,11 @@ public class ConfigureHeadstage64 : MultiDeviceFactory /// public ConfigureHeadstage64() { - // WONTFIX: The issue with this headstage is that its locking voltage is far, far lower than the voltage required for full - // functionality. Locking occurs at around 2V on the headstage (enough to turn 1.8V on). Full functionality is at 5.0 volts. - // The FMC port voltage can only go down to 3.3V, which means that its very hard to find the true lowest voltage - // for a lock and then add a large offset to that. Fixing this requires a hardware change. + // WONTFIX: The issue with this headstage is that its locking voltage is far, far lower than the + // voltage required for full functionality. Locking occurs at around 2V on the headstage (enough + // to turn 1.8V on). Full functionality is at 5.0 volts. The FMC port voltage can only go down to + // 3.3V, which means that its very hard to find the true lowest voltage for a lock and then add a + // large offset to that. Fixing this requires a hardware change. Port = PortName.PortA; PortControl.HubConfiguration = HubConfiguration.Standard; } @@ -82,7 +98,8 @@ public ConfigureHeadstage64() /// Gets or sets the port. /// /// - /// The port is the physical connection to the ONIX breakout board and must be specified prior to operation. + /// The port is the physical connection to the ONIX breakout board and must be specified prior to + /// operation. /// [Description("Specifies the physical connection of the headstage to the ONIX breakout board.")] [Category(ConfigurationCategory)] @@ -107,15 +124,15 @@ public PortName Port /// /// /// - /// If defined, it will override automated voltage discovery and apply the specified voltage to the headstage. - /// If left blank, an automated headstage detection algorithm will attempt to communicate with the headstage and - /// apply an appropriate voltage for stable operation. Because ONIX allows any coaxial tether to be used, some of - /// which are thin enough to result in a significant voltage drop, its may be required to manually specify the - /// port voltage. + /// If defined, it will override automated voltage discovery and apply the specified voltage to the + /// headstage. If left blank, an automated headstage detection algorithm will attempt to communicate + /// with the headstage and apply an appropriate voltage for stable operation. Because ONIX allows any + /// coaxial tether to be used, some of which are thin enough to result in a significant voltage drop, + /// its may be required to manually specify the port voltage. /// /// - /// Warning: this device requires 5.5V to 6.0V, measured at the headstage, for proper operation. Supplying higher - /// voltages may result in damage. + /// Warning: this device requires 5.5V to 6.0V, measured at the headstage, for proper operation. + /// Supplying higher voltages may result in damage. /// /// [Description("If defined, it will override automated voltage discovery and apply the specified voltage" + @@ -142,10 +159,10 @@ class ConfigureHeadstage64PortController : ConfigurePortController { protected override bool ConfigurePortVoltage(DeviceContext device) { - // WONTFIX: It takes a huge amount of time to get to 0, almost 10 seconds. - // The best we can do at the moment is drive port voltage to minimum which - // is an active process and then settle from there to zero volts. This requires - // a hardware revision that discharges the headstage between cycles to fix. + // WONTFIX: It takes a huge amount of time to get to 0, almost 10 seconds. The best we can do + // at the moment is drive port voltage to minimum which is an active process and then settle + // from there to zero volts. This requires a hardware revision that discharges the headstage + // between cycles to fix. const uint MinVoltage = 33; const uint MaxVoltage = 60; const uint VoltageOffset = 34; diff --git a/OpenEphys.Onix1/ConfigureHeadstage64ElectricalStimulator.cs b/OpenEphys.Onix1/ConfigureHeadstage64ElectricalStimulator.cs index f3c91dc..19867e0 100644 --- a/OpenEphys.Onix1/ConfigureHeadstage64ElectricalStimulator.cs +++ b/OpenEphys.Onix1/ConfigureHeadstage64ElectricalStimulator.cs @@ -7,9 +7,10 @@ namespace OpenEphys.Onix1 /// Configures a headstage-64 onboard electrical stimulator. /// /// - /// This configuration operator can be linked to a instance to deliver - /// current controlled electrical micro-stimulation through a contact on the probe connector on the bottom of the headstage - /// or the corresponding contact on a compatible electrode interface board. + /// This configuration operator can be linked to a + /// instance to deliver current controlled electrical micro-stimulation through a contact on the probe + /// connector on the bottom of the headstage or the corresponding contact on a compatible electrode + /// interface board. /// [Description("Configures a headstage-64 onboard electrical stimulator.")] public class ConfigureHeadstage64ElectricalStimulator : SingleDeviceFactory @@ -26,12 +27,13 @@ public ConfigureHeadstage64ElectricalStimulator() /// Configure a headstage-64 onboard electrical stimulator. /// /// - /// This will schedule configuration actions to be applied by a instance - /// prior to data acquisition. + /// This will schedule configuration actions to be applied by a + /// instance prior to data acquisition. /// - /// A sequence of instances that holds configuration actions. - /// The original sequence modified by adding additional configuration actions required to configure a headstage-64 - /// onboard electrical stimulator. + /// A sequence of instances that holds configuration + /// actions. + /// The original sequence modified by adding additional configuration actions required to + /// configure a headstage-64 onboard electrical stimulator. public override IObservable Process(IObservable source) { var deviceName = DeviceName; diff --git a/OpenEphys.Onix1/ConfigureHeadstage64OpticalStimulator.cs b/OpenEphys.Onix1/ConfigureHeadstage64OpticalStimulator.cs index c64d703..a85139f 100644 --- a/OpenEphys.Onix1/ConfigureHeadstage64OpticalStimulator.cs +++ b/OpenEphys.Onix1/ConfigureHeadstage64OpticalStimulator.cs @@ -7,9 +7,9 @@ namespace OpenEphys.Onix1 /// Configures a headstage-64 dual-channel optical stimulator. /// /// - /// This configuration operator can be linked to a instance to drive current - /// through laser diodes or LEDs connected to two contacts on the probe connector on the bottom of the headstage - /// or the corresponding contacts on a compatible electrode interface board. + /// This configuration class can be linked to a instance + /// to drive current through laser diodes or LEDs connected to two contacts on the probe connector on the + /// bottom of the headstage or the corresponding contacts on a compatible electrode interface board. /// [Description("Configures a headstage-64 dual-channel optical stimulator.")] public class ConfigureHeadstage64OpticalStimulator : SingleDeviceFactory @@ -26,12 +26,13 @@ public ConfigureHeadstage64OpticalStimulator() /// Configure a headstage-64 dual-channel optical stimulator. /// /// - /// This will schedule configuration actions to be applied by a instance - /// prior to data acquisition. + /// This will schedule configuration actions to be applied by a + /// instance prior to data acquisition. /// - /// A sequence of instances that holds configuration actions. - /// The original sequence modified by adding additional configuration actions required to configure a - /// headstage-64 dual-channel optical stimulator. + /// A sequence of instances that holds configuration + /// actions. + /// The original sequence modified by adding additional configuration actions required to + /// configure a headstage-64 dual-channel optical stimulator. public override IObservable Process(IObservable source) { var deviceName = DeviceName; diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs index 37b8b1e..a92a413 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs @@ -7,7 +7,22 @@ namespace OpenEphys.Onix1 /// /// Configures a NeuropixelsV1e headstage on the specified port. /// - [Description("Configures a NeuropixelsV1e headstage on the specified port.")] + /// + /// Headstage-NeuropixelsV1e is a 0.68g serialized, multifunction headstage for small animals. This + /// headstage is designed to function with IMEC Neuropixels V1 probes. It provides the following features + /// on the headstage: + /// + /// A single IMEC Neuropixels 1.0 probe that features: + /// + /// A single 1 cm long shank probe with a 70 x 24 µm shank cross-section. + /// 960-electrode low-impedance TiN electodes. + /// 384 parallel, dual-band (AP, LFP), low-noise recording channels. + /// + /// + /// A BNO055 9-axis IMU for real-time, 3D orientation tracking. + /// + /// + [Description("Configures a NeuropixelsV1e headstage.")] [Editor("OpenEphys.Onix1.Design.NeuropixelsV1eHeadstageEditor, OpenEphys.Onix1.Design", typeof(ComponentEditor))] public class ConfigureNeuropixelsV1eHeadstage : MultiDeviceFactory { diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV2eBetaHeadstage.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV2eBetaHeadstage.cs index d9c61a0..7365a9f 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV2eBetaHeadstage.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV2eBetaHeadstage.cs @@ -6,6 +6,21 @@ namespace OpenEphys.Onix1 /// /// Configures a NeuropixelsV2eBeta headstage on the specified port. /// + /// + /// Headstage-NeuropixelsV2e-Beta is a 0.64g serialized, multifunction headstage for small animals. This + /// headstage is designed to function with IMEC Neuropixels V2Beta probes. It provides the following features + /// on the headstage: + /// + /// Dual IMEC Neuropixels 2.0-Beta probes, each of which features: + /// + /// 4x silicon shanks with a 70 x 24 µm cross-section. + /// 1280 electrodes low-impedance TiN electrodes per shank. + /// 384 parallel, full-band (AP, LFP), low-noise recording channels. + /// + /// + /// A BNO055 9-axis IMU for real-time, 3D orientation tracking. + /// + /// [Description("Configures a NeuropixelsV2eBeta headstage.")] [Editor("OpenEphys.Onix1.Design.NeuropixelsV2eHeadstageEditor, OpenEphys.Onix1.Design", typeof(ComponentEditor))] public class ConfigureNeuropixelsV2eBetaHeadstage : MultiDeviceFactory diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV2eHeadstage.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV2eHeadstage.cs index 83aca1a..a04018f 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV2eHeadstage.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV2eHeadstage.cs @@ -6,6 +6,21 @@ namespace OpenEphys.Onix1 /// /// Configures a NeuropixelsV2e headstage on the specified port. /// + /// + /// Headstage-NeuropixelsV2e is a 0.64g serialized, multifunction headstage for small animals. This + /// headstage is designed to function with IMEC Neuropixels V2 probes. It provides the following features + /// on the headstage: + /// + /// Dual IMEC Neuropixels 2.0 probes, each of which features: + /// + /// Either 1x or 4x silicon shanks with a 70 x 24 µm cross-section. + /// 1280 electrodes low-impedance TiN electrodes per shank. + /// 384 parallel, full-band (AP, LFP), low-noise recording channels. + /// + /// + /// A BNO055 9-axis IMU for real-time, 3D orientation tracking. + /// + /// [Editor("OpenEphys.Onix1.Design.NeuropixelsV2eHeadstageEditor, OpenEphys.Onix1.Design", typeof(ComponentEditor))] [Description("Configures a NeuropixelsV2e headstage on the specified port.")] public class ConfigureNeuropixelsV2eHeadstage : MultiDeviceFactory From 1cd8bcc97d999fc46831900d299b5979be784314 Mon Sep 17 00:00:00 2001 From: jonnew Date: Thu, 5 Sep 2024 12:46:41 -0400 Subject: [PATCH 2/2] Address review comments --- OpenEphys.Onix1/ConfigureBreakoutBoard.cs | 4 ++-- OpenEphys.Onix1/ConfigureHeadstage64.cs | 4 ++-- OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs | 9 ++++----- OpenEphys.Onix1/ConfigureNeuropixelsV2eBetaHeadstage.cs | 7 +++---- OpenEphys.Onix1/ConfigureNeuropixelsV2eHeadstage.cs | 7 +++---- 5 files changed, 14 insertions(+), 17 deletions(-) diff --git a/OpenEphys.Onix1/ConfigureBreakoutBoard.cs b/OpenEphys.Onix1/ConfigureBreakoutBoard.cs index 49014e6..ff95ca1 100644 --- a/OpenEphys.Onix1/ConfigureBreakoutBoard.cs +++ b/OpenEphys.Onix1/ConfigureBreakoutBoard.cs @@ -15,8 +15,8 @@ namespace OpenEphys.Onix1 /// channel. /// 8x digital inputs /// 8x digital outputs - /// Time-stamped buttons for manual event logging - /// Dark mode for light-sensitive applications. + /// Hardware time-stamped buttons for manual event logging + /// Indicator LEDs with dark mode for light-sensitive applications. /// /// [Description("Configures an ONIX breakout board.")] diff --git a/OpenEphys.Onix1/ConfigureHeadstage64.cs b/OpenEphys.Onix1/ConfigureHeadstage64.cs index 986b220..c6b4d07 100644 --- a/OpenEphys.Onix1/ConfigureHeadstage64.cs +++ b/OpenEphys.Onix1/ConfigureHeadstage64.cs @@ -9,8 +9,8 @@ namespace OpenEphys.Onix1 /// /// /// Headstage-64 is a 1.5g serialized, multifunction headstage for small animals. This headstage is - /// designed to function with tetrode microdrives. Alternatively it can be used with other passive probes - /// (e.g. silicon arrays, EEG/ECOG arrays, etc.). It provides the following features on the headstage: + /// designed to function with passive probes such as tetrode microdrives, silicon arrays, EEG/ECOG arrays, + /// etc. It provides the following features: /// /// 64 analog ephys channels and 3 auxiliary channels sampled at 30 kHz per /// channel. diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs index a92a413..65999bf 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs @@ -8,14 +8,13 @@ namespace OpenEphys.Onix1 /// Configures a NeuropixelsV1e headstage on the specified port. /// /// - /// Headstage-NeuropixelsV1e is a 0.68g serialized, multifunction headstage for small animals. This - /// headstage is designed to function with IMEC Neuropixels V1 probes. It provides the following features - /// on the headstage: + /// The NeuropixeslV1e Headstage is a 0.68g serialized, multifunction headstage for small animals. This + /// headstage is designed to function with IMEC Neuropixels V1 probes. It provides the following features: /// - /// A single IMEC Neuropixels 1.0 probe that features: + /// Support for a single IMEC Neuropixels 1.0 probe that features: /// /// A single 1 cm long shank probe with a 70 x 24 µm shank cross-section. - /// 960-electrode low-impedance TiN electodes. + /// 960-electrode low-impedance TiN electrodes. /// 384 parallel, dual-band (AP, LFP), low-noise recording channels. /// /// diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV2eBetaHeadstage.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV2eBetaHeadstage.cs index 7365a9f..af8f06d 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV2eBetaHeadstage.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV2eBetaHeadstage.cs @@ -7,11 +7,10 @@ namespace OpenEphys.Onix1 /// Configures a NeuropixelsV2eBeta headstage on the specified port. /// /// - /// Headstage-NeuropixelsV2e-Beta is a 0.64g serialized, multifunction headstage for small animals. This - /// headstage is designed to function with IMEC Neuropixels V2Beta probes. It provides the following features - /// on the headstage: + /// The NeuropixelsV2e-Beta Headstage is a 0.64g serialized, multifunction headstage for small animals. This + /// headstage is designed to function with IMEC Neuropixels V2Beta probes. It provides the following features: /// - /// Dual IMEC Neuropixels 2.0-Beta probes, each of which features: + /// Support for dual IMEC Neuropixels 2.0-Beta probes, each of which features: /// /// 4x silicon shanks with a 70 x 24 µm cross-section. /// 1280 electrodes low-impedance TiN electrodes per shank. diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV2eHeadstage.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV2eHeadstage.cs index a04018f..1813c04 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV2eHeadstage.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV2eHeadstage.cs @@ -7,11 +7,10 @@ namespace OpenEphys.Onix1 /// Configures a NeuropixelsV2e headstage on the specified port. /// /// - /// Headstage-NeuropixelsV2e is a 0.64g serialized, multifunction headstage for small animals. This - /// headstage is designed to function with IMEC Neuropixels V2 probes. It provides the following features - /// on the headstage: + /// The NeuropixelsV2e Headstage is a 0.64g serialized, multifunction headstage for small animals. This + /// headstage is designed to function with IMEC Neuropixels V2 probes. It provides the following features: /// - /// Dual IMEC Neuropixels 2.0 probes, each of which features: + /// Support for dual IMEC Neuropixels 2.0 probes, each of which features: /// /// Either 1x or 4x silicon shanks with a 70 x 24 µm cross-section. /// 1280 electrodes low-impedance TiN electrodes per shank.