Exemplo n.º 1
0
        public void FITSImageMetaDataPopulated()
        {
            //Arrange
            var now      = DateTime.Now;
            var metaData = new ImageMetaData();

            metaData.Image.ImageType     = "TEST";
            metaData.Image.ExposureStart = now;
            metaData.Image.ExposureTime  = 10.23;

            var expectedHeaderCards = new List <FITSHeaderCard>()
            {
                new FITSHeaderCard("IMAGETYP", metaData.Image.ImageType, "Type of exposure"),
                new FITSHeaderCard("EXPOSURE", metaData.Image.ExposureTime, "[s] Exposure duration"),
                new FITSHeaderCard("EXPTIME", metaData.Image.ExposureTime, "[s] Exposure duration"),
                new FITSHeaderCard("DATE-LOC", metaData.Image.ExposureStart.ToLocalTime(), "Time of observation (local)"),
                new FITSHeaderCard("DATE-OBS", metaData.Image.ExposureStart.ToUniversalTime(), "Time of observation (UTC)"),
            };

            //Act
            var sut = new FITS(new ushort[] { 1, 2 }, 1, 1);

            sut.PopulateHeaderCards(metaData);

            //Assert
            foreach (var expectedCard in expectedHeaderCards)
            {
                sut.Header.HeaderCards.First(x => x.Key == expectedCard.Key).Should().BeEquivalentTo(expectedCard);
            }
        }
Exemplo n.º 2
0
        public void FITSRotatorMetaDataPopulated()
        {
            var now      = DateTime.Now;
            var metaData = new ImageMetaData();

            metaData.Rotator.Name = "TEST";
            metaData.Rotator.MechanicalPosition = 123.11;
            metaData.Rotator.Position           = 10;
            metaData.Rotator.StepSize           = 10.23;

            var expectedHeaderCards = new List <FITSHeaderCard>()
            {
                new FITSHeaderCard("ROTNAME", metaData.Rotator.Name, "Rotator equipment name"),
                new FITSHeaderCard("ROTATOR", metaData.Rotator.MechanicalPosition, "[deg] Mechanical rotator angle"),
                new FITSHeaderCard("ROTATANG", metaData.Rotator.MechanicalPosition, "[deg] Mechanical rotator angle"),
                new FITSHeaderCard("ROTSTPSZ", metaData.Rotator.StepSize, "[deg] Rotator step size"),
            };

            var sut = new FITS(new ushort[] { 1, 2 }, 1, 1);

            sut.PopulateHeaderCards(metaData);

            foreach (var expectedCard in expectedHeaderCards)
            {
                sut.Header.HeaderCards.First(x => x.Key == expectedCard.Key).Should().BeEquivalentTo(expectedCard);
            }
        }
Exemplo n.º 3
0
        public void FITSDefaultMetaDataPopulated()
        {
            //Arrange
            var metaData = new ImageMetaData();

            var expectedHeaderCards = new List <FITSHeaderCard>()
            {
                new FITSHeaderCard("XBINNING", 1, "X axis binning factor"),
                new FITSHeaderCard("YBINNING", 1, "Y axis binning factor"),
                new FITSHeaderCard("ROWORDER", "TOP-DOWN", "FITS Image Orientation"),
                new FITSHeaderCard("EQUINOX", 2000d, "Equinox of celestial coordinate system"),
                new FITSHeaderCard("SWCREATE", string.Format("N.I.N.A. {0} ({1})", Utility.Version, DllLoader.IsX86() ? "x86" : "x64"), "Software that created this file"),
            };

            //Act
            var sut = new FITS(new ushort[] { 1, 2 }, 1, 1);

            sut.PopulateHeaderCards(metaData);

            //Assert
            sut.Header.HeaderCards.Count.Should().Be(expectedHeaderCards.Count + 7); // 7 is the default header size
            foreach (var expectedCard in expectedHeaderCards)
            {
                sut.Header.HeaderCards.First(x => x.Key == expectedCard.Key).Should().BeEquivalentTo(expectedCard);
            }
        }
