private async void Trace_Click(object sender, RoutedEventArgs e) { if (m_SysConf.waveLimits == null) { return; } var PreparedWaves = m_SelectedWaves.GetWaveInRagne(m_SysConf.waveLimits); if (PreparedWaves.Length == 0) { return; } Computation c = new Computation(ref m_SysConf, PreparedWaves); c.Title = "XRay-tracing"; c.WaveProcessed += OnWaveProcessed; if (c.isOk == false) { return; } this.IsEnabled = false; c.Show(); CalculationProgressBar.Value = 0; CalculationProgressLabel.Content = "Tracing..."; try { bool res = await c.StartXRayTracing(); } catch (Exception exc) { Logger.Error("C Trace Exception. " + exc.Message + "\n" + exc.StackTrace); } c.Close(); PerformAnalis(PreparedWaves); this.IsEnabled = true; }
private async Task <bool> ProvideAdditionalApproximation(Wave[] waves) { m_AdditionalApproximation = new AdditionalApproximation(); m_AproximatedWavePoints = null; List <Wave> fit_waves = waves.ToList(); if (m_SysConf.UseBetterStatistic == true) { var waveSet = Averaging.GenerateWaveInRangeUniform(m_SysConf.waveLimits.min.lambda, m_SysConf.waveLimits.max.lambda, WAVE_COUNT); Computation computation_engine = null; computation_engine = computation_engine = new Computation(ref m_SysConf, waveSet); computation_engine.Title = "XRay-tracing. Additional lines."; computation_engine.WaveProcessed += new EventHandler <Wave>((obj, wave) => { var index = -1; for (int i = 0; i < waveSet.Length; ++i) { if (waveSet[i].lambda == wave.lambda && waveSet[i].intensity == wave.intensity) { index = i; break; } } if (index < waveSet.Length && index >= 0) { waveSet[index].Efficiency = wave.Efficiency; waveSet[index].Emited = wave.Emited; waveSet[index].Reflected = wave.Reflected; } }); this.IsEnabled = false; computation_engine.Show(); var res = await computation_engine.StartXRayTracing(); computation_engine.Close(); this.IsEnabled = true; string detectorFile = "results/Order_0/Detector.dmp"; var a_Detector = new Detector(); await Task.Factory.StartNew(() => a_Detector.ReadDetectorPlane(detectorFile)); await Task.Factory.StartNew(() => SetLinesMagnification(waveSet, a_Detector)); fit_waves.AddRange(waveSet); } m_AdditionalApproximation.MakeFitEfficiency(fit_waves.ToArray()); m_AdditionalApproximation.MakeFitMagnification(fit_waves.ToArray()); m_AproximatedWavePoints = m_AdditionalApproximation.GetApproximatedPoint(waves); return(true); }