Exemple #1
0
        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);
            }
        }