diff --git a/OpenEphys.Onix1/Bno055Data.cs b/OpenEphys.Onix1/Bno055Data.cs index 6766408..a4ceb50 100644 --- a/OpenEphys.Onix1/Bno055Data.cs +++ b/OpenEphys.Onix1/Bno055Data.cs @@ -10,8 +10,8 @@ namespace OpenEphys.Onix1 /// Produces a sequence of 3D orientation measurements produced by Bno055 9-axis inertial measurement unit. /// </summary> /// <remarks> - /// This data stream operator must be linked to an appropriate configuration, such as a <see cref="ConfigureBno055"/>, - /// in order to stream 3D orientation data. + /// This data IO operator must be linked to an appropriate configuration operator, such as a <see + /// cref="ConfigureBno055"/>, using a shared <c>DeviceName</c>. /// </remarks> [Description("Produces a sequence of 3D orientation measurements produced by a Bno055 9-axis inertial measurement unit.")] public class Bno055Data : Source<Bno055DataFrame> diff --git a/OpenEphys.Onix1/BreakoutAnalogInput.cs b/OpenEphys.Onix1/BreakoutAnalogInput.cs index 38550a9..6a320a3 100644 --- a/OpenEphys.Onix1/BreakoutAnalogInput.cs +++ b/OpenEphys.Onix1/BreakoutAnalogInput.cs @@ -12,6 +12,10 @@ namespace OpenEphys.Onix1 /// <summary> /// Produces a sequence of analog input frames from an ONIX breakout board. /// </summary> + /// <remarks> + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureBreakoutAnalogIO"/>, using a shared <c>DeviceName</c>. + /// </remarks> [Description("Produces a sequence of analog input frames from an ONIX breakout board.")] public class BreakoutAnalogInput : Source<BreakoutAnalogInputDataFrame> { diff --git a/OpenEphys.Onix1/BreakoutAnalogOutput.cs b/OpenEphys.Onix1/BreakoutAnalogOutput.cs index 72f0343..da3c609 100644 --- a/OpenEphys.Onix1/BreakoutAnalogOutput.cs +++ b/OpenEphys.Onix1/BreakoutAnalogOutput.cs @@ -10,6 +10,10 @@ namespace OpenEphys.Onix1 /// <summary> /// Sends analog output data to an ONIX breakout board. /// </summary> + /// <remarks> + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureBreakoutAnalogIO"/>, using a shared <c>DeviceName</c>. + /// </remarks> [Description("Sends analog output data to an ONIX breakout board.")] public class BreakoutAnalogOutput : Sink<Mat> { diff --git a/OpenEphys.Onix1/BreakoutDigitalInput.cs b/OpenEphys.Onix1/BreakoutDigitalInput.cs index 95cd64f..4f087be 100644 --- a/OpenEphys.Onix1/BreakoutDigitalInput.cs +++ b/OpenEphys.Onix1/BreakoutDigitalInput.cs @@ -10,8 +10,8 @@ namespace OpenEphys.Onix1 /// Produces a sequence of digital input data from an ONIX breakout board. /// </summary> /// <remarks> - /// This data stream operator must be linked to an appropriate configuration, such as a - /// <see cref="ConfigureBreakoutDigitalIO"/>, in order to stream data. + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureBreakoutDigitalIO"/>, using a shared <c>DeviceName</c>. /// </remarks> [Description("Produces a sequence of digital input frames from an ONIX breakout board.")] public class BreakoutDigitalInput : Source<BreakoutDigitalInputDataFrame> diff --git a/OpenEphys.Onix1/BreakoutDigitalOutput.cs b/OpenEphys.Onix1/BreakoutDigitalOutput.cs index 4c0674e..249916e 100644 --- a/OpenEphys.Onix1/BreakoutDigitalOutput.cs +++ b/OpenEphys.Onix1/BreakoutDigitalOutput.cs @@ -9,6 +9,10 @@ namespace OpenEphys.Onix1 /// <summary> /// Sends digital output data to an ONIX breakout board. /// </summary> + /// <remarks> + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureBreakoutDigitalIO"/>, using a shared <c>DeviceName</c>. + /// </remarks> [Description("Sends digital output data to an ONIX breakout board.")] public class BreakoutDigitalOutput : Sink<BreakoutDigitalPortState> { diff --git a/OpenEphys.Onix1/ConfigureBno055.cs b/OpenEphys.Onix1/ConfigureBno055.cs index d315a9b..07daf71 100644 --- a/OpenEphys.Onix1/ConfigureBno055.cs +++ b/OpenEphys.Onix1/ConfigureBno055.cs @@ -5,10 +5,10 @@ namespace OpenEphys.Onix1 { /// <summary> /// Configures a Bosch Bno055 9-axis inertial measurement unit (IMU). - /// </summary>C + /// </summary> /// <remarks> - /// This configuration operator can be linked to a <see cref="Bno055Data"/> instance to stream - /// orientation data from the IMU. + /// This configuration operator can be linked to a data IO operator, such as <see cref="Bno055Data"/>, + /// using a shared <c>DeviceName</c>. /// </remarks> [Description("Configures a Bosch Bno055 9-axis inertial measurement unit.")] [Editor("OpenEphys.Onix1.Design.Bno055Editor, OpenEphys.Onix1.Design", typeof(ComponentEditor))] diff --git a/OpenEphys.Onix1/ConfigureBreakoutAnalogIO.cs b/OpenEphys.Onix1/ConfigureBreakoutAnalogIO.cs index 3caa7ec..23ff229 100644 --- a/OpenEphys.Onix1/ConfigureBreakoutAnalogIO.cs +++ b/OpenEphys.Onix1/ConfigureBreakoutAnalogIO.cs @@ -7,6 +7,11 @@ namespace OpenEphys.Onix1 /// <summary> /// Configures the ONIX breakout board's analog inputs and outputs. /// </summary> + /// <remarks> + /// This configuration operator can be linked to data IO operators, such as <see + /// cref="BreakoutAnalogInput"/> and <see cref="BreakoutAnalogOutput"/>, using a shared + /// <c>DeviceName</c>. + /// </remarks> [TypeConverter(typeof(SortedPropertyConverter))] [Description("Configures the ONIX breakout board's analog inputs and outputs.")] public class ConfigureBreakoutAnalogIO : SingleDeviceFactory diff --git a/OpenEphys.Onix1/ConfigureBreakoutDigitalIO.cs b/OpenEphys.Onix1/ConfigureBreakoutDigitalIO.cs index a3943ab..5b22afd 100644 --- a/OpenEphys.Onix1/ConfigureBreakoutDigitalIO.cs +++ b/OpenEphys.Onix1/ConfigureBreakoutDigitalIO.cs @@ -6,6 +6,11 @@ namespace OpenEphys.Onix1 /// <summary> /// Configures the ONIX breakout board's digital inputs and outputs. /// </summary> + /// <remarks> + /// This configuration operator can be linked to data IO operators, such as <see + /// cref="BreakoutDigitalInput"/> and <see cref="BreakoutDigitalOutput"/>, using a shared + /// <c>DeviceName</c>. + /// </remarks> [Description("onfigures the ONIX breakout board's digital inputs and outputs.")] public class ConfigureBreakoutDigitalIO : SingleDeviceFactory { diff --git a/OpenEphys.Onix1/ConfigureHarpSyncInput.cs b/OpenEphys.Onix1/ConfigureHarpSyncInput.cs index 7f4a4a6..cad062d 100644 --- a/OpenEphys.Onix1/ConfigureHarpSyncInput.cs +++ b/OpenEphys.Onix1/ConfigureHarpSyncInput.cs @@ -9,6 +9,10 @@ namespace OpenEphys.Onix1 /// </summary> /// <remarks> /// <para> + /// This configuration operator can be linked to a data IO operator, such as <see + /// cref="HarpSyncInput"/>, using a shared <c>DeviceName</c>. + /// </para> + /// <para> /// Harp is a standard for asynchronous real-time data acquisition and experimental /// control in neuroscience. It includes a clock synchronization protocol which allows /// Harp devices to be connected to a shared clock line and continuously self-synchronize diff --git a/OpenEphys.Onix1/ConfigureHeadstage64ElectricalStimulator.cs b/OpenEphys.Onix1/ConfigureHeadstage64ElectricalStimulator.cs index 19867e0..5e61852 100644 --- a/OpenEphys.Onix1/ConfigureHeadstage64ElectricalStimulator.cs +++ b/OpenEphys.Onix1/ConfigureHeadstage64ElectricalStimulator.cs @@ -7,10 +7,9 @@ namespace OpenEphys.Onix1 /// Configures a headstage-64 onboard electrical stimulator. /// </summary> /// <remarks> - /// This configuration operator can be linked to a <see cref="Headstage64ElectricalStimulatorTrigger"/> - /// 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 data IO operator, such as <see + /// cref="Headstage64ElectricalStimulatorTrigger"/>, using a shared + /// <c>DeviceName</c>. /// </remarks> [Description("Configures a headstage-64 onboard electrical stimulator.")] public class ConfigureHeadstage64ElectricalStimulator : SingleDeviceFactory diff --git a/OpenEphys.Onix1/ConfigureHeadstage64OpticalStimulator.cs b/OpenEphys.Onix1/ConfigureHeadstage64OpticalStimulator.cs index a85139f..9004f09 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. /// </summary> /// <remarks> - /// This configuration class can be linked to a <see cref="Headstage64OpticalStimulatorTrigger"/> 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 operator can be linked to a data IO operator, such as <see + /// cref="Headstage64OpticalStimulatorTrigger"/>, using a shared + /// <c>DeviceName</c>. /// </remarks> [Description("Configures a headstage-64 dual-channel optical stimulator.")] public class ConfigureHeadstage64OpticalStimulator : SingleDeviceFactory diff --git a/OpenEphys.Onix1/ConfigureHeartbeat.cs b/OpenEphys.Onix1/ConfigureHeartbeat.cs index e304fdf..b612a8f 100644 --- a/OpenEphys.Onix1/ConfigureHeartbeat.cs +++ b/OpenEphys.Onix1/ConfigureHeartbeat.cs @@ -8,11 +8,11 @@ namespace OpenEphys.Onix1 { /// <summary> /// Configures a heartbeat device. + /// </summary> /// <remarks> - /// This configuration operator can be linked to a <see cref="HeartbeatData"/> instance to stream - /// heartbeats from the acquisition system. + /// This configuration operator can be linked to a data IO operator, such as <see cref="HeartbeatData"/>, + /// using a shared <c>DeviceName</c>. /// </remarks> - /// </summary> [Description("Configures a heartbeat device.")] public class ConfigureHeartbeat : SingleDeviceFactory { diff --git a/OpenEphys.Onix1/ConfigureLoadTester.cs b/OpenEphys.Onix1/ConfigureLoadTester.cs index 7ee5ed7..55d7a1e 100644 --- a/OpenEphys.Onix1/ConfigureLoadTester.cs +++ b/OpenEphys.Onix1/ConfigureLoadTester.cs @@ -7,12 +7,15 @@ namespace OpenEphys.Onix1 { + // TODO: Add data IO operators, update XML comment to link to them (<see cref="LoadTesterData"/>) /// <summary> /// Configures a load tester device. /// </summary> /// <remarks> - /// The load tester device can be configured to produce data at user-settable size and rate - /// to stress test various communication links and test closed-loop response latency. + /// This configuration operator can be linked to a data IO operator, such as LoadTesterData, + /// using a shared <c>DeviceName</c>. The load tester device can be configured + /// to produce data at user-settable size and rate to stress test various communication links and test + /// closed-loop response latency. /// </remarks> [Description("Configures a load testing device.")] public class ConfigureLoadTester : SingleDeviceFactory diff --git a/OpenEphys.Onix1/ConfigureMemoryMonitor.cs b/OpenEphys.Onix1/ConfigureMemoryMonitor.cs index 9ebc941..be7cb56 100644 --- a/OpenEphys.Onix1/ConfigureMemoryMonitor.cs +++ b/OpenEphys.Onix1/ConfigureMemoryMonitor.cs @@ -8,19 +8,24 @@ namespace OpenEphys.Onix1 /// Configures a hardware memory monitor. /// </summary> /// <remarks> - /// The memory monitor produces periodic snapshots of the system's first in, first out (FIFO) data buffer. - /// This can be useful for: + /// This configuration operator can be linked to a data IO operator, such as <see + /// cref="MemoryMonitorData"/>, using a shared <c>DeviceName</c>.The memory + /// monitor produces periodic snapshots of the system's first in, first out (FIFO) data buffer. This can + /// be useful for: /// <list type="bullet"> /// <item> - /// <description>Ensuring that data is being read by the host PC quickly enough to prevent real-time delays or overflows. - /// In the case that the PC is not keeping up with data collection, FIFO memory use will increase monotonically.</description> + /// <description>Ensuring that data is being read by the host PC quickly enough to prevent real-time + /// delays or overflows. In the case that the PC is not keeping up with data collection, FIFO memory use + /// will increase monotonically.</description> /// </item> /// <item> - /// <description>Tuning the value of <see cref="StartAcquisition.ReadSize"/> to optimize real-time performance. - /// For optimal real-time performance, <see cref="StartAcquisition.ReadSize"/> should be as small as possible and the FIFO should be bypassed - /// (memory usage should remain at 0). However, these requirements are in conflict. The memory monitor provides a way to find the minimal value of - /// value of <see cref="StartAcquisition.ReadSize"/> that does not result in excessive FIFO data buffering. This tradeoff will depend on the - /// bandwidth of data being acquired, the performance of the host PC, and downstream real-time processing.</description> + /// <description>Tuning the value of <see cref="StartAcquisition.ReadSize"/> to optimize real-time + /// performance. For optimal real-time performance, <see cref="StartAcquisition.ReadSize"/> should be as + /// small as possible and the FIFO should be bypassed (memory usage should remain at 0). However, these + /// requirements are in conflict. The memory monitor provides a way to find the minimal value of value of + /// <see cref="StartAcquisition.ReadSize"/> that does not result in excessive FIFO data buffering. This + /// tradeoff will depend on the bandwidth of data being acquired, the performance of the host PC, and + /// downstream real-time processing.</description> /// </item> /// </list> /// </remarks> diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV1e.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV1e.cs index 5b52796..353e618 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV1e.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV1e.cs @@ -9,6 +9,10 @@ namespace OpenEphys.Onix1 /// <summary> /// Configures a NeuropixelsV1e device. /// </summary> + /// <remarks> + /// This configuration operator can be linked to a data IO operator, such as <see cref="NeuropixelsV1eData"/>, + /// using a shared <c>DeviceName</c>. + /// </remarks> [Description("Configures a NeuropixelsV1e device.")] [Editor("OpenEphys.Onix1.Design.NeuropixelsV1eEditor, OpenEphys.Onix1.Design", typeof(ComponentEditor))] public class ConfigureNeuropixelsV1e : SingleDeviceFactory diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV1eBno055.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV1eBno055.cs index 31debfc..e77332c 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV1eBno055.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV1eBno055.cs @@ -6,6 +6,10 @@ namespace OpenEphys.Onix1 /// <summary> /// Configures a NeuropixelsV1eBno055 device. /// </summary> + /// <remarks> + /// This configuration operator can be linked to a data IO operator, such as <see + /// cref="NeuropixelsV1eBno055Data"/>, using a shared <c>DeviceName</c>. + /// </remarks> [Description("Configures a NeuropixelsV1eBno055 device.")] [Editor("OpenEphys.Onix1.Design.NeuropixelsV1eBno055Editor, OpenEphys.Onix1.Design", typeof(ComponentEditor))] public class ConfigureNeuropixelsV1eBno055 : SingleDeviceFactory diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV2e.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV2e.cs index 4947229..418ea69 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV2e.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV2e.cs @@ -293,7 +293,7 @@ static class NeuropixelsV2e public const byte ProbeBSelected = 0b1001_1001; public const int FramesPerSuperFrame = 16; - public const int ADCsPerProbe = 24; + public const int AdcsPerProbe = 24; public const int ChannelCount = 384; public const int FrameWords = 36; // TRASH TRASH TRASH 0 ADC0 ADC8 ADC16 0 ADC1 ADC9 ADC17 0 ... ADC7 ADC15 ADC23 0 diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV2eBeta.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV2eBeta.cs index 6d20ae3..512b769 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV2eBeta.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV2eBeta.cs @@ -9,6 +9,10 @@ namespace OpenEphys.Onix1 /// <summary> /// Configures a NeuropixelsV2eBeta device. /// </summary> + /// <remarks> + /// This configuration operator can be linked to a data IO operator, such as <see + /// cref="NeuropixelsV2eData"/>, using a shared <c>DeviceName</c>. + /// </remarks> [Description("Configures a NeuropixelsV2eBeta device.")] [Editor("OpenEphys.Onix1.Design.NeuropixelsV2eEditor, OpenEphys.Onix1.Design", typeof(ComponentEditor))] public class ConfigureNeuropixelsV2eBeta : SingleDeviceFactory, IConfigureNeuropixelsV2 diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV2eBno055.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV2eBno055.cs index 506c7f1..4db722f 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV2eBno055.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV2eBno055.cs @@ -6,6 +6,10 @@ namespace OpenEphys.Onix1 /// <summary> /// Configures a NeuropixelsV2eBno055 device. /// </summary> + /// <remarks> + /// This configuration operator can be linked to a data IO operator, such as <see + /// cref="NeuropixelsV2eBno055Data"/>, using a shared <c>DeviceName</c>. + /// </remarks> [Editor("OpenEphys.Onix1.Design.NeuropixelsV2eBno055Editor, OpenEphys.Onix1.Design", typeof(ComponentEditor))] [Description("Configures a NeuropixelsV2eBno055 device.")] public class ConfigureNeuropixelsV2eBno055 : SingleDeviceFactory diff --git a/OpenEphys.Onix1/ConfigureRhd2164.cs b/OpenEphys.Onix1/ConfigureRhd2164.cs index c6fdd87..f9ed506 100644 --- a/OpenEphys.Onix1/ConfigureRhd2164.cs +++ b/OpenEphys.Onix1/ConfigureRhd2164.cs @@ -7,8 +7,8 @@ namespace OpenEphys.Onix1 /// Configures an Intan Rhd2164 bioamplifier chip. /// </summary> /// <remarks> - /// This configuration operator can be linked to a <see cref="Rhd2164Data"/> instance to stream - /// electrophysiology data from the chip. + /// This configuration operator can be linked to a data IO operator, such as <see + /// cref="Rhd2164Data"/>, using a shared <c>DeviceName</c>. /// </remarks> [Description("Configures a Rhd2164 device.")] public class ConfigureRhd2164 : SingleDeviceFactory diff --git a/OpenEphys.Onix1/ConfigureTS4231V1.cs b/OpenEphys.Onix1/ConfigureTS4231V1.cs index 532b1d0..31a8634 100644 --- a/OpenEphys.Onix1/ConfigureTS4231V1.cs +++ b/OpenEphys.Onix1/ConfigureTS4231V1.cs @@ -8,8 +8,10 @@ namespace OpenEphys.Onix1 /// a pair of SteamVR V1 base stations. /// </summary> /// <remarks> - /// This configuration operator can be linked to a <see cref="TS4231V1PositionData"/> instance to stream 3D position data from - /// light-house receivers when SteamVR V1 base stations have been installed above the arena. + /// This configuration operator can be linked to a data IO operator, such as <see + /// cref="TS4231V1PositionData"/>, using a shared <c>DeviceName</c> to stream 3D + /// position data from light-house receivers when SteamVR V1 base stations have been installed above the + /// arena. /// </remarks> [Description("Configures a TS4231 receiver array.")] public class ConfigureTS4231V1 : SingleDeviceFactory diff --git a/OpenEphys.Onix1/DeviceFactory.cs b/OpenEphys.Onix1/DeviceFactory.cs index 443fbda..73bee4b 100644 --- a/OpenEphys.Onix1/DeviceFactory.cs +++ b/OpenEphys.Onix1/DeviceFactory.cs @@ -23,14 +23,13 @@ public abstract class DeviceFactory : Sink<ContextTask> } /// <summary> - /// Provides an abstract base class for configuration operators responsible for - /// registering a single device within the internal device manager. + /// Abstract base for configuration operators responsible for registering a single device within the + /// internal device manager. /// </summary> /// <remarks> - /// ONI devices usually require a specific sequence of configuration and parameterization - /// steps before they can be interacted with. The <see cref="SingleDeviceFactory"/> - /// provides a modular abstraction allowing flexible assembly and sequencing of - /// of all device-specific configuration code. + /// ONI devices usually require a specific sequence of configuration and parameterization steps before + /// they can be interacted with. The <see cref="SingleDeviceFactory"/> provides a modular abstraction + /// allowing flexible assembly and sequencing of of all device-specific configuration code. /// </remarks> public abstract class SingleDeviceFactory : DeviceFactory, IDeviceConfiguration { @@ -47,9 +46,11 @@ internal SingleDeviceFactory(Type deviceType) /// </summary> /// <remarks> /// The device name provides a unique, human-readable identifier that is used to link software - /// elements for configuration, control, and data streaming to hardware. This is often a one-to-one - /// representation of a single <see cref="oni.Device"/>, but can also represent abstract ONI device - /// aggregates or virtual devices. + /// elements for configuration, control, and data streaming to hardware. For instance, it can be used + /// to link configuration operators to data IO operators within a workflow. This value is + /// usually not set manually, but is assigned in a <see cref="MultiDeviceFactory"/> to correspond to a + /// fixed address with a piece of hardware such as a headstage. This address is used for software + /// communication. /// </remarks> [Description(DeviceNameDescription)] [Category(ConfigurationCategory)] @@ -59,8 +60,11 @@ internal SingleDeviceFactory(Type deviceType) /// Gets or sets the device address. /// </summary> /// <remarks> - /// This address provides a fully-qualified location of a device within the device table. This is often a one-to-one - /// representation of a <see cref="oni.Device.Address"/>, but can also represent abstract device addresses. + /// This is a fully-qualified numerical hardware address of a device within the device table produced + /// by an <see href="https://open-ephys.github.io/ONI/">Open Neuro Interface (ONI)</see> compliant + /// acquisition system. This value is usually not set manually, but is assigned in a <see + /// cref="MultiDeviceFactory"/> to correspond to a fixed address with a piece of hardware such as a + /// headstage. This address is used for hardware communication. /// </remarks> [Description(DeviceAddressDescription)] [Category(ConfigurationCategory)] @@ -70,8 +74,9 @@ internal SingleDeviceFactory(Type deviceType) /// Gets or sets the device identity. /// </summary> /// <remarks> - /// This type provides a device identity to each device within the device table. This is often a one-to-one - /// representation of a a <see cref="oni.Device.ID"/>, but can also represent abstract device identities. + /// This type provides a device identity to each device within the device table produced by an <see + /// href="https://open-ephys.github.io/ONI/">Open Neuro Interface (ONI)</see> compliant acquisition + /// system. /// </remarks> [Browsable(false)] public Type DeviceType { get; } diff --git a/OpenEphys.Onix1/HarpSyncInputData.cs b/OpenEphys.Onix1/HarpSyncInputData.cs index d149086..b0d6bd1 100644 --- a/OpenEphys.Onix1/HarpSyncInputData.cs +++ b/OpenEphys.Onix1/HarpSyncInputData.cs @@ -7,7 +7,8 @@ namespace OpenEphys.Onix1 { /// <summary> - /// Produces a sequence of Harp clock synchronization signals sent to the Harp input in the ONIX breakout board. + /// Produces a sequence of Harp clock synchronization signals sent to the Harp input in the ONIX breakout + /// board. /// </summary> /// <inheritdoc cref = "ConfigureHarpSyncInput"/> [Description("Produces a sequence of Harp clock synchronization signals sent to the Harp input in the ONIX breakout board.")] diff --git a/OpenEphys.Onix1/Headstage64ElectricalStimulatorTrigger.cs b/OpenEphys.Onix1/Headstage64ElectricalStimulatorTrigger.cs index 82ed572..4af7d24 100644 --- a/OpenEphys.Onix1/Headstage64ElectricalStimulatorTrigger.cs +++ b/OpenEphys.Onix1/Headstage64ElectricalStimulatorTrigger.cs @@ -14,8 +14,11 @@ namespace OpenEphys.Onix1 /// Controls a headstage-64 onboard electrical stimulus sequencer. /// </summary> /// <remarks> - /// This operator must be linked to an appropriate configuration, such as a <see cref="ConfigureHeadstage64ElectricalStimulator"/>, - /// in order to define and deliver electrical stimulation sequences. + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureHeadstage64ElectricalStimulator"/>, using a shared <c>DeviceName</c>. + /// Headstage-64's onboard electrical stimulator can be used to deliver current controlled + /// 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. /// </remarks> [Description("Controls a headstage-64 onboard electrical stimulus sequencer.")] public class Headstage64ElectricalStimulatorTrigger: Sink<bool> diff --git a/OpenEphys.Onix1/Headstage64OpticalStimulatorTrigger.cs b/OpenEphys.Onix1/Headstage64OpticalStimulatorTrigger.cs index b2a4f67..b1a5ebe 100644 --- a/OpenEphys.Onix1/Headstage64OpticalStimulatorTrigger.cs +++ b/OpenEphys.Onix1/Headstage64OpticalStimulatorTrigger.cs @@ -14,8 +14,11 @@ namespace OpenEphys.Onix1 /// Controls a headstage-64 onboard optical stimulus sequencer. /// </summary> /// <remarks> - /// This operator must be linked to an appropriate configuration, such as a <see cref="ConfigureHeadstage64OpticalStimulator"/>, - /// in order to define and deliver optical stimulation sequences. + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureHeadstage64OpticalStimulator"/>, using a shared <c>DeviceName</c>. + /// Headstage-64's onboard optical stimulator can be used 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. /// </remarks> [Description("Controls a headstage-64 onboard optical stimulus sequencer.")] public class Headstage64OpticalStimulatorTrigger : Sink<bool> diff --git a/OpenEphys.Onix1/HeartbeatData.cs b/OpenEphys.Onix1/HeartbeatData.cs index acab0da..8a4eabf 100644 --- a/OpenEphys.Onix1/HeartbeatData.cs +++ b/OpenEphys.Onix1/HeartbeatData.cs @@ -10,8 +10,8 @@ namespace OpenEphys.Onix1 /// Produces a sequence of heartbeat data frames. /// </summary> /// <remarks> - /// This data stream class must be linked to an appropriate configuration, such as a <see cref="ConfigureHeartbeat"/>, - /// in order to stream heartbeat data. + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureHeartbeat"/>, using a shared <c>DeviceName</c>. /// </remarks> [Description("Produces a sequence of heartbeat data frames.")] public class HeartbeatData : Source<HeartbeatDataFrame> diff --git a/OpenEphys.Onix1/MemoryMonitorData.cs b/OpenEphys.Onix1/MemoryMonitorData.cs index 61316de..cdeadc7 100644 --- a/OpenEphys.Onix1/MemoryMonitorData.cs +++ b/OpenEphys.Onix1/MemoryMonitorData.cs @@ -10,8 +10,8 @@ namespace OpenEphys.Onix1 /// Produces a sequence of memory usage data frames. /// </summary> /// <remarks> - /// This data stream operator must be linked to an appropriate configuration, such as a <see cref="ConfigureMemoryMonitor"/>, - /// in order to stream data. + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureMemoryMonitor"/>, using a shared <c>DeviceName</c>. /// </remarks> [Description("Produces a sequence of memory usage data frames.")] public class MemoryMonitorData : Source<MemoryMonitorDataFrame> diff --git a/OpenEphys.Onix1/MultiDeviceFactory.cs b/OpenEphys.Onix1/MultiDeviceFactory.cs index 4477261..218e399 100644 --- a/OpenEphys.Onix1/MultiDeviceFactory.cs +++ b/OpenEphys.Onix1/MultiDeviceFactory.cs @@ -42,8 +42,8 @@ internal MultiDeviceFactory() /// Gets or sets a unique device group name. /// </summary> /// <remarks> - /// A human-readable identifier that is used as a prefix for - /// the <see cref="SingleDeviceFactory.DeviceName"/> of each device in the the group. + /// A human-readable identifier that is used as a prefix for the <see + /// cref="SingleDeviceFactory.DeviceName"/> of each device in the the group. /// </remarks> [Description("The unique device group name.")] [Category(ConfigurationCategory)] diff --git a/OpenEphys.Onix1/NeuropixelsV1eBno055Data.cs b/OpenEphys.Onix1/NeuropixelsV1eBno055Data.cs index b5564d8..2e8fdd8 100644 --- a/OpenEphys.Onix1/NeuropixelsV1eBno055Data.cs +++ b/OpenEphys.Onix1/NeuropixelsV1eBno055Data.cs @@ -9,6 +9,10 @@ namespace OpenEphys.Onix1 /// <summary> /// Produces a sequence of <see cref="Bno055DataFrame"/> objects from a NeuropixelsV1e headstage. /// </summary> + /// <remarks> + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureNeuropixelsV1eBno055"/>, using a shared <c>DeviceName</c>. + /// </remarks> [Description("Produces a sequence of Bno055DataFrame objects from a NeuropixelsV1e headstage.")] public class NeuropixelsV1eBno055Data : Source<Bno055DataFrame> { diff --git a/OpenEphys.Onix1/NeuropixelsV1eData.cs b/OpenEphys.Onix1/NeuropixelsV1eData.cs index a2e7979..b996643 100644 --- a/OpenEphys.Onix1/NeuropixelsV1eData.cs +++ b/OpenEphys.Onix1/NeuropixelsV1eData.cs @@ -11,6 +11,10 @@ namespace OpenEphys.Onix1 /// <summary> /// Produces a sequence of <see cref="NeuropixelsV1eDataFrame"/>s from a NeuropixelsV1e headstage. /// </summary> + /// <remarks> + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureNeuropixelsV1e"/>, using a shared <c>DeviceName</c>. + /// </remarks> [Description("Produces a sequence of NeuropixelsV1eDataFrame objects from a NeuropixelsV1e headstage.")] public class NeuropixelsV1eData : Source<NeuropixelsV1eDataFrame> { diff --git a/OpenEphys.Onix1/NeuropixelsV2eBetaData.cs b/OpenEphys.Onix1/NeuropixelsV2eBetaData.cs index 4861d05..d6654a6 100644 --- a/OpenEphys.Onix1/NeuropixelsV2eBetaData.cs +++ b/OpenEphys.Onix1/NeuropixelsV2eBetaData.cs @@ -11,6 +11,10 @@ namespace OpenEphys.Onix1 /// <summary> /// Produces a sequence of <see cref="NeuropixelsV2eBetaDataFrame"/> objects from a NeuropixelsV2eBeta headstage. /// </summary> + /// <remarks> + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureNeuropixelsV2eBeta"/>, using a shared <c>DeviceName</c>. + /// </remarks> [Description("Produces a sequence of NeuropixelsV2eDataFrame objects from a NeuropixelsV2e headstage.")] public class NeuropixelsV2eBetaData : Source<NeuropixelsV2eBetaDataFrame> { diff --git a/OpenEphys.Onix1/NeuropixelsV2eBno055Data.cs b/OpenEphys.Onix1/NeuropixelsV2eBno055Data.cs index 28b7955..79a3974 100644 --- a/OpenEphys.Onix1/NeuropixelsV2eBno055Data.cs +++ b/OpenEphys.Onix1/NeuropixelsV2eBno055Data.cs @@ -9,6 +9,10 @@ namespace OpenEphys.Onix1 /// <summary> /// Produces a sequence of <see cref="Bno055DataFrame"/> objects from a NeuropixelsV2e headstage. /// </summary> + /// <remarks> + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureNeuropixelsV2eBno055"/>, using a shared <c>DeviceName</c>. + /// </remarks> [Description("Produces a sequence of Bno055DataFrame objects from a NeuropixelsV2e headstage.")] public class NeuropixelsV2eBno055Data : Source<Bno055DataFrame> { diff --git a/OpenEphys.Onix1/NeuropixelsV2eData.cs b/OpenEphys.Onix1/NeuropixelsV2eData.cs index 4891b4e..f064918 100644 --- a/OpenEphys.Onix1/NeuropixelsV2eData.cs +++ b/OpenEphys.Onix1/NeuropixelsV2eData.cs @@ -11,6 +11,10 @@ namespace OpenEphys.Onix1 /// <summary> /// Produces a sequence of <see cref="NeuropixelsV2eDataFrame"/> objects from a NeuropixelsV2e headstage. /// </summary> + /// <remarks> + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureNeuropixelsV2e"/>, using a shared <c>DeviceName</c>. + /// </remarks> [Description("Produces a sequence of NeuropixelsV2eDataFrame objects from a NeuropixelsV2e headstage.")] public class NeuropixelsV2eData : Source<NeuropixelsV2eDataFrame> { @@ -24,12 +28,13 @@ public class NeuropixelsV2eData : Source<NeuropixelsV2eDataFrame> /// Gets or sets the buffer size. /// </summary> /// <remarks> - /// This property determines the number of super-frames that are buffered before data is propagated. A super-frame consists of 384 - /// channels from the spike-band and 32 channels from the LFP band. If this value is set to 30, then 30 super-frames, along with - /// corresponding clock values, will be collected and packed into each <see cref="NeuropixelsV2eDataFrame"/>. Because channels are - /// sampled at 30 kHz, this is equivalent to 1 millisecond of data from each channel. + /// This property determines the number of samples that are collected from each of the 384 ephys + /// channels before data is propagated. For instance, if this value is set to 30, then 384x30 samples, + /// along with 30 corresponding clock values, will be collected and packed into each <see + /// cref="NeuropixelsV2eDataFrame"/>. Because channels are sampled at 30 kHz, this is equivalent to 1 + /// millisecond of data from each channel. /// </remarks> - [Description("The number of samples collected for each channel that are used to create a single NeuropixelsV2eDataFrame.")] + [Description("The number of samples collected from each channel that are used to create a single NeuropixelsV2eDataFrame.")] [Category(DeviceFactory.ConfigurationCategory)] public int BufferSize { get; set; } = 30; @@ -41,9 +46,9 @@ public class NeuropixelsV2eData : Source<NeuropixelsV2eDataFrame> public NeuropixelsV2Probe ProbeIndex { get; set; } /// <summary> - /// Generates a sequence of <see cref="NeuropixelsV2eDataFrame"/> objects. + /// Generates a sequence of <see cref="NeuropixelsV2eDataFrame"/>s. /// </summary> - /// <returns>A sequence of <see cref="NeuropixelsV2eDataFrame"/> objects.</returns> + /// <returns>A sequence of <see cref="NeuropixelsV2eDataFrame"/>s.</returns> public unsafe override IObservable<NeuropixelsV2eDataFrame> Generate() { var bufferSize = BufferSize; diff --git a/OpenEphys.Onix1/NeuropixelsV2eDataFrame.cs b/OpenEphys.Onix1/NeuropixelsV2eDataFrame.cs index 00f5c22..3a3ccbc 100644 --- a/OpenEphys.Onix1/NeuropixelsV2eDataFrame.cs +++ b/OpenEphys.Onix1/NeuropixelsV2eDataFrame.cs @@ -39,9 +39,9 @@ internal static unsafe void CopyAmplifierBuffer(ushort* amplifierData, ushort[,] // The period of ADC data within data array is 36 words var adcDataOffset = i * NeuropixelsV2e.FrameWords; - for (int k = 0; k < NeuropixelsV2e.ADCsPerProbe; k++) + for (int k = 0; k < NeuropixelsV2e.AdcsPerProbe; k++) { - amplifierBuffer[RawToChannel[k, i], index] = (ushort)(gainCorrection * amplifierData[ADCIndices[k] + adcDataOffset]); + amplifierBuffer[RawToChannel[k, i], index] = (ushort)(gainCorrection * amplifierData[AdcIndicies[k] + adcDataOffset]); } } } @@ -50,7 +50,7 @@ internal static unsafe void CopyAmplifierBuffer(ushort* amplifierData, ushort[,] // First dimension: data index // Second dimension: frame index within super frame - static readonly int[] ADCIndices = { + static readonly int[] AdcIndicies = { 0, 1, 2, 4, 5, 6, 8, 9, 10, diff --git a/OpenEphys.Onix1/PortStatus.cs b/OpenEphys.Onix1/PortStatus.cs index 4be51a6..0587b9f 100644 --- a/OpenEphys.Onix1/PortStatus.cs +++ b/OpenEphys.Onix1/PortStatus.cs @@ -10,9 +10,8 @@ namespace OpenEphys.Onix1 /// Produces a sequence of port status information frames. /// </summary> /// <remarks> - /// This data stream operator must be linked to an appropriate headstage, - /// miniscope, etc. configuration whose communication is dictated by - /// a PortController. + /// This data IO operator must be linked to an appropriate headstage or miniscope configuration (e.g. <see + /// cref="ConfigureNeuropixelsV2eBeta"/>) using a shared <c>DeviceName</c>. /// </remarks> [Description("Produces a sequence of port status information.")] public class PortStatus : Source<PortStatusFrame> diff --git a/OpenEphys.Onix1/Rhd2164Data.cs b/OpenEphys.Onix1/Rhd2164Data.cs index 044a51a..3f3522f 100644 --- a/OpenEphys.Onix1/Rhd2164Data.cs +++ b/OpenEphys.Onix1/Rhd2164Data.cs @@ -13,8 +13,8 @@ namespace OpenEphys.Onix1 /// Produces a sequence of electrophysiology data frames from an Intan Rhd2164 bioacquisition chip. /// </summary> /// <remarks> - /// This data stream operator must be linked to an appropriate configuration, such as a <see cref="ConfigureRhd2164"/>, - /// in order to stream electrophysiology data. + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureRhd2164"/>, using a shared <c>DeviceName</c>. /// </remarks> [Description("Produces a sequence of electrophysiology data frames from an Intan Rhd2164 bioacquisition chip.")] public class Rhd2164Data : Source<Rhd2164DataFrame> diff --git a/OpenEphys.Onix1/TS4231V1Data.cs b/OpenEphys.Onix1/TS4231V1Data.cs index 2a635bf..3116ba8 100644 --- a/OpenEphys.Onix1/TS4231V1Data.cs +++ b/OpenEphys.Onix1/TS4231V1Data.cs @@ -11,14 +11,15 @@ namespace OpenEphys.Onix1 /// </summary> /// <remarks> /// <para> - /// This data stream class must be linked to an appropriate configuration, such as a <see cref="ConfigureTS4231V1"/>, - /// in order to stream 3D position data. + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureTS4231V1"/>, using a shared <c>DeviceName</c>. /// </para> /// <para> - /// The data produced by this class contains individual base station pulse/sweep codes and timing information. These data provide - /// rapid updates that constrain the possible position of a sensor and therefore can be combined with orientation information - /// in a downstream predictive model (e.g. Kalman filter) for high-accuracy and robust position tracking. To produce naïve - /// position estimates, use the <see cref="TS4231V1PositionData"/> operator instead of this one. + /// The data produced by this class contains individual base station pulse/sweep codes and timing + /// information. These data provide rapid updates that constrain the possible position of a sensor and + /// therefore can be combined with orientation information in a downstream predictive model (e.g. Kalman + /// filter) for high-accuracy and robust position tracking. To produce naïve position estimates, use the + /// <see cref="TS4231V1PositionData"/> operator instead of this one. /// </para> /// </remarks> [Description("Produces a sequence of decoded optical signals produced by a pair of SteamVR V1 base stations.")] diff --git a/OpenEphys.Onix1/TS4231V1PositionData.cs b/OpenEphys.Onix1/TS4231V1PositionData.cs index fedebda..77f602f 100644 --- a/OpenEphys.Onix1/TS4231V1PositionData.cs +++ b/OpenEphys.Onix1/TS4231V1PositionData.cs @@ -9,30 +9,33 @@ namespace OpenEphys.Onix1 { /// <summary> - /// Produces a sequence of 3D positions from an array of Triad Semiconductor TS4231 receivers beneath - /// a pair of SteamVR V1 base stations. + /// Produces a sequence of 3D positions from an array of Triad Semiconductor TS4231 receivers beneath a + /// pair of SteamVR V1 base stations. /// </summary> /// <remarks> /// <para> - /// This data stream class must be linked to an appropriate configuration, such as a <see cref="ConfigureTS4231V1"/>, - /// in order to stream data. + /// This data IO operator must be linked to an appropriate configuration, such as a <see + /// cref="ConfigureTS4231V1"/>, using a shared <c>DeviceName</c>. /// </para> /// <para> - /// The data produced by this class contains naïve geometric estimates of positions of photodiodes attached to each TS4231 chip. - /// This operator makes the following assumptions about the setup: + /// The data produced by this class contains naïve geometric estimates of positions of photodiodes + /// attached to each TS4231 chip. This operator makes the following assumptions about the setup: /// <list type="bullet"> /// <item><description>Two SteamVR V1 base stations are used.</description></item> - /// <item><description>The base stations have been synchronized with a patch cable and their modes set to ‘A’ and ‘b’, respectively.</description></item> + /// <item><description>The base stations have been synchronized with a patch cable and their modes set to + /// ‘A’ and ‘b’, respectively.</description></item> /// <item><description>The base stations are pointed in the same direction.</description></item> - /// <item><description>The Z-axis extends away the emitting face of lighthouses, X along the direction of the text on the back label, - /// and Y from bottom to top text on the back label.</description></item> + /// <item><description>The Z-axis extends away the emitting face of lighthouses, X along the direction of + /// the text on the back label, and Y from bottom to top text on the back label.</description></item> /// </list> - /// This operator collects a sequence of <see cref="oni.Frame"/> objects from each TS3231 receiver that are used to determine the ray from each - /// base station to the TS3231's photodiode. A simple geometric inversion is performed to determine the photodiodes 3D position from the values - /// <see cref="P"/> and <see cref="Q"/>. It does not use a predictive model or integrate data from an IMU and is therefore quite sensitive to - /// obstructions in and will require post-hoc processing to correct systematic errors due to optical aberrations and nonlinearities. The the - /// <see cref="TS4231V1Data"/> operator provides access to individual lighthouse signals that is useful for a creating more robust position - /// estimates using downstream processing. + /// This operator collects a sequence of <see cref="oni.Frame"/> objects from each TS3231 receiver that + /// are used to determine the ray from each base station to the TS3231's photodiode. A simple geometric + /// inversion is performed to determine the photodiodes 3D position from the values <see cref="P"/> and + /// <see cref="Q"/>. It does not use a predictive model or integrate data from an IMU and is therefore + /// quite sensitive to obstructions and will require post-hoc processing to correct systematic errors + /// due to optical aberrations and nonlinearities. The the <see cref="TS4231V1Data"/> operator provides + /// access to individual lighthouse signals that is useful for a creating more robust position estimates + /// using downstream processing. /// </para> /// </remarks> [Description("Produces a sequence of 3D positions from an array of Triad Semiconductor TS4231 receivers beneath a pair of SteamVR V1 base stations.")] @@ -48,8 +51,9 @@ public class TS4231V1PositionData : Source<TS4231V1PositionDataFrame> /// Gets or sets the position of the first base station in arbitrary units. /// </summary> /// <remarks> - /// The units used will determine the units of <see cref="TS4231V1PositionDataFrame.Position"/> and must match those used in <see cref="Q"/>. - /// Typically this value is used to define the origin and remains at (0, 0, 0). + /// The units used will determine the units of <see cref="TS4231V1PositionDataFrame.Position"/> and + /// must match those used in <see cref="Q"/>. Typically this value is used to define the origin and + /// remains at (0, 0, 0). /// </remarks> [Description("The position of the first base station in arbitrary units.")] [Category(DeviceFactory.ConfigurationCategory)] @@ -59,14 +63,16 @@ public class TS4231V1PositionData : Source<TS4231V1PositionDataFrame> /// Gets or sets the position of the second base station in arbitrary units. /// </summary> /// <remarks> - /// The units used will determine the units of <see cref="TS4231V1PositionDataFrame.Position"/> and must match those used in <see cref="P"/>. + /// The units used will determine the units of <see cref="TS4231V1PositionDataFrame.Position"/> and + /// must match those used in <see cref="P"/>. /// </remarks> [Description("The position of the second base station in arbitrary units.")] [Category(DeviceFactory.ConfigurationCategory)] public Point3d Q { get; set; } = new(1, 0, 0); /// <summary> - /// Generates a sequence of <see cref="TS4231V1PositionDataFrame"/> objects, each of which contains the 3D position of single photodiode. + /// Generates a sequence of <see cref="TS4231V1PositionDataFrame"/> objects, each of which contains + /// the 3D position of single photodiode. /// </summary> /// <returns>A sequence of <see cref="TS4231V1PositionDataFrame"/> objects.</returns> public unsafe override IObservable<TS4231V1PositionDataFrame> Generate()