public void ShouldConvertBackgroundUnitsWithMostRecentOutputParametersInIClamp( [Values(MultiClampInterop.OperatingMode.I0, MultiClampInterop.OperatingMode.IClamp)] MultiClampInterop.OperatingMode operatingMode ) { BackgroundTest(operatingMode, "A", MultiClampInterop.ExternalCommandSensitivityUnits.A_V); }
public void ShouldConvertOutputUnitsInIClamp( [Values(MultiClampInterop.OperatingMode.I0, MultiClampInterop.OperatingMode.IClamp)] MultiClampInterop.OperatingMode operatingMode ) { var c = new Controller(); var mc = new FakeMulticlampCommander(); var mcd = new MultiClampDevice(mc, c, new Dictionary <MultiClampInterop.OperatingMode, IMeasurement>() { { operatingMode, UNUSED_BACKGROUND } } ); var data = new MultiClampInterop.MulticlampData() { OperatingMode = operatingMode, ExternalCommandSensitivity = 2.5, ExternalCommandSensitivityUnits = MultiClampInterop.ExternalCommandSensitivityUnits.A_V }; mc.FireParametersChanged(DateTimeOffset.Now, data); var cmd = new Measurement(20, -12, "A"); var expected = operatingMode == MultiClampInterop.OperatingMode.I0 ? new Measurement(0, "V") : new Measurement(cmd.QuantityInBaseUnit / (decimal)data.ExternalCommandSensitivity, cmd.Exponent, "V"); var actual = MultiClampDevice.ConvertOutput(cmd, data); Assert.That(actual, Is.EqualTo(expected)); }
public void ShouldConvertOutputUnitsInVClamp( [Values(MultiClampInterop.OperatingMode.VClamp)] MultiClampInterop.OperatingMode operatingMode ) { var data = new MultiClampInterop.MulticlampData() { OperatingMode = operatingMode, ExternalCommandSensitivity = 2.5, ExternalCommandSensitivityUnits = MultiClampInterop.ExternalCommandSensitivityUnits.V_V }; var cmd = new Measurement(20, -3, "V"); var expected = new Measurement(cmd.QuantityInBaseUnit / (decimal)data.ExternalCommandSensitivity, cmd.Exponent, "V"); var actual = MultiClampDevice.ConvertOutput(cmd, data); Assert.That(actual, Is.EqualTo(expected)); }
public void ShouldNotApplyBackgroundToRunningStreams() { const string units = "V"; const MultiClampInterop.OperatingMode vclampMode = MultiClampInterop.OperatingMode.VClamp; const MultiClampInterop.OperatingMode iclampMode = MultiClampInterop.OperatingMode.IClamp; var c = new Controller(); var mc = new FakeMulticlampCommander(); var vclampBackground = new Measurement(2, -3, units); var background = new Dictionary <MultiClampInterop.OperatingMode, IMeasurement>() { { vclampMode, vclampBackground } }; var dataVClamp = new MultiClampInterop.MulticlampData() { OperatingMode = vclampMode, ExternalCommandSensitivity = 2.5, ExternalCommandSensitivityUnits = MultiClampInterop.ExternalCommandSensitivityUnits.V_V }; var daq = new DynamicMock(typeof(IDAQController)); var s = new DAQOutputStream("test", daq.MockInstance as IDAQController); var mcd = new MultiClampDevice(mc, c, background); mcd.BindStream(s); daq.ExpectAndReturn("get_Running", true); daq.ExpectNoCall("ApplyStreamBackground"); mc.FireParametersChanged(DateTimeOffset.Now, dataVClamp); daq.Verify(); }
private void BackgroundTest(MultiClampInterop.OperatingMode operatingMode, string units, MultiClampInterop.ExternalCommandSensitivityUnits extSensUnits) { var c = new Controller(); var mc = new FakeMulticlampCommander(); var bg = new Measurement(2, -3, units); var background = new Dictionary <MultiClampInterop.OperatingMode, IMeasurement>() { { operatingMode, bg } }; var mcd = new MultiClampDevice(mc, c, background); mcd.BindStream(new DAQOutputStream(UNUSED_NAME)); var data = new MultiClampInterop.MulticlampData() { OperatingMode = operatingMode, ExternalCommandSensitivity = 2.5, ExternalCommandSensitivityUnits = extSensUnits }; mc.FireParametersChanged(DateTimeOffset.Now, data); var expected = operatingMode == MultiClampInterop.OperatingMode.I0 ? new Measurement(0, "V") : new Measurement(bg.QuantityInBaseUnit / (decimal)data.ExternalCommandSensitivity, bg.Exponent, "V"); mc.FireParametersChanged(DateTimeOffset.Now.Subtract(TimeSpan.FromHours(1)), data); var actual = mcd.OutputBackground; Assert.That(actual, Is.EqualTo(expected)); }
/// <summary> /// Gets the device's background for a particular mode. /// </summary> /// <param name="operatingMode">Device operating mode</param> /// <returns>Background Measurement for the given mode.</returns> public IMeasurement BackgroudForMode(MultiClampInterop.OperatingMode operatingMode) { return(Backgrounds[operatingMode]); }
/// <summary> /// Sets the device background for a particular operating mode. /// </summary> /// <param name="operatingMode">Device operating mode</param> /// <param name="background">Desired background</param> public void SetBackgroundForMode(MultiClampInterop.OperatingMode operatingMode, IMeasurement background) { Backgrounds[operatingMode] = background; }
public void ShouldConvertInputUnitsInIClamp( [Values(MultiClampInterop.OperatingMode.IClamp, MultiClampInterop.OperatingMode.I0)] MultiClampInterop.OperatingMode operatingMode, [Values(new object[] { MultiClampInterop.ScaleFactorUnits.V_mV, MultiClampInterop.ScaleFactorUnits.V_uV, MultiClampInterop.ScaleFactorUnits.V_V })] MultiClampInterop.ScaleFactorUnits scaleFactorUnits, [Values(1, 2, 10, 20, 100)] double alpha ) { var data = new MultiClampInterop.MulticlampData() { OperatingMode = operatingMode, ScaleFactor = 2.5, ScaleFactorUnits = scaleFactorUnits, ScaledOutputSignal = MultiClampInterop.SignalIdentifier.AXMCD_OUT_PRI_IC_GLDR_V_MEMBx10, Alpha = alpha }; var cmd = new Measurement(20, -3, "V"); int exponent = 0; switch (scaleFactorUnits) { case MultiClampInterop.ScaleFactorUnits.V_V: exponent = -3; break; case MultiClampInterop.ScaleFactorUnits.V_mV: exponent = 0; break; case MultiClampInterop.ScaleFactorUnits.V_uV: exponent = 3; break; case MultiClampInterop.ScaleFactorUnits.V_A: exponent = -12; break; case MultiClampInterop.ScaleFactorUnits.V_mA: exponent = -9; break; case MultiClampInterop.ScaleFactorUnits.V_uA: exponent = -6; break; case MultiClampInterop.ScaleFactorUnits.V_nA: exponent = -3; break; case MultiClampInterop.ScaleFactorUnits.V_pA: exponent = 0; break; default: throw new ArgumentOutOfRangeException("scaleFactorUnits"); } var expected = new Measurement((cmd.QuantityInBaseUnit / (decimal)data.ScaleFactor / (decimal)alpha) * (decimal)Math.Pow(10, -exponent), -3, "V"); var actual = MultiClampDevice.ConvertInput(cmd, data); Assert.That(actual, Is.EqualTo(expected)); }