Пример #1
0
    def setUp(self):
        self.testDir = os.path.dirname(__file__)

        def computeLstHA(data):
            """Return LST, Hour Angle, computed from VisitInfoData."""
            localEra = data.era + data.observatory.getLongitude()
            hourAngle = localEra - data.boresightRaDec[0]
            return localEra, hourAngle

        fields = [
            'exposureId', 'exposureTime', 'darkTime', 'date', 'ut1', 'era',
            'boresightRaDec', 'boresightAzAlt', 'boresightAirmass',
            'boresightRotAngle', 'rotType', 'observatory', 'weather'
        ]
        VisitInfoData = collections.namedtuple("VisitInfoData", fields)
        data1 = VisitInfoData(
            exposureId=10313423,
            exposureTime=10.01,
            darkTime=11.02,
            date=DateTime(65321.1, DateTime.MJD, DateTime.TAI),
            ut1=12345.1,
            era=45.1 * degrees,
            boresightRaDec=IcrsCoord(23.1 * degrees, 73.2 * degrees),
            boresightAzAlt=Coord(134.5 * degrees, 33.3 * degrees),
            boresightAirmass=1.73,
            boresightRotAngle=73.2 * degrees,
            rotType=afwImage.RotType_SKY,
            observatory=Observatory(11.1 * degrees, 22.2 * degrees, 0.333),
            weather=Weather(1.1, 2.2, 34.5),
        )
        self.data1 = data1
        self.localEra1, self.hourAngle1 = computeLstHA(data1)
        data2 = VisitInfoData(
            exposureId=1,
            exposureTime=15.5,
            darkTime=17.8,
            date=DateTime(55321.2, DateTime.MJD, DateTime.TAI),
            ut1=312345.1,
            era=25.1 * degrees,
            boresightRaDec=IcrsCoord(2.1 * degrees, 33.2 * degrees),
            boresightAzAlt=Coord(13.5 * degrees, 83.3 * degrees),
            boresightAirmass=2.05,
            boresightRotAngle=-53.2 * degrees,
            rotType=afwImage.RotType_HORIZON,
            observatory=Observatory(22.2 * degrees, 33.3 * degrees, 0.444),
            weather=Weather(2.2, 3.3, 44.4),
        )
        self.data2 = data2
        self.localEra2, self.hourAngle2 = computeLstHA(data2)
    def setArgDict(self, md, argDict):
        """Set an argument dict for makeVisitInfo and pop associated metadata

        @param[in,out] md  metadata, as an lsst.daf.base.PropertyList or PropertySet
        @param[in,out] argdict  a dict of arguments
        """
        MakeRawVisitInfo.setArgDict(self, md, argDict)
        argDict["darkTime"] = self.popFloat(md, "DARKTIME")
        argDict["boresightAzAlt"] = Coord(
            self.popAngle(md, "AZIMUTH"),
            self.altitudeFromZenithDistance(self.popAngle(md, "ZENITH")),
        )
        argDict["boresightRaDec"] = IcrsCoord(
            self.popAngle(md, "RA_DEG"),
            self.popAngle(md, "DEC_DEG"),
        )
        argDict["boresightAirmass"] = self.popFloat(md, "AIRMASS")
        argDict["boresightRotAngle"] = 90 * degrees - self.popAngle(
            md, "ROTANG")
        argDict["rotType"] = RotType_SKY
        argDict["observatory"] = self.observatory
        argDict["weather"] = Weather(
            self.popFloat(md, "TEMPERA"),
            self.pascalFromMmHg(self.popFloat(md, "PRESS")),
            float("nan"),
        )
        return makeVisitInfo(**argDict)
Пример #3
0
 def setUp(self):
     datadir = self.getTestDataDir()
     self.repoPath = os.path.join(datadir, "DATA")
     self.calibPath = os.path.join(datadir, "CALIB")
     self.butler = dafPersist.Butler(root=self.repoPath,
                                     calibRoot=self.calibPath)
     self.size = (2112, 4644)
     self.dataId = {'visit': 1038843}
     self.filter = "i2"
     self.exposureTime = 615.037
     self.darkTime = 615.0
     dateObs = DateTime(54771.6066250, DateTime.MJD, DateTime.UTC)
     self.dateAvg = DateTime(
         dateObs.nsecs(DateTime.TAI) + int(0.5e9 * self.exposureTime),
         DateTime.TAI)
     self.boresightRaDec = IcrsCoord(135.409417 * degrees,
                                     -2.400000 * degrees)
     self.boresightAzAlt = Coord(122.34 * degrees, 52.02 * degrees)
     self.boresightAirmass = 1.269
     self.rotType = RotType.UNKNOWN
     self.obs_longitude = -155.468876 * degrees
     self.obs_latitude = 19.825252 * degrees
     self.obs_elevation = 4204
     self.weath_airTemperature = 0.90
     self.weath_airPressure = 617.65 * 100  # 100 Pascal/millibar
     self.weath_humidity = 39.77
     # NOTE: if we deal with DM-8053 and get UT1 implemented, ERA will change slightly.
     lst = 104.16591666666666 * degrees
     self.era = lst - self.obs_longitude
