Ejemplo n.º 1
0
        /// <summary>
        /// Gets the peak inforamtion async
        /// </summary>
        /// <param name="peaks"></param>
        /// <returns></returns>
        public override async Task LoadDataAsync(DataTable peaks)
        {
            /**********get the data async******/
            camfile.ReadFile(file);
            //time
            Task <DateTime> acqTask  = Task.Run(() => camfile.GetAqusitionTime());
            Task <DateTime> sampTask = Task.Run(() => camfile.GetSampleTime());
            Task <double>   liveTask = Task.Run(() => camfile.GetLiveTime());
            //sepectrum
            Task <uint[]> specTask = Task.Run(() => camfile.GetSpectrum());
            //peaks
            Task <Peak[]> peakTask = Task.Run(() => camfile.GetPeaks().ToArray());
            //calibrations
            Task <double[]>          ecalTask     = Task.Run(() => camfile.GetEnergyCalibration());
            Task <double[]>          shapeCalTask = Task.Run(() => camfile.GetShapeCalibration());
            Task <EfficiencyPoint[]> effCalTask   = Task.Run(() => camfile.GetEfficiencyPoints().ToArray());

            //assign variables
            collTime    = await sampTask;
            acqTime     = await acqTask;
            elapsedWait = collTime - acqTime;
            countTime   = await liveTask;
            spectrum    = await specTask;


            //assign the calibration info
            energyCoeff = await ecalTask;
            shapeCoeff  = await shapeCalTask;
            EfficiencyPoint[] effpts = await effCalTask;

            //assign the efficiency points
            effMeas = new System.Collections.ObjectModel.ObservableCollection <EfficiencyMeasurement>();
            for (int i = 0; i < effpts.Length; i++)
            {
                effMeas.Add(new EfficiencyMeasurement(effpts[i].Energy, effpts[i].Efficiency, effpts[i].EfficiencyUncertainty));
            }
            effMeas.CollectionChanged += EffMeas_CollectionChanged;
            //assign the peaks
            Peak[] filePeaks = await peakTask;
            //add the peaks to the datatable
            foreach (Peak pk in filePeaks)
            {
                DataRow row = peaks.NewRow();
                row["ENERGY"]    = pk.Energy;
                row["FWHM"]      = pk.FullWidthAtHalfMaximum;
                row["AREA"]      = pk.Area;
                row["AREAUNC"]   = pk.AreaUncertainty;
                row["CONTINUUM"] = pk.Continuum;
                row["CRITLEVEL"] = pk.CriticalLevel;
                peaks.Rows.Add(row);
            }
            order     = effMeas.Count > 7 ? 5 : effMeas.Count > 2 ? effMeas.Count - 2 : 3;
            calParams = GetCalibrationParameters();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets the peak inforamtion async
        /// </summary>
        /// <param name="peaks"></param>
        /// <returns></returns>
        public override async Task LoadDataAsync(DataTable peaks)
        {
            /**********get the data async******/
            camfile.ReadFile(file);
            //time
            Task <DateTime> acqTask  = Task.Run(() => camfile.GetAqusitionTime());
            Task <DateTime> sampTask = Task.Run(() => camfile.GetSampleTime());
            Task <double>   liveTask = Task.Run(() => camfile.GetLiveTime());
            //sepectrum
            Task <uint[]> specTask = Task.Run(() => camfile.GetSpectrum());
            //peaks
            Task <Peak[]> peakTask = Task.Run(() => camfile.GetPeaks().ToArray());
            //calibrations
            Task <double[]>          ecalTask     = Task.Run(() => camfile.GetEnergyCalibration());
            Task <double[]>          shapeCalTask = Task.Run(() => camfile.GetShapeCalibration());
            Task <EfficiencyPoint[]> effCalTask   = Task.Run(() => camfile.GetEfficiencyPoints().ToArray());

            //assign variables
            collTime    = await sampTask;
            acqTime     = await acqTask;
            elapsedWait = collTime - acqTime;
            countTime   = await liveTask;
            spectrum    = await specTask;


            //assign the calibration info
            energyCoeff = await ecalTask;
            shapeCoeff  = await shapeCalTask;
            //efficiency is not necessary, if there isn't efficiency calibration add some defaults
            try
            {
                effMeas = new ObservableEntityCollection <EfficiencyMeasurement>();
                EfficiencyPoint[] effpts = await effCalTask;
                if (effpts.Length < 2)
                {
                    throw new FileFormatException("Not enough efficiency points to perfom calculations");
                }

                for (int i = 0; i < effpts.Length; i++)
                {
                    effMeas.Add(new EfficiencyMeasurement(effpts[i].Energy, effpts[i].Efficiency, effpts[i].EfficiencyUncertainty));
                }
            }
            catch (FileFormatException)
            {
                double eff    = 0.9999999999999;
                double effunc = 0.000000000005;
                effMeas.Add(new EfficiencyMeasurement(Properties.Settings.Default.LOWERELIMT, eff, effunc));
                effMeas.Add(new EfficiencyMeasurement((Properties.Settings.Default.LOWERELIMT + Properties.Settings.Default.UPPERELIMIT) / 2, eff, effunc));
                effMeas.Add(new EfficiencyMeasurement(Properties.Settings.Default.UPPERELIMIT, eff, effunc));
                order = 2;
            }

            effMeas.CollectionChanged += EffMeas_CollectionChanged;
            //assign the peaks
            Peak[] filePeaks = await peakTask;
            //add the peaks to the datatable
            foreach (Peak pk in filePeaks)
            {
                DataRow row = peaks.NewRow();
                row["ENERGY"]    = pk.Energy;
                row["FWHM"]      = pk.FullWidthAtHalfMaximum;
                row["AREA"]      = pk.Area;
                row["AREAUNC"]   = pk.AreaUncertainty;
                row["CONTINUUM"] = pk.Continuum;
                row["CRITLEVEL"] = pk.CriticalLevel;
                peaks.Rows.Add(row);
            }
            order     = effMeas.Count > 7 ? 5 : effMeas.Count > 2 ? effMeas.Count - 2 : 3;
            calParams = GetCalibrationParameters();
        }