Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
 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");
     }
 }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
 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");
     }
 }
Exemplo n.º 5
0
 public static IMeasurement ConvertInput(IMeasurement sample, AxopatchInterop.AxopatchData deviceParams)
 {
     return MeasurementPool.GetMeasurement(
         (sample.QuantityInBaseUnits/(decimal) deviceParams.Gain) * 1000m,
         InputUnitsExponentForMode(deviceParams.OperatingMode),
         InputUnitsForMode(deviceParams.OperatingMode));
 }