Пример #4
0
def loadData(pixelScale=1.0):
    """Prepare the data we need to run the example"""

    # Load sample input from disk
    mypath = lsst.utils.getPackageDir('afwdata')

    print(
        " mypath = ",
        mypath)  # mssg -- error happens before i can even possibly print this
    #    sys.exit()

    imFile = os.path.join(mypath, "CFHT", "D4",
                          "cal-53535-i-797722_small_1.fits")

    exposure = afwImage.ExposureF(imFile)
    # set the exposure time
    calib = afwImage.Calib()
    calib.setExptime(1.0)
    exposure.setCalib(calib)
    # add a filter
    afwImage.Filter.define(afwImage.FilterProperty(FilterName, 600, True))
    exposure.setFilter(afwImage.Filter(FilterName))
    # and a trivial WCS (needed by MyAstrometryTask)
    pixelScale /= 3600.0  # degrees per pixel
    wcs = afwImage.makeWcs(Coord(PointD(15, 1)), PointD(0, 0), pixelScale, 0.0,
                           0.0, pixelScale)
    exposure.setWcs(wcs)

    return exposure
Пример #5
0
    def setUp(self):
        rawPath = os.path.join(testDataDirectory, "hsc", "raw")
        calibPath = os.path.join(testDataDirectory, "hsc", "calib")
        self.repoPath = createDataRepository("lsst.obs.hsc.HscMapper", rawPath)
        self.butler = dafPersist.Butler(root=self.repoPath,
                                        calibRoot=calibPath)

        # The following properties of the provided data are known a priori.
        self.visit = 904024
        self.ccdNum = 50
        self.filter = 'i'
        self.rawSize = (2144, 4241)
        self.ccdSize = (2048, 4176)
        self.exptime = 30.0
        self.darktime = self.exptime  # No explicit darktime
        dateBeg = DateTime(56598.26106374757, DateTime.MJD, DateTime.UTC)
        dateAvgNSec = dateBeg.nsecs() + int(0.5e9 * self.exptime)
        self.dateAvg = DateTime(dateAvgNSec, DateTime.TAI)
        self.boresightRaDec = IcrsCoord('21:22:59.982', '+00:30:00.07')
        self.boresightAzAlt = Coord(226.68922661 * degrees,
                                    63.04359233 * degrees)
        self.boresightAirmass = 1.121626027604189
        self.boresightRotAngle = 270.0 * degrees
        self.rotType = RotType.SKY
        self.obs_longitude = -155.476667 * degrees
        self.obs_latitude = 19.825556 * degrees
        self.obs_elevation = 4139
        self.weath_airTemperature = MakeRawVisitInfo.centigradeFromKelvin(
            272.35)
        self.weath_airPressure = MakeRawVisitInfo.pascalFromMmHg(621.7)
        self.weath_humidity = 33.1
        # NOTE: if we deal with DM-8053 and get UT1 implemented, ERA will change slightly.
        lst = 340.189608333 * degrees
        self.era = lst - self.obs_longitude
Пример #6
0
    def setArgDict(self, md, argDict):
        """Set an argument dict for VisitInfo and pop associated metadata

        @param[in,out] md  metadata, as an lsst.daf.base.PropertyList or PropertySet
        @param[in,out] argdict  a dict of arguments
        """
        MakeRawVisitInfo.setArgDict(self, md, argDict)
        argDict["darkTime"] = self.popFloat(md, "DARKTIME")
        argDict["boresightAzAlt"] = Coord(
            self.popAngle(md, "AZIMUTH"),
            self.altitudeFromZenithDistance(self.popAngle(md, "ZENITH")),
        )
        argDict["boresightRaDec"] = IcrsCoord(
            self.popAngle(md, "RA_DEG"),
            self.popAngle(md, "DEC_DEG"),
        )
        argDict["boresightAirmass"] = self.popFloat(md, "AIRMASS")
        argDict["boresightRotAngle"] = -self.popAngle(md, "ROTANG")
        argDict["rotType"] = RotType.SKY
        argDict["observatory"] = self.observatory
        argDict["weather"] = Weather(
            self.popFloat(md, "TEMPERA"),
            self.pascalFromMmHg(self.popFloat(md, "PRESS")),
            float("nan"),
        )
        # phosim doesn't supply LST, HA, or UT1, and the alt/az/ra/dec/time can be inconsistent.
        # We will leave ERA as NaN until a better answer is available.
        return VisitInfo(**argDict)
