コード例 #1
0
        private void IncludeInputFile(AbsFluxInputFile inputFile)
        {
            var spectra = new AbsFluxSpectra(inputFile);

            if (!spectra.IsComplete)
            {
                var frm = new frmCompleteSpectra(spectra);
                if (frm.ShowDialog(this) == DialogResult.Cancel)
                {
                    return;
                }
            }

            if (spectra.IsComplete)
            {
                m_AbsFluxCalibrator.AddSpectra(spectra);

                lbIncludedSpecta.Items.Add(spectra);
                lbAvailableFiles.Items.Remove(inputFile);

                lbIncludedSpecta.ItemCheck -= lbIncludedSpecta_ItemCheck;
                try
                {
                    lbIncludedSpecta.SetItemChecked(lbIncludedSpecta.Items.IndexOf(spectra), true);
                }
                finally
                {
                    lbIncludedSpecta.ItemCheck += lbIncludedSpecta_ItemCheck;
                }

                PlotCalibration();
            }
        }
コード例 #2
0
        private double ComputeSyntheticMag(FilterResponse filterResponse, AbsFluxSpectra spectra, out double magError)
        {
            double targetSum = 0;
            double prevNonNaNVal = 0;

            foreach (int wavelength in filterResponse.Response.Keys)
            {
                double responseCoeff = filterResponse.Response[wavelength];

                double targetVal = InterpolateValue(spectra.ResolvedWavelengths, spectra.AbsoluteFluxes, wavelength);
                if (!double.IsNaN(targetVal)) prevNonNaNVal = targetVal;

                targetSum += prevNonNaNVal * responseCoeff;
            }

            var allMags = new List<double>();
            foreach (double conv in m_SynthetizedReferneceFluxMagnitudes.Keys)
            {
                double mag = m_SynthetizedReferneceFluxMagnitudes[conv] + 2.5 * Math.Log10(conv / targetSum);
                allMags.Add(mag);
            }

            // First itteration
            double averageMag = allMags.Average();
            double threeSigma = 3 * Math.Sqrt(allMags.Select(x => (averageMag - x) * (averageMag - x)).Sum()) / (allMags.Count - 1);
            allMags = allMags.Where(x => (Math.Abs(x - averageMag) <= threeSigma)).ToList();

            // Second itteration after removing outliers
            averageMag = allMags.Average();
            magError = m_AverageAbsFluxFitMagError + Math.Sqrt(allMags.Select(x => (averageMag - x) * (averageMag - x)).Sum()) / (allMags.Count - 1);
            return averageMag;
        }
コード例 #3
0
        internal AbsFluxSpectra Clone()
        {
            var rv = new AbsFluxSpectra();

            rv.m_ExtractedStarName = m_ExtractedStarName;
            rv.m_DisplayName       = m_DisplayName;

            rv.WavelengthFrom     = WavelengthFrom;
            rv.WavelengthTo       = WavelengthTo;
            rv.WavelengthBinSize  = WavelengthBinSize;
            rv.DataFromWavelength = DataFromWavelength;
            rv.DataToWavelength   = DataToWavelength;
            rv.ObservedFluxes.AddRange(ObservedFluxes);
            rv.AbsoluteFluxes.AddRange(AbsoluteFluxes);
            rv.DeltaMagnitiudes.AddRange(DeltaMagnitiudes);
            rv.ResolvedWavelengths.AddRange(ResolvedWavelengths);
            rv.Residuals.AddRange(Residuals);
            rv.ResidualObsFlux.AddRange(ResidualObsFlux);
            rv.ResidualPercentage.AddRange(ResidualPercentage);
            rv.ResidualPercentageFlux.AddRange(ResidualPercentageFlux);
            rv.AverageBiasPercentage = AverageBiasPercentage;

            rv.InputFile            = InputFile;
            rv.m_CalSpecStar        = m_CalSpecStar;
            rv.IsComplete           = IsComplete;
            rv.Number               = Number;
            rv.PlotSpectra          = PlotSpectra;
            rv.HasObjectCoordinates = HasObjectCoordinates;
            rv.HasObservationTime   = HasObservationTime;

            return(rv);
        }
