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)
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
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
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
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)
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)
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)
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)
def test_getBoresightAzAlt(self): coord = Coord(afwGeom.Point2D(0.0, 89.0), afwGeom.degrees, 2000.0) self.assertEqual(coord, self.visit_info.getBoresightAzAlt())
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):
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, )