Пример #7
0
    def setArgDict(self, md, argDict):
        """Set an argument dict for VisitInfo and pop associated metadata

        @param[in,out] md  metadata, as an lsst.daf.base.PropertyList or PropertySet
        @param[in,out] argdict  a dict of arguments
        """
        MakeRawVisitInfo.setArgDict(self, md, argDict)
        argDict["darkTime"] = self.popFloat(md, "DARKTIME")
        argDict["boresightAzAlt"] = Coord(
            self.popAngle(md, "TELAZ"),
            self.popAngle(md, "TELALT"),
        )
        argDict["boresightRaDec"] = IcrsCoord(
            self.popAngle(
                md,
                "RA_DEG",
            ),
            self.popAngle(md, "DEC_DEG"),
        )
        argDict["boresightAirmass"] = self.popFloat(md, "AIRMASS")
        argDict["observatory"] = Observatory(
            self.popAngle(md, "LONGITUD"),
            self.popAngle(md, "LATITUDE"),
            4204,  # from Wikipedia
        )
        argDict["weather"] = Weather(
            self.popFloat(md, "TEMPERAT"),
            self.popFloat(md, "PRESSURE") * 100.0,  # 100 Pascal per millibar
            self.popFloat(md, "RELHUMID"),
        )
        # Using LST to compute ERA until we get UT1 (see: DM-8053)
        LST = self.popAngle(md, "LST-OBS", units=astropy.units.h)
        argDict['era'] = self.eraFromLstAndLongitude(
            LST, argDict["observatory"].getLongitude())
    def setArgDict(self, md, argDict):
        """Set an argument dict for VisitInfo and pop associated metadata

        @param[in,out] md  metadata, as an lsst.daf.base.PropertyList or PropertySet
        @param[in,out] argdict  a dict of arguments
        """
        MakeRawVisitInfo.setArgDict(self, md, argDict)
        argDict["boresightRaDec"] = IcrsCoord(
            self.popAngle(md, "RA2000", units=astropy.units.h),
            self.popAngle(md, "DEC2000"),
        )
        argDict["boresightAzAlt"] = Coord(
            self.popAngle(md, "AZIMUTH"),
            self.popAngle(md, "ALTITUDE"),
        )
        argDict["boresightAirmass"] = self.popFloat(md, "AIRMASS")
        argDict["observatory"] = self.observatory
        argDict["weather"] = Weather(
            self.centigradeFromKelvin(self.popFloat(md, "OUT-TMP")),
            self.pascalFromMmHg(self.popFloat(md, "OUT-PRS")),
            self.popFloat(md, "OUT-HUM"),
        )
        LST = self.popAngle(md, "LST-STR", units=astropy.units.h)
        argDict['era'] = self.eraFromLstAndLongitude(
            LST, self.observatory.getLongitude())
        argDict['darkTime'] = argDict['exposureTime']

        # Rotation angle formula determined empirically from visual inspection
        # of HSC images.  See DM-9111.
        rotAngle = (270.0 * degrees - self.popAngle(md, "INST-PA")).wrap()
        argDict['boresightRotAngle'] = rotAngle
        argDict['rotType'] = RotType.SKY
    def setArgDict(self, md, argDict):
        """Set an argument dict for VisitInfo and pop associated metadata

        @param[in,out] md  metadata, as an lsst.daf.base.PropertyList or PropertySet
        @param[in,out] argdict  a dict of arguments
        """
        MakeRawVisitInfo.setArgDict(self, md, argDict)
        argDict["darkTime"] = self.popFloat(md, "DARKTIME")
        argDict["boresightAzAlt"] = Coord(
            self.popAngle(md, "AZ"),
            self.altitudeFromZenithDistance(self.popAngle(md, "ZD")),
        )
        argDict["boresightRaDec"] = IcrsCoord(
            self.popAngle(md, "TELRA", units=astropy.units.h),
            self.popAngle(md, "TELDEC"),
        )
        argDict["boresightAirmass"] = self.popFloat(md, "AIRMASS")
        argDict["observatory"] = Observatory(
            self.popAngle(md, "OBS-LONG"),
            self.popAngle(md, "OBS-LAT"),
            self.popFloat(md, "OBS-ELEV"),
        )
        argDict["weather"] = Weather(
            self.popFloat(md, "OUTTEMP"),
            self.pascalFromMmHg(self.popFloat(md, "PRESSURE")),
            self.popFloat(md, "HUMIDITY"))
        longitude = argDict["observatory"].getLongitude()
        argDict['era'] = self.decamGetEra(md, argDict["boresightRaDec"][0],
                                          longitude)
