Exemple #1
0
 def fit_model_altaz(self, params, a_az, r_az, a_el, r_el):
     if self.verbose > 1:
         print 'computing', self.latitude, self.latitude_r, params, a_az, r_az, a_el, r_el
     return libnova.angular_separation(
         np.degrees(a_az + self.model_az(params, a_az, a_el)),
         np.degrees(a_el + self.model_el(params, a_az, a_el)),
         np.degrees(r_az), np.degrees(r_el))
Exemple #2
0
 def fit_model_gem(self, params, a_ra, r_ra, a_dec, r_dec):
     if self.verbose > 1:
         print 'computing', self.latitude, self.latitude_r, params, a_ra, r_ra, a_dec, r_dec
     return libnova.angular_separation(
         np.degrees(a_ra + self.model_ha(params, a_ra, a_dec)),
         np.degrees(a_dec + self.model_dec(params, a_ra, a_dec)),
         np.degrees(r_ra), np.degrees(r_dec))
Exemple #3
0
    def process_files(self, filenames, flips):
        obsmatch = re.compile('#\s*(\S*)\s+(\S*)\s+(\S*)\s+(\S*)\s*')

        frmt = "astrometry"

        rdata = []

        for filename in filenames:
            f = open(filename)
            # skip first line
            f.readline()
            line = f.readline()
            while not (line == ''):
                if line[0] == '#':
                    m = obsmatch.match(line)
                    if m:
                        if m.group(1) in ['observatory', 'gem']:
                            self.altaz = False
                        elif m.group(1) in ['altaz']:
                            self.altaz = True
                        elif m.group(1) in ['altaz-manual']:
                            self.altaz = True
                            frmt = "manual"
                        else:
                            line = f.readline()
                            continue

                        if self.latitude is None:
                            self.latitude = m.group(3)
                        elif self.def_latitude is None and self.latitude != m.group(
                                2):
                            sys.exit(
                                'Cannot (yet) perform calculation on two different latitudes: {0} {1}'
                                .format(self.latitude, m.group(3)))
                        # others are not yet used..will be interesting for refraction, if included in model
                        if self.longitude is None:
                            self.longitude = float(m.group(2))
                        if self.altitude is None:
                            self.altitude = float(m.group(4))
                else:
                    s = line.split()
                    self.indata.append(s)
                    rdata.append(s[:9])

                line = f.readline()

            f.close()

        if self.verbose:
            print "Input data", rdata

        if self.latitude is None:
            sys.exit(
                "You must specify latitude! Either through --latitude option, or in input file (on #observatory line)."
            )

        self.latitude_r = np.radians(float(self.latitude))

        data = []

        if self.altaz:
            if frmt == "manual":
                data = [(float(a_az), float(a_alt), float(a_az) + float(e_az),
                         float(a_alt) + float(e_alt), sn, float(mjd))
                        for sn, mjd, ra, dec, e_alt, e_az, a_alt, a_az in rdata
                        ]
            else:
                data = [(float(a_az), float(a_alt), float(r_az), float(r_alt),
                         sn, float(mjd)) for sn, mjd, lst, a_az, a_alt, ax_az,
                        ax_alt, r_az, r_alt in rdata]
        else:
            # data = [(float(lst) - flip_ra(float(a_ra),float(a_dec)), float(a_dec), float(lst) - float(r_ra), flip_dec(float(r_dec),float(a_dec)), sn, float(mjd)) for sn,mjd,lst,a_ra,a_dec,ax_ra,ax_dec,r_ra,r_dec in rdata]
            data = [(float(lst) - float(a_ra), float(a_dec),
                     float(lst) - flip_ra(float(r_ra), float(a_dec)),
                     flip_dec(float(r_dec), float(a_dec)), sn, float(mjd))
                    for sn, mjd, lst, a_ra, a_dec, ax_ra, ax_dec, r_ra, r_dec
                    in rdata]
            if flips == 'east':
                data = [d for d in data if abs(d[1]) > 90]
            elif flips == 'west':
                data = [d for d in data if abs(d[1]) < 90]

        a_data = np.array(data)
        if self.verbose:
            print "Parsed data", a_data

        if self.altaz:
            self.aa_az = np.array(a_data[:, 0], np.float)
            self.aa_alt = np.array(a_data[:, 1], np.float)
            self.ar_az = np.array(a_data[:, 2], np.float)
            self.ar_alt = np.array(a_data[:, 3], np.float)
        else:
            self.aa_ha = np.array(a_data[:, 0], np.float)
            self.aa_dec = np.array(a_data[:, 1], np.float)
            self.ar_ha = np.array(a_data[:, 2], np.float)
            self.ar_dec = np.array(a_data[:, 3], np.float)

        self.mjd = np.array(a_data[:, 5], np.float)

        # prepare for X ticks positions
        last_mjd = 0
        last_mjd_hour = 0
        self.mjd_ticks = {}
        self.mjd_hours = {}

        for m in range(0, len(self.mjd)):
            jd = self.mjd[m]
            if last_mjd != round(jd):
                last_mjd = round(jd)
                self.mjd_ticks[m] = last_mjd
            if last_mjd_hour != round(jd * 24):
                last_mjd_hour = round(jd * 24)
                self.mjd_hours[m] = jd

        if self.altaz:
            self.rad_aa_az = np.radians(self.aa_az)
            self.rad_aa_alt = np.radians(self.aa_alt)
            self.rad_ar_az = np.radians(self.ar_az)
            self.rad_ar_alt = np.radians(self.ar_alt)

            # transform to ha/dec
            self.aa_ha, self.aa_dec = self.hrz_to_equ(self.rad_aa_az,
                                                      self.rad_aa_alt)
            self.ar_ha, self.ar_dec = self.hrz_to_equ(self.rad_ar_az,
                                                      self.rad_ar_alt)

            self.rad_aa_ha = np.radians(self.aa_ha)
            self.rad_aa_dec = np.radians(self.aa_dec)
            self.rad_ar_ha = np.radians(self.ar_ha)
            self.rad_ar_dec = np.radians(self.ar_dec)
        else:
            self.rad_aa_ha = np.radians(self.aa_ha)
            self.rad_aa_dec = np.radians(self.aa_dec)
            self.rad_ar_ha = np.radians(self.ar_ha)
            self.rad_ar_dec = np.radians(self.ar_dec)

            # transform to alt/az
            self.aa_alt, self.aa_az = self.equ_to_hrz(self.rad_aa_ha,
                                                      self.rad_aa_dec)
            self.ar_alt, self.ar_az = self.equ_to_hrz(self.rad_ar_ha,
                                                      self.rad_ar_dec)

            self.rad_aa_az = np.radians(self.aa_az)
            self.rad_aa_alt = np.radians(self.aa_alt)
            self.rad_ar_az = np.radians(self.ar_az)
            self.rad_ar_alt = np.radians(self.ar_alt)

        self.diff_ha = self.aa_ha - self.ar_ha
        self.diff_corr_ha = self.diff_ha * np.cos(self.rad_aa_dec)
        self.diff_dec = self.aa_dec - self.ar_dec
        self.diff_angular_hadec = libnova.angular_separation(
            self.aa_ha, self.aa_dec, self.ar_ha, self.ar_dec)
        self.diff_angular_altaz = libnova.angular_separation(
            self.aa_az, self.aa_alt, self.ar_az, self.ar_alt)

        self.diff_alt = self.aa_alt - self.ar_alt
        self.diff_az = normalize_az_err(self.aa_az - self.ar_az)
        self.diff_corr_az = self.diff_az * np.cos(self.rad_aa_alt)
