public void ShouldPersistCompletedEpochs() { var c = new Controller(); bool evt = false; c.DAQController = new TestDAQController(); c.Clock = c.DAQController as IClock; var persistor = new FakeEpochPersistor(); c.SavedEpoch += (co, args) => { evt = true; }; var dev = new UnitConvertingExternalDevice(UNUSED_DEVICE_NAME, UNUSED_DEVICE_MANUFACTURER, UNUSED_BACKGROUND) { Controller = c, MeasurementConversionTarget = "V" }; var outStream = new DAQOutputStream("outStream") { MeasurementConversionTarget = "V" }; var inStream = new DAQInputStream("inStream") { MeasurementConversionTarget = "V" }; (c.DAQController as IMutableDAQController).AddStream(outStream); (c.DAQController as IMutableDAQController).AddStream(inStream); var srate = new Measurement(10, "Hz"); outStream.SampleRate = srate; inStream.SampleRate = srate; dev.BindStream(outStream); dev.BindStream(inStream); var e = new Epoch(UNUSED_PROTOCOL); var samples = new List <IMeasurement> { new Measurement(1.0m, "V"), new Measurement(1.0m, "V"), new Measurement(1.0m, "V") }; var data = new OutputData(samples, srate, true); e.Stimuli[dev] = new RenderedStimulus((string)"stimID", (IDictionary <string, object>) new Dictionary <string, object>(), (IOutputData)data); e.Responses[dev] = new Response(); e.Background[dev] = new Epoch.EpochBackground(new Measurement(0, "V"), srate); ((TestDAQController)c.DAQController).AddStreamMapping(outStream, inStream); c.RunEpoch(e, persistor); Assert.That(evt, Is.True.After(10 * 1000, 100)); Assert.That(persistor.PersistedEpochs, Has.Member(e)); }
/// <summary> /// Constructs an ExternalDevice referencing a Controller /// </summary> /// <param name="name">Device name</param> /// <param name="c">Controller to connect with this Device</param> /// <param name="background">Device's default output (background) value</param> public UnitConvertingExternalDevice(string name, string manufacturer, Controller c, Measurement background) : base(name, manufacturer, c, background) { }
public CoalescingDevice(string name, string manufacturer, Controller controller, Measurement background) : base(name, manufacturer, controller, background) { }
/// <summary> /// Constructs a new ExternalDevice instance with the given name and background. /// </summary> /// <param name="name">Device name</param> /// <param name="manufacturer">Device manufacturer</param> /// <param name="background">Device's default output (background) value</param> protected ExternalDeviceBase(string name, string manufacturer, Measurement background) : this(name, manufacturer, null, background) { }
/// <summary> /// Constructs an ExternalDevice referencing a Controller /// </summary> /// <param name="name">Device name</param> /// <param name="manufacturer">Device manufacturer</param> /// <param name="c">Controller to connect with this Device</param> /// <param name="background">Device's default output (background) value</param> protected ExternalDeviceBase(string name, string manufacturer, Controller c, Measurement background) : this(name, manufacturer, c) { Background = background; }
public void Setup() { const string protocolID = "Epoch.Fixture"; var parameters = new Dictionary <string, object>(); parameters[param1] = value1; parameters[param2] = value2; dev1 = new UnitConvertingExternalDevice(dev1Name, "DEVICECO", new Measurement(0, "V")); dev2 = new UnitConvertingExternalDevice(dev2Name, "DEVICECO", new Measurement(0, "V")); var stream1 = new DAQInputStream("Stream1"); var stream2 = new DAQInputStream("Stream2"); var stimParameters = new Dictionary <string, object>(); stimParameters[param1] = value1; stimParameters[param2] = value2; var srate = new Measurement(1000, "Hz"); List <Measurement> samples = Enumerable.Range(0, 10000).Select(i => new Measurement((decimal)Math.Sin((double)i / 100), "V")).ToList(); var stimData = new OutputData(samples, srate, false); var stim1 = new RenderedStimulus("RenderedStimulus", stimParameters, stimData); //.Data does not need to be persisted var stim2 = new RenderedStimulus("RenderedStimulus", stimParameters, stimData); //.Data does not need to be persisted var e = new Epoch(protocolID, parameters); e.Stimuli[dev1] = stim1; e.Stimuli[dev2] = stim2; DateTimeOffset start = DateTimeOffset.Parse("1/11/2011 6:03:29 PM -08:00"); // Do this to match the XML stored in the EpochXML.txt resource e.StartTime = Maybe <DateTimeOffset> .Yes(start); e.Background[dev1] = new Epoch.EpochBackground(new Measurement(0, "V"), new Measurement(1000, "Hz")); e.Background[dev2] = new Epoch.EpochBackground(new Measurement(1, "V"), new Measurement(1000, "Hz")); e.Responses[dev1] = new Response(); e.Responses[dev2] = new Response(); var streamConfig = new Dictionary <string, object>(); streamConfig[param1] = value1; var devConfig = new Dictionary <string, object>(); devConfig[param2] = value2; IInputData responseData1 = new InputData(samples, srate, start) .DataWithStreamConfiguration(stream1, streamConfig) .DataWithExternalDeviceConfiguration(dev1, devConfig); IInputData responseData2 = new InputData(samples, srate, start) .DataWithStreamConfiguration(stream2, streamConfig) .DataWithExternalDeviceConfiguration(dev2, devConfig); e.Responses[dev1].AppendData(responseData1); e.Responses[dev2].AppendData(responseData2); e.Keywords.Add(kw1); e.Keywords.Add(kw2); testEpoch = e; }
public void ShouldAllowNumericEpochParameters() { if (File.Exists("..\\..\\..\\ShouldAllowNumericEpochParameters.h5")) { File.Delete("..\\..\\..\\ShouldAllowNumericEpochParameters.h5"); } var gID = new Guid("{2F2719F7-4A8C-4C22-9698-BE999DBC5385}"); using (var exp = new EpochHDF5Persistor("..\\..\\..\\ShouldAllowNumericEpochParameters.h5", null, () => gID) ) { var time = new DateTimeOffset(1000, TimeSpan.Zero); var guid = new Guid("053C64D4-ED7A-4128-AA43-ED115716A97D"); var props = new Dictionary <string, object>(); props["int"] = 2; props["float"] = 2.0f; props["double"] = 2.0d; props["decimal"] = 2.0m; props["array"] = new[] { 1.0, 2.0, 3.0 }; props["short"] = (short)2; props["unit16"] = (UInt16)1; props["uint32"] = (UInt32)2; props["byte"] = (byte)1; props["bool"] = true; const string protocolID = "Epoch.Fixture"; Dictionary <string, object> parameters = props; dev1 = new UnitConvertingExternalDevice(dev1Name, "DEVICECO", new Measurement(0, "V")); dev2 = new UnitConvertingExternalDevice(dev2Name, "DEVICECO", new Measurement(0, "V")); var stream1 = new DAQInputStream("Stream1"); var stream2 = new DAQInputStream("Stream2"); var stimParameters = new Dictionary <string, object>(); stimParameters[param1] = value1; stimParameters[param2] = value2; var srate = new Measurement(1000, "Hz"); List <Measurement> samples = Enumerable.Range(0, 10000).Select(i => new Measurement((decimal)Math.Sin((double)i / 100), "V")). ToList(); var stimData = new OutputData(samples, srate, false); var stim1 = new RenderedStimulus("RenderedStimulus", stimParameters, stimData); //.Data does not need to be persisted var stim2 = new RenderedStimulus("RenderedStimulus", stimParameters, stimData); //.Data does not need to be persisted var e = new Epoch(protocolID, parameters); e.Stimuli[dev1] = stim1; e.Stimuli[dev2] = stim2; DateTimeOffset start = DateTimeOffset.Parse("1/11/2011 6:03:29 PM -08:00"); // Do this to match the XML stored in the EpochXML.txt resource e.StartTime = Maybe <DateTimeOffset> .Yes(start); e.Background[dev1] = new Epoch.EpochBackground(new Measurement(0, "V"), new Measurement(1000, "Hz")); e.Background[dev2] = new Epoch.EpochBackground(new Measurement(1, "V"), new Measurement(1000, "Hz")); e.Responses[dev1] = new Response(); e.Responses[dev2] = new Response(); var streamConfig = new Dictionary <string, object>(); streamConfig[param1] = value1; var devConfig = new Dictionary <string, object>(); devConfig[param2] = value2; IInputData responseData1 = new InputData(samples, srate, start) .DataWithStreamConfiguration(stream1, streamConfig) .DataWithExternalDeviceConfiguration(dev1, devConfig); IInputData responseData2 = new InputData(samples, srate, start) .DataWithStreamConfiguration(stream2, streamConfig) .DataWithExternalDeviceConfiguration(dev2, devConfig); e.Responses[dev1].AppendData(responseData1); e.Responses[dev2].AppendData(responseData2); e.Keywords.Add(kw1); e.Keywords.Add(kw2); exp.BeginEpochGroup("label", "source identifier", new[] { "keyword1", "keyword2" }, props, guid, time); exp.Serialize(e); exp.EndEpochGroup(); exp.Close(); } H5.Close(); Approvals.VerifyFile("..\\..\\..\\ShouldAllowNumericEpochParameters.h5"); }
public void ShouldAllowLongStringEpochParameters() { if (File.Exists("..\\..\\..\\ShouldAllowLongStringEpochParameters.h5")) { File.Delete("..\\..\\..\\ShouldAllowLongStringEpochParameters.h5"); } var gID = new Guid("{2F2719F7-4A8C-4C22-9698-BE999DBC5385}"); using ( var exp = new EpochHDF5Persistor("..\\..\\..\\ShouldAllowLongStringEpochParameters.h5", null, () => gID) ) { var time = new DateTimeOffset(1000, TimeSpan.Zero); var guid = new Guid("053C64D4-ED7A-4128-AA43-ED115716A97D"); var props = new Dictionary <string, object>(); props["key1"] = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"; //100 elements props["key2"] = 2; const string protocolID = "Epoch.Fixture"; Dictionary <string, object> parameters = props; dev1 = new UnitConvertingExternalDevice(dev1Name, "DEVICECO", new Measurement(0, "V")); dev2 = new UnitConvertingExternalDevice(dev2Name, "DEVICECO", new Measurement(0, "V")); var stream1 = new DAQInputStream("Stream1"); var stream2 = new DAQInputStream("Stream2"); var stimParameters = new Dictionary <string, object>(); stimParameters[param1] = value1; stimParameters[param2] = value2; var srate = new Measurement(1000, "Hz"); List <Measurement> samples = Enumerable.Range(0, 10000).Select(i => new Measurement((decimal)Math.Sin((double)i / 100), "mV")). ToList(); var stimData = new OutputData(samples, srate, false); var stim1 = new RenderedStimulus("RenderedStimulus", stimParameters, stimData); //.Data does not need to be persisted var stim2 = new RenderedStimulus("RenderedStimulus", stimParameters, stimData); //.Data does not need to be persisted var e = new Epoch(protocolID, parameters); e.Stimuli[dev1] = stim1; e.Stimuli[dev2] = stim2; DateTimeOffset start = DateTimeOffset.Parse("1/11/2011 6:03:29 PM -08:00"); // Do this to match the XML stored in the EpochXML.txt resource e.StartTime = Maybe <DateTimeOffset> .Yes(start); e.Background[dev1] = new Epoch.EpochBackground(new Measurement(0, "V"), new Measurement(1000, "Hz")); e.Background[dev2] = new Epoch.EpochBackground(new Measurement(1, "V"), new Measurement(1000, "Hz")); e.Responses[dev1] = new Response(); e.Responses[dev2] = new Response(); var streamConfig = new Dictionary <string, object>(); streamConfig[param1] = value1; var devConfig = new Dictionary <string, object>(); devConfig[param2] = value2; IInputData responseData1 = new InputData(samples, srate, start) .DataWithStreamConfiguration(stream1, streamConfig) .DataWithExternalDeviceConfiguration(dev1, devConfig); IInputData responseData2 = new InputData(samples, srate, start) .DataWithStreamConfiguration(stream2, streamConfig) .DataWithExternalDeviceConfiguration(dev2, devConfig); e.Responses[dev1].AppendData(responseData1); e.Responses[dev2].AppendData(responseData2); e.Keywords.Add(kw1); e.Keywords.Add(kw2); exp.BeginEpochGroup("label", "source identifier", new[] { "keyword1", "keyword2" }, props, guid, time); exp.Serialize(e); exp.EndEpochGroup(time.AddMilliseconds(100)); exp.Close(); } H5.Close(); var startInfo = new ProcessStartInfo(@"..\..\..\..\..\..\externals\HDF5\bin\h5dump", @" --xml ..\..\..\ShouldAllowLongStringEpochParameters.h5"); startInfo.RedirectStandardOutput = true; startInfo.UseShellExecute = false; Process proc = Process.Start(startInfo); Approvals.VerifyXml(proc.StandardOutput.ReadToEnd()); }
public void SetBackground(IExternalDevice dev, Measurement background, Measurement sampleRate) { Background[dev] = new EpochBackground(background, sampleRate); }
public void TestIdentityMeasurementConversion() { Measurement tedsHeight = new Measurement(74, "inches"); Assert.IsTrue(Converters.Convert(tedsHeight, "inches").Equals(new Measurement(74, "inches"))); }
public void TestExponentialConversion() { Converters.Register("m", "cm", delegate(IMeasurement m) { if (m.BaseUnit == "m") { // m are 100 cm double q = (double)(m.Quantity * 100); // but only if the exponents match; if they don't, then we need to adjust int exp = m.Exponent; if (exp < 0) { while (exp < 0) { q = q / 10; exp++; } } else if (exp > 0) { while (exp > 0) { q = q * 10; exp--; } } return(new Measurement((decimal)q, "cm")); } throw new Exception(String.Format("Illegal conversion: {0} to cm", m.BaseUnit)); }); Measurement oneMeter = new Measurement(1, "m"); // no exponent (oneMeter.Exponent = 0) Assert.That(Converters.Convert(oneMeter, "cm"), Is.EqualTo(new Measurement(100, "cm"))); Measurement tenMeter = new Measurement(1, 1, "m"); // exponent (tenMeter.Exponent = 1) Assert.That(Converters.Convert(tenMeter, "cm"), Is.EqualTo(new Measurement(1000, "cm"))); // Now go the other way Converters.Register("cm", "m", delegate(IMeasurement m) { if (m.BaseUnit == "cm") { // m are 100 cm double q = (double)(m.Quantity / 100); // but only if the exponents match; if they don't, then we need to adjust int exp = m.Exponent; if (exp < 0) { while (exp < 0) { q = q / 10; exp++; } } else if (exp > 0) { while (exp > 0) { q = q * 10; exp--; } } return(new Measurement((decimal)q, "m")); } throw new Exception(String.Format("Illegal conversion: {0} cm to m", m.BaseUnit)); }); var oneCentimeter = new Measurement(1, "cm"); // no exponent Assert.That(Converters.Convert(oneCentimeter, "m"), Is.EqualTo(new Measurement(0.01m, "m"))); var tenCentimeter = new Measurement(1, 1, "cm"); // no exponent (tenCentimeter.Exponent = 1) Assert.That(Converters.Convert(tenCentimeter, "m"), Is.EqualTo(new Measurement(0.1m, "m"))); }
public void BaseUnitQuantity() { IMeasurement m = new Measurement(100, -3, "V"); //100mV Assert.AreEqual(100 * Math.Pow(10, -3), m.QuantityInBaseUnit); }