Пример #10
0
 def makeVisitInfo():
     return lsst.afw.image.VisitInfo(
         10313423,
         10.01,
         11.02,
         DateTime(65321.1, DateTime.MJD, DateTime.TAI),
         12345.1,
         45.1 * lsst.afw.geom.degrees,
         IcrsCoord(23.1 * degrees, 73.2 * degrees),
         Coord(134.5 * degrees, 33.3 * degrees),
         1.73,
         73.2 * degrees,
         lsst.afw.image.RotType.SKY,
         lsst.afw.coord.Observatory(11.1 * degrees, 22.2 * degrees, 0.333),
         lsst.afw.coord.Weather(1.1, 2.2, 34.5),
     )
    def setArgDict(self, md, argDict):
        """Set an argument dict for VisitInfo and pop associated metadata

        @param[in,out] md  metadata, as an lsst.daf.base.PropertyList or PropertySet
        @param[in,out] argdict  a dict of arguments
        """
        MakeRawVisitInfo.setArgDict(self, md, argDict)
        argDict["darkTime"] = self.popFloat(md, "DARKTIME")
        argDict["boresightAzAlt"] = Coord(
            self.popAngle(md, "AZIMUTH"),
            self.altitudeFromZenithDistance(self.popAngle(md, "ZENITH")),
        )
        argDict["boresightRaDec"] = IcrsCoord(
            self.popAngle(md, "RA_DEG"),
            self.popAngle(md, "DEC_DEG"),
        )
        argDict["boresightAirmass"] = self.popFloat(md, "AIRMASS")
        argDict["boresightRotAngle"] = -self.popAngle(md, "ROTANG")
        argDict["rotType"] = RotType.SKY
        argDict["observatory"] = self.observatory
        weather = defaultWeather(self.observatory.getElevation())
        temperature = self.defaultMetadata(self.popFloat(md, "TEMPERA"),
                                           weather.getAirTemperature(),
                                           minimum=-10,
                                           maximum=40.)
        pressure = self.defaultMetadata(self.pascalFromMmHg(
            self.popFloat(md, "PRESS")),
                                        weather.getAirPressure(),
                                        minimum=50000.,
                                        maximum=90000.)
        humidity = 40.  # Not currently supplied by phosim, so set to a typical value.
        argDict["weather"] = Weather(temperature, pressure, humidity)
        longitude = argDict["observatory"].getLongitude()
        RA = argDict["boresightRaDec"][0]
        # phosim doesn't supply LST, HA, or UT1, and the alt/az/ra/dec/time can be inconsistent.
        # We will leave ERA as NaN until a better answer is available.
        try:
            # Other simulation tools don't have the same problem, and need hour angle if it is available.
            HA = self.popAngle(md, "HA", units=astropy.units.h)
            argDict['era'] = HA + RA - longitude
        except:
            self.log.warn("Hour angle missing from metadata, will be NAN")
        return VisitInfo(**argDict)
Пример #12
0
 def setUp(self):
     self.butler = dafPersist.Butler(
         root=os.path.join(os.path.dirname(__file__), "data"))
     self.exposureTime = 15.0
     self.darkTime = 15.0
     dateObs = DateTime(49552.28496, DateTime.MJD, DateTime.TAI)
     self.dateAvg = DateTime(
         dateObs.nsecs(DateTime.TAI) + int(0.5e9 * self.exposureTime),
         DateTime.TAI)
     self.boresightRaDec = IcrsCoord(359.936019771151 * degrees,
                                     -2.3356222648145 * degrees)
     self.boresightAzAlt = Coord(127.158246182602 * degrees,
                                 (90 - 40.6736117075876) * degrees)
     self.boresightAirmass = 1.31849492005496
     self.boresightRotAngle = (90 - 3.43228) * degrees
     self.rotType = RotType_SKY
     self.obs_longitude = -70.749417 * degrees
     self.obs_latitude = -30.244633 * degrees
     self.obs_elevation = 2663.0
     self.weath_airTemperature = 5.0
     self.weath_airPressure = MakeRawVisitInfo.pascalFromMmHg(520.0)