Exemplo n.º 4
0
        public void FITSObserverMetaDataPopulated()
        {
            var now      = DateTime.Now;
            var metaData = new ImageMetaData();

            metaData.Observer.Latitude  = 10;
            metaData.Observer.Longitude = 20;
            metaData.Observer.Elevation = 30;

            var expectedHeaderCards = new List <FITSHeaderCard>()
            {
                new FITSHeaderCard("SITEELEV", metaData.Observer.Elevation, "[m] Observation site elevation"),
                new FITSHeaderCard("SITELAT", metaData.Observer.Latitude, "[deg] Observation site latitude"),
                new FITSHeaderCard("SITELONG", metaData.Observer.Longitude, "[deg] Observation site longitude")
            };

            var sut = new FITS(new ushort[] { 1, 2 }, 1, 1);

            sut.PopulateHeaderCards(metaData);

            foreach (var expectedCard in expectedHeaderCards)
            {
                sut.Header.HeaderCards.First(x => x.Key == expectedCard.Key).Should().BeEquivalentTo(expectedCard);
            }
        }
Exemplo n.º 5
0
        public void FITSFocuserMetaDataPopulated()
        {
            var now      = DateTime.Now;
            var metaData = new ImageMetaData();

            metaData.Focuser.Name        = "TEST";
            metaData.Focuser.Position    = 123.11;
            metaData.Focuser.StepSize    = 10.23;
            metaData.Focuser.Temperature = 125.12;

            var expectedHeaderCards = new List <FITSHeaderCard>()
            {
                new FITSHeaderCard("FOCNAME", metaData.Focuser.Name, "Focusing equipment name"),
                new FITSHeaderCard("FOCPOS", metaData.Focuser.Position, "[step] Focuser position"),
                new FITSHeaderCard("FOCUSPOS", metaData.Focuser.Position, "[step] Focuser position"),
                new FITSHeaderCard("FOCUSSZ", metaData.Focuser.StepSize, "[um] Focuser step size"),
                new FITSHeaderCard("FOCTEMP", metaData.Focuser.Temperature, "[degC] Focuser temperature"),
                new FITSHeaderCard("FOCUSTEM", metaData.Focuser.Temperature, "[degC] Focuser temperature"),
            };

            var sut = new FITS(new ushort[] { 1, 2 }, 1, 1);

            sut.PopulateHeaderCards(metaData);

            foreach (var expectedCard in expectedHeaderCards)
            {
                sut.Header.HeaderCards.First(x => x.Key == expectedCard.Key).Should().BeEquivalentTo(expectedCard);
            }
        }
Exemplo n.º 6
0
        public void FITSTelescopeMetaDataPopulated()
        {
            var now      = DateTime.Now;
            var metaData = new ImageMetaData();

            metaData.Telescope.Name        = "TEST";
            metaData.Telescope.FocalLength = 200;
            metaData.Telescope.FocalRatio  = 5;
            metaData.Telescope.Coordinates = new NINA.Utility.Astrometry.Coordinates(Angle.ByHours(2.125), Angle.ByDegree(10.154), Epoch.J2000);

            var expectedHeaderCards = new List <FITSHeaderCard>()
            {
                new FITSHeaderCard("TELESCOP", metaData.Telescope.Name, "Name of telescope"),
                new FITSHeaderCard("FOCALLEN", metaData.Telescope.FocalLength, "[mm] Focal length"),
                new FITSHeaderCard("FOCRATIO", metaData.Telescope.FocalRatio, "Focal ratio"),
                new FITSHeaderCard("RA", metaData.Telescope.Coordinates.RADegrees, "[deg] RA of telescope"),
                new FITSHeaderCard("DEC", metaData.Telescope.Coordinates.Dec, "[deg] Declination of telescope")
            };

            var sut = new FITS(new ushort[] { 1, 2 }, 1, 1);

            sut.PopulateHeaderCards(metaData);

            foreach (var expectedCard in expectedHeaderCards)
            {
                sut.Header.HeaderCards.First(x => x.Key == expectedCard.Key).Should().BeEquivalentTo(expectedCard);
            }
        }
Exemplo n.º 7
0
        public void FITSImageMetaDataSNAPPopulated()
        {
            //Arrange
            var now      = DateTime.Now;
            var metaData = new ImageMetaData();

            metaData.Image.ImageType     = "SNAPSHOT";
            metaData.Image.ExposureStart = now;
            metaData.Image.ExposureTime  = 10.23;

            var expectedHeaderCards = new List <FITSHeaderCard>()
            {
                new FITSHeaderCard("IMAGETYP", "LIGHT", "Type of exposure")
            };

            //Act
            var sut = new FITS(new ushort[] { 1, 2 }, 1, 1);

            sut.PopulateHeaderCards(metaData);

            //Assert
            foreach (var expectedCard in expectedHeaderCards)
            {
                sut.Header.HeaderCards.First(x => x.Key == expectedCard.Key).Should().BeEquivalentTo(expectedCard);
            }
        }
