예제 #1
0
        public void TestTimeStampExposure(string format, string value)
        {
            var cfg = new TangraConfig.FITSFieldConfig()
            {
                IsTimeStampAndExposure = true,
                ExposureHeader         = "EXP",
                ExposureUnit           = TangraConfig.ExposureUnit.Milliseconds,
                TimeStampType          = TangraConfig.TimeStampType.StartExposure,
                TimeStampFormat        = format,
                TimeStampHeader        = "TIMSTMP"
            };

            var timestampReader = new FITSTimeStampReader(cfg);

            var hdr = new Header();

            hdr.AddValue("TIMSTMP", value, "");
            hdr.AddValue("EXP", "240.6", "");

            bool   isMidPoint;
            double?fitsExposure;
            var    timeStamp = timestampReader.ParseExposure(null, hdr, out isMidPoint, out fitsExposure);

            Assert.AreEqual(true, isMidPoint);
            Assert.AreEqual(0.2406, fitsExposure, 0.00001);
            Assert.AreEqual(new DateTime(2017, 09, 13, 18, 04, 58).AddMilliseconds(121 + 240.6 / 2), timeStamp);
        }
예제 #2
0
        public void TestDateTimeStartEnd(string formatS, string valueS, string formatS2, string valueS2, string formatE, string valueE, string formatE2, string valueE2)
        {
            var cfg = new TangraConfig.FITSFieldConfig()
            {
                IsTimeStampAndExposure    = false,
                TimeStampIsDateTimeParts  = true,
                TimeStampType             = TangraConfig.TimeStampType.StartExposure,
                TimeStampFormat           = formatS,
                TimeStampFormat2          = formatS2,
                TimeStampHeader           = "OBS-DATE",
                TimeStampHeader2          = "OBS-TIME",
                TimeStamp2IsDateTimeParts = true,
                TimeStamp2Format          = formatE,
                TimeStamp2Format2         = formatE2,
                TimeStamp2Header          = "END-DATE",
                TimeStamp2Header2         = "END-TIME"
            };

            var timestampReader = new FITSTimeStampReader(cfg);

            var hdr = new Header();

            hdr.AddValue("OBS-DATE", valueS, "");
            hdr.AddValue("OBS-TIME", valueS2, "");
            hdr.AddValue("END-DATE", valueE, "");
            hdr.AddValue("END-TIME", valueE2, "");

            bool   isMidPoint;
            double?fitsExposure;
            var    timeStamp = timestampReader.ParseExposure(null, hdr, out isMidPoint, out fitsExposure);

            Assert.AreEqual(true, isMidPoint);
            Assert.AreEqual(0.240, fitsExposure, 0.0001);
            Assert.AreEqual(new DateTime(2017, 09, 13, 18, 04, 58).AddMilliseconds(121), timeStamp);
        }
예제 #3
0
        public void TestStartEndTimeStamp(string format, string value, string value2)
        {
            var cfg = new TangraConfig.FITSFieldConfig()
            {
                IsTimeStampAndExposure = false,
                TimeStampType          = TangraConfig.TimeStampType.StartExposure,
                TimeStampFormat        = format,
                TimeStampHeader        = "TIMSTMP",
                TimeStamp2Format       = format,
                TimeStamp2Header       = "TIMSTMP2"
            };

            var timestampReader = new FITSTimeStampReader(cfg);

            var hdr = new Header();

            hdr.AddValue("TIMSTMP", value, "");
            hdr.AddValue("TIMSTMP2", value2, "");

            bool   isMidPoint;
            double?fitsExposure;
            var    timeStamp = timestampReader.ParseExposure(null, hdr, out isMidPoint, out fitsExposure);

            Assert.AreEqual(true, isMidPoint);
            Assert.AreEqual(0.240, fitsExposure, 0.0001);
            Assert.AreEqual(new DateTime(2017, 09, 13, 18, 04, 58).AddMilliseconds(121), timeStamp);
        }
예제 #4
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            if (!ucTimestampControl.ValidateInput())
            {
                return;
            }

            if (!m_ExposureValid)
            {
                MessageBox.Show("Please choose valid settings for the exposure.");
                return;
            }

            if (cbxExposureUnits.SelectedIndex == -1)
            {
                MessageBox.Show("Please choose exposure units.");
                cbxExposureUnits.Focus();
                return;
            }

            if (HasNegativePixels && !m_PixelMappingReviewed)
            {
                if (!ReviewPixelMapping())
                {
                    MessageBox.Show("As there are negative pixels you need to confirm the pixel value mapping before continuing.");
                    btnPixelValueMapping.Focus();
                    return;
                }
            }

            var singleTimeStampConfig = ucTimestampControl.GetSelectedInput();

            var config = new TangraConfig.FITSFieldConfig()
            {
                ExposureHeader           = cbxExposure.Text,
                ExposureUnit             = (TangraConfig.ExposureUnit)cbxExposureUnits.SelectedIndex,
                IsTimeStampAndExposure   = true,
                TimeStampIsDateTimeParts = singleTimeStampConfig.TimeStampIsDateTimeParts,
                TimeStampHeader          = singleTimeStampConfig.TimeStampHeader,
                TimeStampFormat          = singleTimeStampConfig.TimeStampFormat,
                TimeStampHeader2         = singleTimeStampConfig.TimeStampHeader2,
                TimeStampFormat2         = singleTimeStampConfig.TimeStampFormat2,
                TimeStampType            = singleTimeStampConfig.TimeStampType,
            };

            TimeStampReader = new FITSTimeStampReader(config);

            config.FileHash      = m_FilesHash;
            config.CardNamesHash = m_CardNamesHash;
            TangraConfig.Settings.RecentFITSFieldConfig.Register(config);
            TangraConfig.Settings.Save();

            FlipVertically   = cbxFlipVertically.Checked;
            FlipHorizontally = cbxFlipHorizontally.Checked;

            DialogResult = DialogResult.OK;
            Close();
        }