コード例 #4
0
ファイル: frmCompleteSpectra.cs プロジェクト: hpavlov/tangra3
        internal frmCompleteSpectra(AbsFluxSpectra spectra)
            : this()
        {
            m_Spectra = spectra;

            if (spectra.IsStandard)
                rbCalibrationStar.Checked = true;
            else
                rbProgramStar.Checked = true;
        }
コード例 #5
0
 private void TryAddSpectraToCalibrator(AbsFluxSpectra spectra, bool forceComplete)
 {
     if (spectra.IsComplete)
     {
         m_AbsFluxCalibrator.AddSpectra(spectra);
     }
     else if (forceComplete)
     {
         // TODO: Ask user to provide missing data (object coordinates, identification, site location, exposure, etc)
         //       Then add the spectra to the calibration if all defined okay
     }
     PlotCalibration();
 }
コード例 #6
0
        internal frmCompleteSpectra(AbsFluxSpectra spectra)
            : this()
        {
            m_Spectra = spectra;

            if (spectra.IsStandard)
            {
                rbCalibrationStar.Checked = true;
            }
            else
            {
                rbProgramStar.Checked = true;
            }
        }
コード例 #7
0
        internal void RemoveSpectra(AbsFluxSpectra spectra)
        {
            m_SpectraList.RemoveAll(x => x.FullFilePath.Equals(spectra.FullFilePath, StringComparison.InvariantCultureIgnoreCase));

            AssignNumbers();

            if (m_SpectraList.Count(x => x.IsComplete && x.IsStandard) > 2)
            {
                Calibrate();
            }
            else
            {
                // Insificient observations to calibrate. Remove/Reset Calibration.
                IsCalibrated = false;
            }
        }
コード例 #8
0
        internal void AddSpectra(AbsFluxSpectra spectra)
        {
            if (!m_SpectraList.Any(x => x.FullFilePath.Equals(spectra.FullFilePath, StringComparison.InvariantCultureIgnoreCase)))
            {
                spectra.RescaleToResolution(Context.FromWavelength, Context.ToWavelength, Context.WavelengthBinSize, Context.UseBlurring, Context.UseFwhmNormalisation, Context.UseNonLinearityNormalisation);
                m_SpectraList.Add(spectra);

                AssignNumbers();

                if (m_SpectraList.Count(x => x.IsComplete && x.IsStandard) > 2)
                {
                    Calibrate();
                }
                else
                {
                    IsCalibrated = false;
                }
            }
        }
コード例 #9
0
ファイル: AbsFluxCalibrator.cs プロジェクト: hpavlov/tangra3
        internal void RemoveSpectra(AbsFluxSpectra spectra)
        {
            m_SpectraList.RemoveAll(x => x.FullFilePath.Equals(spectra.FullFilePath, StringComparison.InvariantCultureIgnoreCase));

            AssignNumbers();

            if (m_SpectraList.Count(x => x.IsComplete && x.IsStandard) > 2)
            {
                Calibrate();
            }
            else
            {
                // Insificient observations to calibrate. Remove/Reset Calibration.
                IsCalibrated = false;
            }
        }
コード例 #10
0
ファイル: AbsFluxCalibrator.cs プロジェクト: hpavlov/tangra3
 internal void PlotSpectra(AbsFluxSpectra spectra, bool plot)
 {
     spectra.PlotSpectra = plot;
 }