Пример #13
0
 def test_getBoresightAzAlt(self):
     coord = Coord(afwGeom.Point2D(0.0, 89.0), afwGeom.degrees, 2000.0)
     self.assertEqual(coord, self.visit_info.getBoresightAzAlt())
Пример #14
0
from lsst.afw.geom import degrees

# Desired VisitInfo values for visit 229388, shared between testGetRaw.py and
# testGetInstcal.py

boresightRaDec = IcrsCoord('02:51:16.790', '-00:00:05.699')
# NOTE: if we deal with DM-8053 and implement UT1, ERA will not come from HA, so this will change.
HA = -42.505291666666665 * degrees
era = HA + boresightRaDec[0] - 70.81489000000001 * degrees
visit229388_info = {
    "dateAvg": DateTime("2013-09-01T06:05:10.753848", DateTime.TAI),
    "exposureTime": 200.0,
    "darkTime": 201.15662,
    "era": era,
    "boresightRaDec": boresightRaDec,
    "boresightAzAlt": Coord(61.24 * degrees, (90 - 50.46) * degrees),
    "boresightAirmass": 1.57,
    "boresightRotAngle": float("nan") * degrees,
    "rotType": RotType.UNKNOWN,
    "obs_longitude": 70.81489000000001 * degrees,
    "obs_latitude": -30.16606 * degrees,
    "obs_elevation": 2215.0,
    "weath_airTemperature": 11.9,
    "weath_airPressure": MakeRawVisitInfo.pascalFromMmHg(779.0),
    "weath_humidity": 23.0
}


class GetRawTestCase(lsst.utils.tests.TestCase):
    """Testing butler raw image retrieval"""
    def setUp(self):
Пример #15
0
def makeVisitInfo(
    exposureId=0,
    exposureTime=nanFloat,
    darkTime=nanFloat,
    date=DateTime(),
    ut1=nanFloat,
    era=nanAngle,
    boresightRaDec=IcrsCoord(nanAngle, nanAngle),
    boresightAzAlt=Coord(nanAngle, nanAngle),
    boresightAirmass=nanFloat,
    boresightRotAngle=nanAngle,
    rotType=RotType_UNKNOWN,
    observatory=Observatory(nanAngle, nanAngle, nanFloat),
    weather=Weather(nanFloat, nanFloat, nanFloat),
):
    """Make a VisitInfo from keyword arguments

    This function will be replaced by a VisitInfo constructor once we switch to pybind11
    (it is too much hassle with SWIG).

    @param[in] exposureId  exposure ID (int, defaults to 0)
    @param[in] exposureTime  exposure duration (shutter open time); (float, sec, defaults to NaN)
    @param[in] darkTime  time from CCD flush to readout, including shutter open time (despite the name);
                    (float, sec, defaults to NaN)
    @param[in] date  TAI (international atomic time) MJD date at middle of exposure
                    (lsst.daf.base.DateTime; defaults to date of unix epoch)
    @param[in] ut1  UT1 (universal time) MJD date at middle of exposure (float, defaults to Nan)
    @param[in] era  earth rotation angle at middle of exposure
                    (lsst.afw.geom.Angle, defaults to Angle(Nan))
    @param[in] boresightRaDec  ICRS RA/Dec of boresight at middle of exposure
                    (lsst.afw.coord.IcrsCoord; defaults to IcrsCoord(Nan, Nan));
                    other Coord types are accepted and converted to Icrs
    @param[in] boresightAzAlt  refracted apparent topocentric Az/Alt of boresight at middle of exposure;
                    (lsst.afw.coord.Coord; defaults to Coord(Nan, Nan))
    @param[in] boresightAirmass  airmass at the boresight, relative to zenith at sea level
                    (float, defaults to Nan)
    @param[in] boresightRotAngle  rotation angle at boresight at middle of exposure;
                    see getBoresightRotAngle for details
                    (lsst.afw.geom.Angle, defaults to Angle(Nan))
    @param[in] rotType  rotation type; one of the lsst.afw.image.RotType_ constants,
                    defaults to RotType_UNKNOWN
    @param[in] observatory  observatory longitude, latitude and altitude,
                    (lsst.afw.coord.Observatory, defaults to Observatory(Angle(Nan), Angle(Nan), Nan))
    @param[in] weather  basic weather information for computing air mass,
                    (lsst.afw.coord.Weather, defaults to Weather(NaN, NaN, NaN))
    """
    return VisitInfo(
        exposureId,
        exposureTime,
        darkTime,
        date,
        ut1,
        era,
        boresightRaDec.toIcrs(),
        boresightAzAlt,
        boresightAirmass,
        boresightRotAngle,
        rotType,
        observatory,
        weather,
    )