Exemple #4
0
	def process_files(self,filenames,flips):
		obsmatch = re.compile('#\s*(\S*)\s+(\S*)\s+(\S*)\s+(\S*)\s*')

		frmt = "astrometry"

		rdata = []

		for filename in filenames:
			f = open(filename)
			# skip first line
			f.readline()
			line = f.readline()
			while not(line == ''):
				if line[0] == '#':
					m = obsmatch.match(line)
					if m:
						if m.group(1) in ['observatory','gem']:
							self.altaz = False
						elif m.group(1) in ['altaz']:
							self.altaz = True
						elif m.group(1) in ['altaz-manual']:
							self.altaz = True
							frmt = "manual"
						else:
							line = f.readline()
							continue

						if self.latitude is None:
							self.latitude=m.group(3)
						elif self.def_latitude is None and self.latitude!=m.group(2):
							sys.exit('Cannot (yet) perform calculation on two different latitudes: {0} {1}'.format(self.latitude,m.group(3)))
						# others are not yet used..will be interesting for refraction, if included in model
						if self.longitude is None:
							self.longitude=float(m.group(2))
						if self.altitude is None:
							self.altitude=float(m.group(4))
				else:
					s = line.split()
					self.indata.append(s)
					rdata.append(s[:9])

				line = f.readline()

			f.close()
		
		if self.verbose:
			print "Input data",rdata

		if self.latitude is None:
			sys.exit("You must specify latitude! Either through --latitude option, or in input file (on #observatory line).")

		self.latitude_r = np.radians(float(self.latitude))

		data = []

		if self.altaz:
			if frmt == "manual":
				data = [(float(a_az), float(a_alt), float(a_az) + float(e_az), float(a_alt) + float(e_alt), sn, float(mjd)) for sn,mjd,ra,dec,e_alt,e_az,a_alt,a_az in rdata]
			else:
				data = [(float(a_az), float(a_alt), float(r_az), float(r_alt), sn, float(mjd)) for sn,mjd,lst,a_az,a_alt,ax_az,ax_alt,r_az,r_alt in rdata]
		else:
			# data = [(float(lst) - flip_ra(float(a_ra),float(a_dec)), float(a_dec), float(lst) - float(r_ra), flip_dec(float(r_dec),float(a_dec)), sn, float(mjd)) for sn,mjd,lst,a_ra,a_dec,ax_ra,ax_dec,r_ra,r_dec in rdata]
			data = [(float(lst) - float(a_ra), float(a_dec), float(lst) - flip_ra(float(r_ra),float(a_dec)), flip_dec(float(r_dec),float(a_dec)), sn, float(mjd)) for sn,mjd,lst,a_ra,a_dec,ax_ra,ax_dec,r_ra,r_dec in rdata]
			if flips == 'east':
				data = [d for d in data if abs(d[1]) > 90]
			elif flips == 'west':
				data = [d for d in data if abs(d[1]) < 90]

		a_data = np.array(data)
		if self.verbose:
			print "Parsed data",a_data

		if self.altaz:
			self.aa_az = np.array(a_data[:,0],np.float)
			self.aa_alt = np.array(a_data[:,1],np.float)
			self.ar_az = np.array(a_data[:,2],np.float)
			self.ar_alt = np.array(a_data[:,3],np.float)
		else:	
			self.aa_ha = np.array(a_data[:,0],np.float)
			self.aa_dec = np.array(a_data[:,1],np.float)
			self.ar_ha = np.array(a_data[:,2],np.float)
			self.ar_dec = np.array(a_data[:,3],np.float)
	
		self.mjd = np.array(a_data[:,5],np.float)

		# prepare for X ticks positions
		last_mjd = 0
		last_mjd_hour = 0
		self.mjd_ticks = {}
		self.mjd_hours = {}

		for m in range(0,len(self.mjd)):
			jd = self.mjd[m]
			if last_mjd != round(jd):
				last_mjd = round(jd)
				self.mjd_ticks[m] = last_mjd
			if last_mjd_hour != round(jd * 24):
				last_mjd_hour = round(jd * 24)
				self.mjd_hours[m] = jd


		if self.altaz:
			self.rad_aa_az = np.radians(self.aa_az)
			self.rad_aa_alt = np.radians(self.aa_alt)
			self.rad_ar_az = np.radians(self.ar_az)
			self.rad_ar_alt = np.radians(self.ar_alt)

			# transform to ha/dec
			self.aa_ha,self.aa_dec = self.hrz_to_equ(self.rad_aa_az,self.rad_aa_alt)
			self.ar_ha,self.ar_dec = self.hrz_to_equ(self.rad_ar_az,self.rad_ar_alt)

			self.rad_aa_ha = np.radians(self.aa_ha)
			self.rad_aa_dec = np.radians(self.aa_dec)
			self.rad_ar_ha = np.radians(self.ar_ha)
			self.rad_ar_dec = np.radians(self.ar_dec)
		else:
			self.rad_aa_ha = np.radians(self.aa_ha)
			self.rad_aa_dec = np.radians(self.aa_dec)
			self.rad_ar_ha = np.radians(self.ar_ha)
			self.rad_ar_dec = np.radians(self.ar_dec)

			# transform to alt/az
			self.aa_alt,self.aa_az = self.equ_to_hrz(self.rad_aa_ha,self.rad_aa_dec)
			self.ar_alt,self.ar_az = self.equ_to_hrz(self.rad_ar_ha,self.rad_ar_dec)

			self.rad_aa_az = np.radians(self.aa_az)
			self.rad_aa_alt = np.radians(self.aa_alt)
			self.rad_ar_az = np.radians(self.ar_az)
			self.rad_ar_alt = np.radians(self.ar_alt)

		self.diff_ha = self.aa_ha - self.ar_ha
		self.diff_corr_ha = self.diff_ha * np.cos(self.rad_aa_dec)
		self.diff_dec = self.aa_dec - self.ar_dec
		self.diff_angular_hadec = libnova.angular_separation(self.aa_ha,self.aa_dec,self.ar_ha,self.ar_dec)
		self.diff_angular_altaz = libnova.angular_separation(self.aa_az,self.aa_alt,self.ar_az,self.ar_alt)

		self.diff_alt = self.aa_alt - self.ar_alt
		self.diff_az = normalize_az_err(self.aa_az - self.ar_az)
		self.diff_corr_az = self.diff_az * np.cos(self.rad_aa_alt)
Exemple #5
0
	def fit_model_altaz(self,params,a_az,r_az,a_el,r_el):
		if self.verbose > 1:
			print 'computing', self.latitude, self.latitude_r, params, a_az, r_az, a_el, r_el
		return libnova.angular_separation(np.degrees(a_az + self.model_az(params,a_az,a_el)),np.degrees(a_el + self.model_el(params,a_az,a_el)),np.degrees(r_az),np.degrees(r_el))
Exemple #6
0
	def fit_model_gem(self,params,a_ra,r_ra,a_dec,r_dec):
		if self.verbose > 1:
			print 'computing', self.latitude, self.latitude_r, params, a_ra, r_ra, a_dec, r_dec
		return libnova.angular_separation(np.degrees(a_ra + self.model_ha(params,a_ra,a_dec)),np.degrees(a_dec + self.model_dec(params,a_ra,a_dec)),np.degrees(r_ra),np.degrees(r_dec))