コード例 #11
0
ファイル: AbsFluxCalibrator.cs プロジェクト: hpavlov/tangra3
        internal void AddSpectra(AbsFluxSpectra spectra)
        {
            if (!m_SpectraList.Any(x => x.FullFilePath.Equals(spectra.FullFilePath, StringComparison.InvariantCultureIgnoreCase)))
            {
                spectra.RescaleToResolution(Context.FromWavelength, Context.ToWavelength, Context.WavelengthBinSize, Context.UseBlurring, Context.UseFwhmNormalisation, Context.UseNonLinearityNormalisation);
                m_SpectraList.Add(spectra);

                AssignNumbers();

                if (m_SpectraList.Count(x => x.IsComplete && x.IsStandard) > 2)
                {
                    Calibrate();
                }
                else
                {
                    IsCalibrated = false;
                }
            }
        }
コード例 #12
0
 internal void PlotSpectra(AbsFluxSpectra spectra, bool plot)
 {
     spectra.PlotSpectra = plot;
 }
コード例 #13
0
ファイル: frmAbsFlux.cs プロジェクト: hpavlov/tangra3
 private void TryAddSpectraToCalibrator(AbsFluxSpectra spectra, bool forceComplete)
 {
     if (spectra.IsComplete)
     {
         m_AbsFluxCalibrator.AddSpectra(spectra);
     }
     else if (forceComplete)
     {
         // TODO: Ask user to provide missing data (object coordinates, identification, site location, exposure, etc)
         //       Then add the spectra to the calibration if all defined okay
     }
     PlotCalibration();
 }
コード例 #14
0
ファイル: frmAbsFlux.cs プロジェクト: hpavlov/tangra3
        private void IncludeInputFile(AbsFluxInputFile inputFile)
        {
            var spectra = new AbsFluxSpectra(inputFile);

            if (!spectra.IsComplete)
            {
                var frm = new frmCompleteSpectra(spectra);
                if (frm.ShowDialog(this) == DialogResult.Cancel)
                    return;
            }

            if (spectra.IsComplete)
            {
                m_AbsFluxCalibrator.AddSpectra(spectra);

                lbIncludedSpecta.Items.Add(spectra);
                lbAvailableFiles.Items.Remove(inputFile);

                lbIncludedSpecta.ItemCheck -= lbIncludedSpecta_ItemCheck;
                try
                {
                    lbIncludedSpecta.SetItemChecked(lbIncludedSpecta.Items.IndexOf(spectra), true);
                }
                finally
                {
                    lbIncludedSpecta.ItemCheck += lbIncludedSpecta_ItemCheck;
                }

                PlotCalibration();
            }
        }
コード例 #15
0
ファイル: AbsFluxSpectra.cs プロジェクト: hpavlov/tangra3
        internal AbsFluxSpectra Clone()
        {
            var rv = new AbsFluxSpectra();

            rv.m_ExtractedStarName = m_ExtractedStarName;
            rv.m_DisplayName = m_DisplayName;

            rv.WavelengthFrom = WavelengthFrom;
            rv.WavelengthTo = WavelengthTo;
            rv.WavelengthBinSize = WavelengthBinSize;
            rv.DataFromWavelength = DataFromWavelength;
            rv.DataToWavelength = DataToWavelength;
            rv.ObservedFluxes.AddRange(ObservedFluxes);
            rv.AbsoluteFluxes.AddRange(AbsoluteFluxes);
            rv.DeltaMagnitiudes.AddRange(DeltaMagnitiudes);
            rv.ResolvedWavelengths.AddRange(ResolvedWavelengths);
            rv.Residuals.AddRange(Residuals);
            rv.ResidualObsFlux.AddRange(ResidualObsFlux);
            rv.ResidualPercentage.AddRange(ResidualPercentage);
            rv.ResidualPercentageFlux.AddRange(ResidualPercentageFlux);
            rv.AverageBiasPercentage = AverageBiasPercentage;

            rv.InputFile = InputFile;
            rv.m_CalSpecStar = m_CalSpecStar;
            rv.IsComplete = IsComplete;
            rv.Number = Number;
            rv.PlotSpectra = PlotSpectra;
            rv.HasObjectCoordinates = HasObjectCoordinates;
            rv.HasObservationTime = HasObservationTime;

            return rv;
        }