public MainWindowViewModel() { Dpp = new DppViewModel(); CompositeDisposable.Add(Dpp); dppListener = new PropertyChangedEventListener(Dpp); CompositeDisposable.Add(Dpp); dppListener.Add(() => Dpp.Spectrum, OnSpectrumUpdated); PeakFitting = new PeakFittingViewModel(); CompositeDisposable.Add(PeakFitting); peakFittingListener = new PropertyChangedEventListener(PeakFitting); CompositeDisposable.Add(peakFittingListener); peakFittingListener.Add(() => PeakFitting.Input, (s, e) => DoPeakFittingCommand.RaiseCanExecuteChanged()); Tube = new TubeControlViewModel(); CompositeDisposable.Add(Tube); SafetySignal = new SafetySignalViewModel(); CompositeDisposable.Add(SafetySignal); Camera = new CameraControlViewModel(); CompositeDisposable.Add(Camera); Reporting = new ReportingViewModel(); CompositeDisposable.Add(Reporting); selfListener = new PropertyChangedEventListener(this, RaiseCanDoChanged); CompositeDisposable.Add(selfListener); }
public void Test() { var pf = new PeakFittingViewModel { Input = TestSpectrum.Get(), SmoothingCutoffFrequency = 10, DataProcessRegion = new Region(2, 1200), BackgroundParameter0 = 100, BackgroundParameter1 = 0.5, Calibration = new EnergyCalibrationConstants { ChannelToEnergy = new Linear(20.01845971, -16.40027588), EnergyToResolution = new EnergyToPeakResolutionFunc(0.000083445639973, 8463.41525339) } }; var serializer = new XmlSerializer(typeof(Shell[])); var shells = (Shell[]) serializer.Deserialize( File.OpenRead(@"C:\Repository\Xbrt\XbrtTests\Spectral\shells.xml")); var expectedResults = new[] { new {Name = "Cu-K", Centroid = 8048.0, Intensity = 576.13}, new {Name = "Zn-K", Centroid = 8639.0, Intensity = 382.69}, new {Name = "Zr-K", Centroid = 15770.0, Intensity = 239.67}, //new {Number = 173, Name = "Ta-L", Centroid = 8146.10, Intensity = 0.00}, new {Name = "W-L", Centroid = 9671.0, Intensity = 0.00}, //new{Number = 180, Name = "Hg-L", Centroid = 9988.80, Intensity = 0.00}, new {Name = "Pb-L", Centroid = 12618.0, Intensity = 28.06} }; var lics = (from ss in shells.Where(s => expectedResults.Any(e => e.Name == s.Name)) let lis = (from lg in ss.LineGroups from l in lg.Lines select new LineInfo(lg.AtomicNumber, lg, l)) select new LineInfoCollection(ss.AtomicNumber, ss.Name, lis)).ToArray(); pf.LineInfo.AddRange(lics); pf.DoPeakFitting(1.0); var aSmoothed = pf.Smoothed; var eSmoothed = TestSpectrum.GetSmoothed(); Assert.IsNotNull(aSmoothed); foreach (var i in Enumerable.Range(0, 4096)) Assert.AreEqual(eSmoothed[i], aSmoothed[i], 0.001); var cases = (from n in pf.FittingResult from e in expectedResults where n.Line.Name == e.Name select new {Actual = n, Expected = e}).ToArray(); Assert.AreEqual(expectedResults.Count(), cases.Count()); foreach (var c in cases) { var a = c.Actual; var e = c.Expected; Assert.AreEqual(e.Name, a.Line.Name); Assert.AreEqual(e.Centroid, a.Line.Energy_eV, 0.01); Assert.AreEqual(e.Intensity, a.Intensity, 0.01); Console.WriteLine("{0}\t{1:F2}eV\t{2:F2}counts", a.Line.Name, a.Line.Energy_eV, a.Intensity); } }