private static IDictionary<string, object> MergeDeviceParametersIntoConfiguration( IDictionary<string, object> config, AxopatchInterop.AxopatchData deviceParameters) { var result = config == null ? new Dictionary<string, object>() : new Dictionary<string, object>(config); result["ExternalCommandSensitivity"] = deviceParameters.ExternalCommandSensitivity; result["ExternalCommandSensitivityUnits"] = deviceParameters.ExternalCommandSensitivityUnits.ToString(); result["Gain"] = deviceParameters.Gain; result["OperatingMode"] = deviceParameters.OperatingMode.ToString(); return result; }
private static string InputUnitsForMode(AxopatchInterop.OperatingMode mode) { switch (mode) { case AxopatchInterop.OperatingMode.Track: case AxopatchInterop.OperatingMode.VClamp: return "A"; case AxopatchInterop.OperatingMode.I0: case AxopatchInterop.OperatingMode.IClampNormal: case AxopatchInterop.OperatingMode.IClampFast: return "V"; default: throw new ArgumentOutOfRangeException("mode"); } }
public static IMeasurement ConvertOutput(IMeasurement sample, AxopatchInterop.AxopatchData deviceParams) { switch (deviceParams.OperatingMode) { case AxopatchInterop.OperatingMode.Track: case AxopatchInterop.OperatingMode.VClamp: if (String.CompareOrdinal(sample.BaseUnits, "V") != 0) { throw new ArgumentException("Sample units must be in Volts.", "sample"); } if (deviceParams.ExternalCommandSensitivityUnits != AxopatchInterop.ExternalCommandSensitivityUnits.V_V) { throw new AxopatchDeviceException("External command units are not V/V as expected for current device mode."); } break; case AxopatchInterop.OperatingMode.I0: case AxopatchInterop.OperatingMode.IClampNormal: case AxopatchInterop.OperatingMode.IClampFast: if (String.CompareOrdinal(sample.BaseUnits, "A") != 0) { throw new ArgumentException("Sample units must be in Amps.", "sample"); } if (deviceParams.ExternalCommandSensitivityUnits != AxopatchInterop.ExternalCommandSensitivityUnits.A_V && deviceParams.ExternalCommandSensitivityUnits != AxopatchInterop.ExternalCommandSensitivityUnits.OFF) { throw new AxopatchDeviceException("External command units are not A/V as expected for current device mode."); } break; default: throw new ArgumentOutOfRangeException(); } IMeasurement result; if (deviceParams.OperatingMode == AxopatchInterop.OperatingMode.I0 || deviceParams.OperatingMode == AxopatchInterop.OperatingMode.Track) { result = MeasurementPool.GetMeasurement(0, 0, "V"); } else { result = (decimal)deviceParams.ExternalCommandSensitivity == 0 ? MeasurementPool.GetMeasurement(sample.Quantity, sample.Exponent, "V") : MeasurementPool.GetMeasurement(sample.Quantity / (decimal)deviceParams.ExternalCommandSensitivity, sample.Exponent, "V"); } return result; }
private static int InputUnitsExponentForMode(AxopatchInterop.OperatingMode mode) { switch (mode) { case AxopatchInterop.OperatingMode.Track: case AxopatchInterop.OperatingMode.VClamp: return -12; //pA case AxopatchInterop.OperatingMode.I0: case AxopatchInterop.OperatingMode.IClampNormal: case AxopatchInterop.OperatingMode.IClampFast: return -3; //mV default: throw new ArgumentOutOfRangeException("mode"); } }
public static IMeasurement ConvertInput(IMeasurement sample, AxopatchInterop.AxopatchData deviceParams) { return MeasurementPool.GetMeasurement( (sample.QuantityInBaseUnits/(decimal) deviceParams.Gain) * 1000m, InputUnitsExponentForMode(deviceParams.OperatingMode), InputUnitsForMode(deviceParams.OperatingMode)); }