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