Exemplo n.º 8
0
        public void FITSGainNegativeValueTest()
        {
            var metaData = new ImageMetaData();

            metaData.Camera.Gain = -1;

            var notExpectedCard = new FITSHeaderCard("GAIN", metaData.Camera.Gain, "Sensor gain");

            var sut = new FITS(new ushort[] { 1, 2 }, 1, 1);

            sut.PopulateHeaderCards(metaData);

            sut.Header.HeaderCards.Should().NotContain(notExpectedCard, "Negative Gain values are not allowed");
        }
Exemplo n.º 9
0
        private string SaveFits(FileSaveInfo fileSaveInfo)
        {
            FITS f = new FITS(
                Data.FlatArray,
                Properties.Width,
                Properties.Height
                );

            f.PopulateHeaderCards(MetaData);

            Directory.CreateDirectory(Path.GetDirectoryName(fileSaveInfo.FilePath));
            string uniquePath = Utility.Utility.GetUniqueFilePath(fileSaveInfo.FilePath + ".fits");

            using (FileStream fs = new FileStream(uniquePath, FileMode.Create)) {
                f.Write(fs);
            }

            return(uniquePath);
        }
Exemplo n.º 10
0
        public void FITSWeatherDataMetaDataPopulated()
        {
            var now      = DateTime.Now;
            var metaData = new ImageMetaData();

            metaData.WeatherData.CloudCover     = 99.11;
            metaData.WeatherData.DewPoint       = 18.91;
            metaData.WeatherData.Humidity       = 46.52;
            metaData.WeatherData.Pressure       = 1010.4;
            metaData.WeatherData.SkyBrightness  = 43;
            metaData.WeatherData.SkyQuality     = 17.84;
            metaData.WeatherData.SkyTemperature = -42;
            metaData.WeatherData.StarFWHM       = 2.34;
            metaData.WeatherData.Temperature    = 17.2;
            metaData.WeatherData.WindDirection  = 284.23;
            metaData.WeatherData.WindGust       = 1.76;
            metaData.WeatherData.WindSpeed      = 0.54;

            var expectedHeaderCards = new List <FITSHeaderCard>()
            {
                new FITSHeaderCard("CLOUDCVR", metaData.WeatherData.CloudCover, "[percent] Cloud cover"),
                new FITSHeaderCard("DEWPOINT", metaData.WeatherData.DewPoint, "[degC] Dew point"),
                new FITSHeaderCard("HUMIDITY", metaData.WeatherData.Humidity, "[percent] Relative humidity"),
                new FITSHeaderCard("PRESSURE", metaData.WeatherData.Pressure, "[hPa] Air pressure"),
                new FITSHeaderCard("SKYBRGHT", metaData.WeatherData.SkyBrightness, "[lux] Sky brightness"),
                new FITSHeaderCard("MPSAS", metaData.WeatherData.SkyQuality, "[mags/arcsec^2] Sky quality"),
                new FITSHeaderCard("SKYTEMP", metaData.WeatherData.SkyTemperature, "[degC] Sky temperature"),
                new FITSHeaderCard("STARFWHM", metaData.WeatherData.StarFWHM, "Star FWHM"),
                new FITSHeaderCard("AMBTEMP", metaData.WeatherData.Temperature, "[degC] Ambient air temperature"),
                new FITSHeaderCard("WINDDIR", metaData.WeatherData.WindDirection, "[deg] Wind direction: 0=N, 180=S, 90=E, 270=W"),
                new FITSHeaderCard("WINDGUST", metaData.WeatherData.WindGust * 3.6, "[kph] Wind gust"),
                new FITSHeaderCard("WINDSPD", metaData.WeatherData.WindSpeed * 3.6, "[kph] Wind speed"),
            };

            var sut = new FITS(new ushort[] { 1, 2 }, 1, 1);

            sut.PopulateHeaderCards(metaData);

            foreach (var expectedCard in expectedHeaderCards)
            {
                sut.Header.HeaderCards.First(x => x.Key == expectedCard.Key).Should().BeEquivalentTo(expectedCard);
            }
        }
