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(); } }
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; }
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); }
internal frmCompleteSpectra(AbsFluxSpectra spectra) : this() { m_Spectra = spectra; if (spectra.IsStandard) rbCalibrationStar.Checked = true; else rbProgramStar.Checked = true; }
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(); }
internal frmCompleteSpectra(AbsFluxSpectra spectra) : this() { m_Spectra = spectra; if (spectra.IsStandard) { rbCalibrationStar.Checked = true; } else { rbProgramStar.Checked = true; } }
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; } }
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; } } }
internal void PlotSpectra(AbsFluxSpectra spectra, bool plot) { spectra.PlotSpectra = plot; }
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(); } }
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; }