def _moveScope(self, tracking=False, pierSide=None): """ Moves the scope, usually to zenith """ tel = self._getTel() site = self._getSite() self.log.debug('Moving scope to alt %s az %s.' % (self["flat_alt"], self["flat_az"])) if tel.getPositionAltAz().angsep( Position.fromAltAz(Coord.fromD(self["flat_alt"]), Coord.fromD(self["flat_az"]))).D < self[ "flat_position_max"]: self.log.debug( 'Telescope is less than {} degrees from flat position. Not moving!'.format(self["flat_position_max"])) if tracking and not tel.isTracking(): tel.startTracking() elif not tracking and tel.isTracking(): tel.stopTracking() if pierSide is not None and tel.features(TelescopePier): self.log.debug("Setting telescope pier side to %s." % tel.getPierSide().__str__().lower()) tel.setSideOfPier(self['pier_side']) return try: self.log.debug("Skyflat Slewing scope to alt {} az {}".format(self["flat_alt"], self["flat_az"])) tel.slewToRaDec(Position.altAzToRaDec(Position.fromAltAz(Coord.fromD(self["flat_alt"]), Coord.fromD(self["flat_az"])), site['latitude'], site.LST())) if tracking: self._startTracking() else: self._stopTracking() except: self.log.debug("Error moving the telescope")
def slewToAltAz(self, position): site = self._getSite() if self.slewToRaDec( Position.altAzToRaDec(position, site['latitude'], site.LST()).toEpoch(Epoch.NOW)): self.stopTracking() return True return False
def test_altAzRaDec(self): altAz = Position.fromAltAz('20:30:40', '222:11:00') lat = Coord.fromD(0) o = ephem.Observer() o.lat = '0:0:0' o.long = '0:0:0' o.date = dt.now(tz.tzutc()) lst = float(o.sidereal_time()) raDec = Position.altAzToRaDec(altAz, lat, lst) altAz2 = Position.raDecToAltAz(raDec, lat, lst) assert equal(altAz.alt.toR(),altAz2.alt.toR()) & equal(altAz.az.toR(),altAz2.az.toR())
def test_altAzRaDec(self): altAz = Position.fromAltAz('20:30:40', '222:11:00') lat = Coord.fromD(0) o = ephem.Observer() o.lat = '0:0:0' o.long = '0:0:0' o.date = dt.now(tz.tzutc()) lst = float(o.sidereal_time()) raDec = Position.altAzToRaDec(altAz, lat, lst) altAz2 = Position.raDecToAltAz(raDec, lat, lst) assert equal(altAz.alt.toR(),altAz2.alt.toR()) & equal(altAz.az.toR(),altAz2.az.toR())
if (zeta > -2. * pi) and (zeta < 2. * pi): if self.site_latitude.R <= 0.: zeta += pi else: zeta = telaz if zeta < 0: zeta = zeta + 2 * pi elif zeta > 2 * pi: zeta - 2 * pi return zeta * 180 / pi if __name__ == '__main__': import numpy as np dome_radius, mount_dec_height, mount_dec_length, mount_dec_offset = 147, 0, 49.2, 0 site = Site() Model = AzimuthModel(site['latitude'], dome_radius, mount_dec_height, mount_dec_length, mount_dec_offset) # for dra in np.arange(10, 200, 36): # for ddec in np.arange(1, 360, 10): for az, alt in [(ii, jj) for ii in np.arange(5, 360, 10) for jj in np.arange(25, 90, 20)]: tel_pos = Position.altAzToRaDec( Position.fromAltAz(Coord.fromD(alt), Coord.fromD(az)), site['latitude'], site.LST()) model = Model.solve_dome_azimuth(tel_pos, site.LST_inRads()) print 'here', alt, az, model, model - az
def altAzToRaDec(self, altAz): return Position.altAzToRaDec(altAz, self['latitude'], self.LST_inRads())
def altAzToRaDec(self, altAz,lst_inRads=None): if not lst_inRads: lst_inRads = self.LST_inRads() return Position.altAzToRaDec(altAz, self['latitude'], lst_inRads)
def altAzToRaDec(self, altAz): return Position.altAzToRaDec(altAz, self['latitude'], self.LST_inRads())
def altAzToRaDec(self, altAz, lst_inRads=None): if not lst_inRads: lst_inRads = self.LST_inRads() return Position.altAzToRaDec(altAz, self['latitude'], lst_inRads)
# Azimuth is N (0), E (90), S (180), W (270) in both hemispheres # However x and y are different in the hemispheres so we fix that here zeta = atan2(x, y) if (zeta > - 2. * pi) and (zeta < 2. * pi): if self.site_latitude.R <= 0.: zeta += pi else: zeta = telaz if zeta < 0: zeta = zeta + 2 * pi elif zeta > 2 * pi: zeta - 2 * pi return zeta * 180 / pi if __name__ == '__main__': import numpy as np dome_radius, mount_dec_height, mount_dec_length, mount_dec_offset = 147, 0, 49.2, 0 site = Site() Model = AzimuthModel(site['latitude'], dome_radius, mount_dec_height, mount_dec_length, mount_dec_offset) # for dra in np.arange(10, 200, 36): # for ddec in np.arange(1, 360, 10): for az, alt in [(ii, jj) for ii in np.arange(5, 360, 10) for jj in np.arange(25, 90, 20)]: tel_pos = Position.altAzToRaDec(Position.fromAltAz(Coord.fromD(alt), Coord.fromD(az)), site['latitude'], site.LST()) model = Model.solve_dome_azimuth(tel_pos, site.LST_inRads()) print 'here', alt, az, model, model - az
def slewToAltAz(self, position): site = self._getSite() if self.slewToRaDec(Position.altAzToRaDec(position, site['latitude'], site.LST()).toEpoch(Epoch.NOW)): self.stopTracking() return True return False