예제 #5
0
        public void TestTimeStampType(TangraConfig.TimeStampType timeStampType, double diff)
        {
            var cfg = new TangraConfig.FITSFieldConfig()
            {
                IsTimeStampAndExposure = true,
                ExposureHeader         = "EXP",
                ExposureUnit           = TangraConfig.ExposureUnit.Milliseconds,
                TimeStampType          = timeStampType,
                TimeStampFormat        = "yyyy-MM-ddTHH:mm:ss.fff",
                TimeStampHeader        = "TIMSTMP"
            };

            var timestampReader = new FITSTimeStampReader(cfg);

            var hdr = new Header();

            hdr.AddValue("TIMSTMP", "2017-09-13T18:04:58.121", "");
            hdr.AddValue("EXP", "240.6", "");

            bool   isMidPoint;
            double?fitsExposure;
            var    timeStamp = timestampReader.ParseExposure(null, hdr, out isMidPoint, out fitsExposure);

            Assert.AreEqual(true, isMidPoint);
            Assert.AreEqual(0.2406, fitsExposure, 0.00001);
            Assert.AreEqual(new DateTime(2017, 09, 13, 18, 04, 58).AddMilliseconds(121 + diff), timeStamp);

            cfg = new TangraConfig.FITSFieldConfig()
            {
                IsTimeStampAndExposure   = true,
                TimeStampIsDateTimeParts = true,
                ExposureHeader           = "EXP",
                ExposureUnit             = TangraConfig.ExposureUnit.Milliseconds,
                TimeStampType            = timeStampType,
                TimeStampFormat          = "yyyy-MM-dd",
                TimeStampFormat2         = "HH:mm:ss.fff",
                TimeStampHeader          = "OBS-DATE",
                TimeStampHeader2         = "OBS-TIME"
            };

            timestampReader = new FITSTimeStampReader(cfg);

            hdr = new Header();
            hdr.AddValue("OBS-DATE", "2017-09-13", "");
            hdr.AddValue("OBS-TIME", "18:04:58.121", "");
            hdr.AddValue("EXP", "240.6", "");

            timeStamp = timestampReader.ParseExposure(null, hdr, out isMidPoint, out fitsExposure);

            Assert.AreEqual(true, isMidPoint);
            Assert.AreEqual(0.2406, fitsExposure, 0.00001);
            Assert.AreEqual(new DateTime(2017, 09, 13, 18, 04, 58).AddMilliseconds(121 + diff), timeStamp);
        }
예제 #6
0
        private ThreeAxisFITSCubeFrameStream(
            string fileName, Fits fitsFile, BufferedFile bufferedFile, BasicHDU imageHDU,
            FITSTimeStampReader timeStampReader,
            int widthIndex, int heightIndex, int frameIndex,
            short minPixelValue, uint maxPixelValue, int bitPix, int negPixCorrection)
        {
            m_FileName = fileName;

            bool   isMidPoint;
            double?exposureSecs;
            var    startExposure = timeStampReader.ParseExposure(null, imageHDU.Header, out isMidPoint, out exposureSecs);

            if (startExposure.HasValue && exposureSecs.HasValue)
            {
                m_ExposureSeconds   = exposureSecs.Value;
                m_FirstFrameMidTime = startExposure.Value;
            }

            m_MinPixelValue = minPixelValue;
            m_MaxPixelValue = maxPixelValue;
            m_Bpp           = bitPix;

            m_FitsFile        = fitsFile;
            m_TimeStampReader = timeStampReader;

            m_BufferedFile = bufferedFile;
            m_ImageHDU     = imageHDU;

            m_HeightIndex = heightIndex;
            m_WidthIndex  = widthIndex;
            m_FrameIndex  = frameIndex;

            m_NumFrames = m_ImageHDU.Axes[frameIndex];
            m_Height    = m_ImageHDU.Axes[heightIndex];
            m_Width     = m_ImageHDU.Axes[widthIndex];

            m_ArrayData        = (Array)m_ImageHDU.Data.DataArray;
            m_BZero            = FITSHelper2.GetBZero(m_ImageHDU);
            m_NegPixCorrection = negPixCorrection;

            m_Cards = new Dictionary <string, string>();
            var cursor = m_ImageHDU.Header.GetCursor();

            while (cursor.MoveNext())
            {
                HeaderCard card = m_ImageHDU.Header.FindCard((string)cursor.Key);
                if (card != null && !string.IsNullOrWhiteSpace(card.Key) && card.Key != "END")
                {
                    if (m_Cards.ContainsKey(card.Key))
                    {
                        m_Cards[card.Key] += "\r\n" + card.Value;
                    }
                    else
                    {
                        m_Cards.Add(card.Key, card.Value);
                    }
                }
            }


            HasUTCTimeStamps = startExposure.HasValue;

            VideoFileType = string.Format("FITS.{0}::Cube3D", bitPix);
        }