Exemplo n.º 11
0
        public void FITSCameraMetaDataPopulated()
        {
            var now      = DateTime.Now;
            var metaData = new ImageMetaData();

            metaData.Camera.Name            = "TEST";
            metaData.Camera.BinX            = 2;
            metaData.Camera.BinY            = 3;
            metaData.Camera.Gain            = 200;
            metaData.Camera.Offset          = 22;
            metaData.Camera.ElectronsPerADU = 11;
            metaData.Camera.PixelSize       = 12;
            metaData.Camera.SetPoint        = -5;
            metaData.Camera.Temperature     = -4.454;
            metaData.Camera.ReadoutModeName = "1 Hz";

            var expectedHeaderCards = new List <FITSHeaderCard>()
            {
                new FITSHeaderCard("INSTRUME", metaData.Camera.Name, "Imaging instrument name"),
                new FITSHeaderCard("XBINNING", metaData.Camera.BinX, "X axis binning factor"),
                new FITSHeaderCard("YBINNING", metaData.Camera.BinY, "Y axis binning factor"),
                new FITSHeaderCard("GAIN", metaData.Camera.Gain, "Sensor gain"),
                new FITSHeaderCard("OFFSET", metaData.Camera.Offset, "Sensor gain offset"),
                new FITSHeaderCard("EGAIN", metaData.Camera.ElectronsPerADU, "[e-/ADU] Electrons per A/D unit"),
                new FITSHeaderCard("XPIXSZ", metaData.Camera.PixelSize * metaData.Camera.BinX, "[um] Pixel X axis size"),
                new FITSHeaderCard("YPIXSZ", metaData.Camera.PixelSize * metaData.Camera.BinY, "[um] Pixel Y axis size"),
                new FITSHeaderCard("SET-TEMP", metaData.Camera.SetPoint, "[degC] CCD temperature setpoint"),
                new FITSHeaderCard("CCD-TEMP", metaData.Camera.Temperature, "[degC] CCD temperature"),
                new FITSHeaderCard("READOUTM", metaData.Camera.ReadoutModeName, "Sensor readout mode")
            };

            var sut = new FITS(new ushort[] { 1, 2 }, 1, 1);

            sut.PopulateHeaderCards(metaData);

            foreach (var expectedCard in expectedHeaderCards)
            {
                sut.Header.HeaderCards.First(x => x.Key == expectedCard.Key).Should().BeEquivalentTo(expectedCard);
            }
        }
Exemplo n.º 12
0
        public void FITSFilterMetaDataPopulated()
        {
            var now      = DateTime.Now;
            var metaData = new ImageMetaData();

            metaData.FilterWheel.Name   = "TEST";
            metaData.FilterWheel.Filter = "FILTERTEST";

            var expectedHeaderCards = new List <FITSHeaderCard>()
            {
                new FITSHeaderCard("FWHEEL", metaData.FilterWheel.Name, "Filter Wheel name"),
                new FITSHeaderCard("FILTER", metaData.FilterWheel.Filter, "Active filter name")
            };

            var sut = new FITS(new ushort[] { 1, 2 }, 1, 1);

            sut.PopulateHeaderCards(metaData);

            foreach (var expectedCard in expectedHeaderCards)
            {
                sut.Header.HeaderCards.First(x => x.Key == expectedCard.Key).Should().BeEquivalentTo(expectedCard);
            }
        }
Exemplo n.º 13
0
        public void FITSTargetMetaDataPopulated()
        {
            var now      = DateTime.Now;
            var metaData = new ImageMetaData();

            metaData.Target.Name        = "TEST";
            metaData.Target.Coordinates = new NINA.Utility.Astrometry.Coordinates(Angle.ByHours(2.125), Angle.ByDegree(10.154), Epoch.J2000);

            var expectedHeaderCards = new List <FITSHeaderCard>()
            {
                new FITSHeaderCard("OBJECT", metaData.Target.Name, "Name of the object of interest"),
                new FITSHeaderCard("OBJCTRA", Astrometry.HoursToFitsHMS(metaData.Target.Coordinates.RA), "[H M S] RA of imaged object"),
                new FITSHeaderCard("OBJCTDEC", Astrometry.DegreesToFitsDMS(metaData.Target.Coordinates.Dec), "[D M S] Declination of imaged object"),
            };

            var sut = new FITS(new ushort[] { 1, 2 }, 1, 1);

            sut.PopulateHeaderCards(metaData);

            foreach (var expectedCard in expectedHeaderCards)
            {
                sut.Header.HeaderCards.First(x => x.Key == expectedCard.Key).Should().BeEquivalentTo(expectedCard);
            }
        }