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))
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))
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)
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)
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))
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))