def arc_RA(ra): """ arc_lat(lat): Draw an arc of constant RA 'latn' in degrees, return x, y """ ra_rad = ra * DEGTORAD L = []; B = [] for dec_rad in np.arange(-np.pi/2, np.pi/2, 0.01): l,b = slalib.sla_eqgal(ra_rad, dec_rad) L.append(l) ; B.append(b) L = np.asarray(L) ; B = np.asarray(B) L[L>np.pi] -= 2*np.pi X, Y = aitoff(L, B) x1 = X[0]; y1 = Y[0] pgmove(x1, y1) for x,y in zip (X,Y): d = np.sqrt((x-x1)*(x-x1) + (y-y1)*(y-y1)) if d < 10.: pgdraw(x,y) pgmove(x,y) x1 = x; y1 = y
def pltlegend(): pgsch(0.7) # Draw legend on declination arcs: list is combination of hour angles and label angles #for ra,angle in [ [0,55], [3,-15], [6,-90], [9,-45], [12,-5], [15,60], [18,60], [21,60]]: for ra,angle in [ [0,55], [3,-15], [6,-90], [9,-45], [12,-5], [15,60], [18,60], [21,60]]: l,b = slalib.sla_eqgal(ra*360/24. * DEGTORAD, 10.0 * DEGTORAD) if l>np.pi: l -= 2*np.pi x, y = aitoff(l, b) if ra != 12: pgptxt(x, y, angle, 0.5, "%dhr"%ra) # Draw legend on declination arcs for deg in [-60., -30., 0., 30., 60.]: l,b = slalib.sla_eqgal(270 * DEGTORAD, deg * DEGTORAD) if l>np.pi: l -= 2*np.pi x, y = aitoff(l, b) pgptxt(x, y, 60., 0., "%ddeg"%deg) pgsch(1.)
def eqdeg_to_galdeg(ra, decl): """ eqdeg_to_galdeg(ra, decl) Convert right ascension and declination (J2000)in degrees to galactic longitude and latitude in degrees. """ import slalib l, b = slalib.sla_eqgal(ra*psr_utils.DEGTORAD, decl*psr_utils.DEGTORAD) return (l*psr_utils.RADTODEG, b*psr_utils.RADTODEG)
def arc_DEC(dec): dec_rad = dec* DEGTORAD L = []; B = [] for ra_rad in np.arange(-np.pi, np.pi, 0.01): l,b = slalib.sla_eqgal(ra_rad, dec_rad) L.append(l) ; B.append(b) L = np.asarray(L) ; B = np.asarray(B) L[L>np.pi] -= 2*np.pi X, Y = aitoff(L, B) x1 = X[0]; y1 = Y[0] pgmove(x1, y1) for x,y in zip (X,Y): d = np.sqrt((x-x1)*(x-x1) + (y-y1)*(y-y1)) if d < 10.: pgdraw(x,y) pgmove(x,y) x1 = x; y1 = y
def __init__(self, parfilenm): self.FILE = parfilenm pf = open(parfilenm) for line in pf.readlines(): # Skip comments if line[0] == '#': continue # Convert any 'D-' or 'D+' to 'E-' or 'E+' line = line.replace("D-", "E-") line = line.replace("D+", "E+") splitline = line.split() # Skip blank lines if len(splitline) == 0: continue key = splitline[0] if key in str_keys: setattr(self, key, splitline[1]) elif key in float_keys: try: setattr(self, key, float(splitline[1])) except ValueError: pass if len( splitline ) == 3: # Some parfiles don't have flags, but do have errors if splitline[2] not in ['0', '1']: setattr(self, key + '_ERR', float(splitline[2])) if len(splitline) == 4: setattr(self, key + '_ERR', float(splitline[3])) # Deal with Ecliptic coords if (hasattr(self, 'BETA') and hasattr(self, 'LAMBDA')): setattr(self, 'ELAT', self.BETA) setattr(self, 'ELONG', self.LAMBDA) if (slalib and hasattr(self, 'ELAT') and hasattr(self, 'ELONG')): if hasattr(self, 'POSEPOCH'): epoch = self.POSEPOCH else: epoch = self.PEPOCH ra_rad, dec_rad = sla_ecleq(self.ELONG * pu.DEGTORAD, self.ELAT * pu.DEGTORAD, epoch) rstr = pu.coord_to_string(*pu.rad_to_hms(ra_rad)) dstr = pu.coord_to_string(*pu.rad_to_dms(dec_rad)) setattr(self, 'RAJ', rstr) setattr(self, 'DECJ', dstr) if hasattr(self, 'RAJ'): setattr(self, 'RA_RAD', pu.ra_to_rad(self.RAJ)) if hasattr(self, 'DECJ'): setattr(self, 'DEC_RAD', pu.dec_to_rad(self.DECJ)) # Compute the Galactic coords if (slalib and hasattr(self, 'RA_RAD') and hasattr(self, 'DEC_RAD')): l, b = sla_eqgal(self.RA_RAD, self.DEC_RAD) setattr(self, 'GLONG', l * pu.RADTODEG) setattr(self, 'GLAT', b * pu.RADTODEG) # Compute the Ecliptic coords if (slalib and hasattr(self, 'RA_RAD') and hasattr(self, 'DEC_RAD')): if hasattr(self, 'POSEPOCH'): epoch = self.POSEPOCH else: epoch = self.PEPOCH elon, elat = sla_eqecl(self.RA_RAD, self.DEC_RAD, epoch) setattr(self, 'ELONG', elon * pu.RADTODEG) setattr(self, 'ELAT', elat * pu.RADTODEG) if hasattr(self, 'P'): setattr(self, 'P0', self.P) if hasattr(self, 'P0'): setattr(self, 'F0', 1.0 / self.P0) if hasattr(self, 'F0'): setattr(self, 'P0', 1.0 / self.F0) if hasattr(self, 'FB0'): setattr(self, 'PB', (1.0 / self.FB0) / 86400.0) if hasattr(self, 'P0_ERR'): if hasattr(self, 'P1_ERR'): f, ferr, fd, fderr = pu.pferrs(self.P0, self.P0_ERR, self.P1, self.P1_ERR) setattr(self, 'F0_ERR', ferr) setattr(self, 'F1', fd) setattr(self, 'F1_ERR', fderr) else: f, fd, = pu.p_to_f(self.P0, self.P1) setattr(self, 'F0_ERR', self.P0_ERR / (self.P0 * self.P0)) setattr(self, 'F1', fd) if (hasattr(self, 'F0_ERR') and hasattr(self, 'F1_ERR')): p, perr, pd, pderr = pu.pferrs(self.F0, self.F0_ERR, self.F1, self.F1_ERR) setattr(self, 'P0_ERR', perr) setattr(self, 'P1', pd) setattr(self, 'P1_ERR', pderr) elif (hasattr(self, 'F0') and hasattr(self, 'F0_ERR')): setattr(self, 'P0_ERR', self.F0_ERR / (self.F0 * self.F0)) if hasattr(self, 'EPS1') and hasattr(self, 'EPS2'): ecc = math.sqrt(self.EPS1 * self.EPS1 + self.EPS2 * self.EPS2) omega = math.atan2(self.EPS1, self.EPS2) setattr(self, 'E', ecc) setattr(self, 'OM', omega * pu.RADTODEG) setattr(self, 'T0', self.TASC + self.PB * omega / pu.TWOPI) if hasattr(self, 'PB') and hasattr(self, 'A1') and not \ (hasattr(self, 'E') or hasattr(self, 'ECC')): setattr(self, 'E', 0.0) if hasattr(self, 'T0') and not hasattr(self, 'TASC'): setattr(self, 'TASC', self.T0 - self.PB * self.OM / 360.0) pf.close()
def __init__(self, parfilenm): self.FILE = parfilenm pf = open(parfilenm) for line in pf.readlines(): # Skip comments if line[0] == "#": continue # Convert any 'D-' or 'D+' to 'E-' or 'E+' line = line.replace("D-", "E-") line = line.replace("D+", "E+") splitline = line.split() # Skip blank lines if len(splitline) == 0: continue key = splitline[0] if key in str_keys: setattr(self, key, splitline[1]) elif key in float_keys: try: setattr(self, key, float(splitline[1])) except ValueError: pass if len(splitline) == 3: # Some parfiles don't have flags, but do have errors if splitline[2] not in ["0", "1"]: setattr(self, key + "_ERR", float(splitline[2])) if len(splitline) == 4: setattr(self, key + "_ERR", float(splitline[3])) # Deal with Ecliptic coords if hasattr(self, "BETA") and hasattr(self, "LAMBDA"): setattr(self, "ELAT", self.BETA) setattr(self, "ELONG", self.LAMBDA) if slalib and hasattr(self, "ELAT") and hasattr(self, "ELONG"): if hasattr(self, "POSEPOCH"): epoch = self.POSEPOCH else: epoch = self.PEPOCH ra_rad, dec_rad = sla_ecleq(self.ELONG * pu.DEGTORAD, self.ELAT * pu.DEGTORAD, epoch) rstr = pu.coord_to_string(*pu.rad_to_hms(ra_rad)) dstr = pu.coord_to_string(*pu.rad_to_dms(dec_rad)) setattr(self, "RAJ", rstr) setattr(self, "DECJ", dstr) if hasattr(self, "RAJ"): setattr(self, "RA_RAD", pu.ra_to_rad(self.RAJ)) if hasattr(self, "DECJ"): setattr(self, "DEC_RAD", pu.dec_to_rad(self.DECJ)) # Compute the Galactic coords if slalib and hasattr(self, "RA_RAD") and hasattr(self, "DEC_RAD"): l, b = sla_eqgal(self.RA_RAD, self.DEC_RAD) setattr(self, "GLONG", l * pu.RADTODEG) setattr(self, "GLAT", b * pu.RADTODEG) # Compute the Ecliptic coords if slalib and hasattr(self, "RA_RAD") and hasattr(self, "DEC_RAD"): if hasattr(self, "POSEPOCH"): epoch = self.POSEPOCH else: epoch = self.PEPOCH elon, elat = sla_eqecl(self.RA_RAD, self.DEC_RAD, epoch) setattr(self, "ELONG", elon * pu.RADTODEG) setattr(self, "ELAT", elat * pu.RADTODEG) if hasattr(self, "P"): setattr(self, "P0", self.P) if hasattr(self, "P0"): setattr(self, "F0", 1.0 / self.P0) if hasattr(self, "F0"): setattr(self, "P0", 1.0 / self.F0) if hasattr(self, "FB0"): setattr(self, "PB", (1.0 / self.FB0) / 86400.0) if hasattr(self, "P0_ERR"): if hasattr(self, "P1_ERR"): f, ferr, fd, fderr = pu.pferrs(self.P0, self.P0_ERR, self.P1, self.P1_ERR) setattr(self, "F0_ERR", ferr) setattr(self, "F1", fd) setattr(self, "F1_ERR", fderr) else: f, fd, = pu.p_to_f(self.P0, self.P1) setattr(self, "F0_ERR", self.P0_ERR / (self.P0 * self.P0)) setattr(self, "F1", fd) if hasattr(self, "F0_ERR"): if hasattr(self, "F1_ERR"): p, perr, pd, pderr = pu.pferrs(self.F0, self.F0_ERR, self.F1, self.F1_ERR) setattr(self, "P0_ERR", perr) setattr(self, "P1", pd) setattr(self, "P1_ERR", pderr) else: p, pd, = pu.p_to_f(self.F0, self.F1) setattr(self, "P0_ERR", self.F0_ERR / (self.F0 * self.F0)) setattr(self, "P1", pd) if hasattr(self, "EPS1") and hasattr(self, "EPS2"): ecc = math.sqrt(self.EPS1 * self.EPS1 + self.EPS2 * self.EPS2) omega = math.atan2(self.EPS1, self.EPS2) setattr(self, "E", ecc) setattr(self, "OM", omega * pu.RADTODEG) setattr(self, "T0", self.TASC + self.PB * omega / pu.TWOPI) if hasattr(self, "PB") and hasattr(self, "A1") and not (hasattr(self, "E") or hasattr(self, "ECC")): setattr(self, "E", 0.0) if hasattr(self, "T0") and not hasattr(self, "TASC"): setattr(self, "TASC", self.T0 - self.PB * self.OM / 360.0) pf.close()
def read(self, parfilenm): self.FILE = parfilenm #print parfilenm pf = open(parfilenm) for line in pf.readlines(): # Convert any 'D-' or 'D+' to 'E-' or 'E+' line = line.replace("D-", "E-") line = line.replace("D+", "E+") try: splitline = line.split() key = splitline[0] if key in str_keys: setattr(self, key, splitline[1]) elif key in float_keys: try: setattr(self, key, float(splitline[1])) except ValueError: pass if len( splitline ) == 3: # Some parfiles don't have flags, but do have errors if splitline[2] not in ['0', '1']: setattr(self, key + '_ERR', float(splitline[2])) if len(splitline) == 4: setattr(self, key + '_ERR', float(splitline[3])) except: if line.strip(): print ' ', line # Read PSR name if hasattr(self, 'PSR'): setattr(self, 'PSR', self.PSR) if hasattr(self, 'PSRJ'): setattr(self, 'PSRJ', self.PSRJ) # Deal with Ecliptic coords if (hasattr(self, 'BETA') and hasattr(self, 'LAMBDA')): self.use_eclip = True setattr(self, 'ELAT', self.BETA) setattr(self, 'ELONG', self.LAMBDA) if (slalib and hasattr(self, 'ELAT') and hasattr(self, 'ELONG')): self.use_eclip = True if hasattr(self, 'POSEPOCH'): epoch = self.POSEPOCH else: epoch = self.PEPOCH ra_rad, dec_rad = sla_ecleq(self.ELONG * pu.DEGTORAD, self.ELAT * pu.DEGTORAD, epoch) rstr = pu.coord_to_string(*pu.rad_to_hms(ra_rad)) dstr = pu.coord_to_string(*pu.rad_to_dms(dec_rad)) setattr(self, 'RAJ', rstr) setattr(self, 'DECJ', dstr) if (slalib and hasattr(self, 'ELAT') and hasattr(self, 'ELONG')): setattr(self, 'PMELONG', self.PMELONG) setattr(self, 'PMELAT', self.PMELAT) if hasattr(self, 'RAJ'): setattr(self, 'RA_RAD', pu.ra_to_rad(self.RAJ)) if hasattr(self, 'DECJ'): setattr(self, 'DEC_RAD', pu.dec_to_rad(self.DECJ)) # Compute the Galactic coords if (slalib and hasattr(self, 'RA_RAD') and hasattr(self, 'DEC_RAD')): l, b = sla_eqgal(self.RA_RAD, self.DEC_RAD) setattr(self, 'GLONG', l * pu.RADTODEG) setattr(self, 'GLAT', b * pu.RADTODEG) # Compute the Ecliptic coords if (slalib and hasattr(self, 'RA_RAD') and hasattr(self, 'DEC_RAD')): if hasattr(self, 'POSEPOCH'): epoch = self.POSEPOCH else: epoch = self.PEPOCH elon, elat = sla_eqecl(self.RA_RAD, self.DEC_RAD, epoch) setattr(self, 'ELONG', elon * pu.RADTODEG) setattr(self, 'ELAT', elat * pu.RADTODEG) if hasattr(self, 'P'): setattr(self, 'P0', self.P) if hasattr(self, 'P0'): setattr(self, 'F0', 1.0 / self.P0) if hasattr(self, 'F0'): setattr(self, 'P0', 1.0 / self.F0) if hasattr(self, 'F1'): setattr(self, 'P1', -self.F1 / (self.F0 * self.F0)) if hasattr(self, 'FB0'): setattr(self, 'PB', (1.0 / self.FB0) / 86400.0) if hasattr(self, 'P0_ERR'): if hasattr(self, 'P1_ERR'): f, ferr, fd, fderr = pu.pferrs(self.P0, self.P0_ERR, self.P1, self.P1_ERR) setattr(self, 'F0_ERR', ferr) setattr(self, 'F1', fd) setattr(self, 'F1_ERR', fderr) else: f, fd, = pu.p_to_f(self.P0, self.P1) setattr(self, 'F0_ERR', self.P0_ERR / (self.P0 * self.P0)) setattr(self, 'F1', fd) if hasattr(self, 'F0_ERR'): if hasattr(self, 'F1_ERR'): p, perr, pd, pderr = pu.pferrs(self.F0, self.F0_ERR, self.F1, self.F1_ERR) setattr(self, 'P0_ERR', perr) setattr(self, 'P1', pd) setattr(self, 'P1_ERR', pderr) else: p, pd, = pu.p_to_f(self.F0, self.F1) setattr(self, 'P0_ERR', self.F0_ERR / (self.F0 * self.F0)) setattr(self, 'P1', pd) if hasattr(self, 'DM'): setattr(self, 'DM', self.DM) if hasattr(self, 'DM1'): setattr(self, 'DM1', self.DM1) if hasattr(self, 'DM2'): setattr(self, 'DM2', self.DM2) if hasattr(self, 'EPS1') and hasattr(self, 'EPS2'): self.use_ell = True ecc = math.sqrt(self.EPS1 * self.EPS1 + self.EPS2 * self.EPS2) omega = math.atan2(self.EPS1, self.EPS2) if self.EPS1 == 0.0 and self.EPS2 == 0.0: ecc_err = pow( pow(self.EPS1_ERR, 2) + pow(self.EPS2_ERR, 2), .5) else: ecc_err = pow( pow(self.EPS1 * self.EPS1_ERR, 2) + pow(self.EPS2 * self.EPS2_ERR, 2), 0.5) / ecc setattr(self, 'ECC', ecc) setattr(self, 'ECC_ERR', ecc_err) setattr(self, 'OM', omega) if hasattr(self, 'PB') and hasattr(self, 'A1') and not hasattr(self, 'ECC'): setattr(self, 'ECC', 0.0) if hasattr(self, 'BINARY'): setattr(self, 'BINARY', self.BINARY) if hasattr(self, 'KIN'): setattr(self, 'SINI', math.sin(self.KIN * np.pi / 180.)) setattr( self, 'SINI_ERR', math.sin(self.KIN * np.pi / 180.) - math.sin(self.KIN * np.pi / 180. - self.KIN_ERR * np.pi / 180.)) pf.close()
def __init__(self, parfilenm): self.FILE = parfilenm pf = open(parfilenm) for line in pf.readlines(): # Convert any 'D-' or 'D+' to 'E-' or 'E+' line = line.replace("D-", "E-") line = line.replace("D+", "E+") splitline = line.split() key = splitline[0] if key in str_keys: setattr(self, key, splitline[1]) elif key in float_keys: try: setattr(self, key, float(splitline[1])) except ValueError: pass if len(splitline)==3: # Some parfiles don't have flags, but do have errors if splitline[2] not in ['0', '1']: setattr(self, key+'_ERR', float(splitline[2])) if len(splitline)==4: setattr(self, key+'_ERR', float(splitline[3])) # Deal with Ecliptic coords if (hasattr(self, 'BETA') and hasattr(self, 'LAMBDA')): setattr(self, 'ELAT', self.BETA) setattr(self, 'ELONG', self.LAMBDA) if (slalib and hasattr(self, 'ELAT') and hasattr(self, 'ELONG')): if hasattr(self, 'POSEPOCH'): epoch = self.POSEPOCH else: epoch = self.PEPOCH ra_rad, dec_rad = sla_ecleq(self.ELONG*pu.DEGTORAD, self.ELAT*pu.DEGTORAD, epoch) rstr = pu.coord_to_string(*pu.rad_to_hms(ra_rad)) dstr = pu.coord_to_string(*pu.rad_to_dms(dec_rad)) setattr(self, 'RAJ', rstr) setattr(self, 'DECJ', dstr) if hasattr(self, 'RAJ'): setattr(self, 'RA_RAD', pu.ra_to_rad(self.RAJ)) if hasattr(self, 'DECJ'): setattr(self, 'DEC_RAD', pu.dec_to_rad(self.DECJ)) # Compute the Galactic coords if (slalib and hasattr(self, 'RA_RAD') and hasattr(self, 'DEC_RAD')): l, b = sla_eqgal(self.RA_RAD, self.DEC_RAD) setattr(self, 'GLONG', l*pu.RADTODEG) setattr(self, 'GLAT', b*pu.RADTODEG) # Compute the Ecliptic coords if (slalib and hasattr(self, 'RA_RAD') and hasattr(self, 'DEC_RAD')): if hasattr(self, 'POSEPOCH'): epoch = self.POSEPOCH else: epoch = self.PEPOCH elon, elat = sla_eqecl(self.RA_RAD, self.DEC_RAD, epoch) setattr(self, 'ELONG', elon*pu.RADTODEG) setattr(self, 'ELAT', elat*pu.RADTODEG) if hasattr(self, 'P'): setattr(self, 'P0', self.P) if hasattr(self, 'P0'): setattr(self, 'F0', 1.0/self.P0) if hasattr(self, 'F0'): setattr(self, 'P0', 1.0/self.F0) if hasattr(self, 'FB0'): setattr(self, 'PB', (1.0/self.FB0)/86400.0) if hasattr(self, 'P0_ERR'): if hasattr(self, 'P1_ERR'): f, ferr, fd, fderr = pu.pferrs(self.P0, self.P0_ERR, self.P1, self.P1_ERR) setattr(self, 'F0_ERR', ferr) setattr(self, 'F1', fd) setattr(self, 'F1_ERR', fderr) else: f, fd, = pu.p_to_f(self.P0, self.P1) setattr(self, 'F0_ERR', self.P0_ERR/(self.P0*self.P0)) setattr(self, 'F1', fd) if hasattr(self, 'F0_ERR'): if hasattr(self, 'F1_ERR'): p, perr, pd, pderr = pu.pferrs(self.F0, self.F0_ERR, self.F1, self.F1_ERR) setattr(self, 'P0_ERR', perr) setattr(self, 'P1', pd) setattr(self, 'P1_ERR', pderr) else: p, pd, = pu.p_to_f(self.F0, self.F1) setattr(self, 'P0_ERR', self.F0_ERR/(self.F0*self.F0)) setattr(self, 'P1', pd) if hasattr(self, 'EPS1') and hasattr(self, 'EPS2'): ecc = math.sqrt(self.EPS1 * self.EPS1 + self.EPS2 * self.EPS2) omega = math.atan2(self.EPS1, self.EPS2) setattr(self, 'E', ecc) setattr(self, 'OM', omega * pu.RADTODEG) setattr(self, 'T0', self.TASC + self.PB * omega/pu.TWOPI) if hasattr(self, 'PB') and hasattr(self, 'A1') and not \ (hasattr(self, 'E') or hasattr(self, 'ECC')): setattr(self, 'E', 0.0) if hasattr(self, 'T0') and hasattr(self, 'PB') and hasattr(self, 'OM') and not hasattr(self, 'TASC'): setattr(self, 'TASC', self.T0 - self.PB * self.OM/360.0) pf.close()
def __init__(self, parfilenm): self.FILE = parfilenm pf = open(parfilenm) for line in pf.readlines(): # Skip comments if line[0]=='#': continue # Convert any 'D-' or 'D+' to 'E-' or 'E+' line = line.replace("D-", "E-") line = line.replace("D+", "E+") splitline = line.split() # Skip blank lines if len(splitline)==0: continue key = splitline[0] # Regex checks for non-digit chars, followed by digit chars m1 = re.search(r'(\D+)(\d+)$', key) # This one looks for the DMX[RF][12]_* params m2 = re.search(r'(\D+\d+_)(\d+)$', key) if key == "JUMP": if splitline[3] not in ['0', '1']: setattr(self, key+'_%s'%splitline[2], float(splitline[3])) if len(splitline)==5: if splitline[4] not in ['0', '1']: setattr(self, key+'_%s'%splitline[2]+'_ERR', float(splitline[4])) elif len(splitline)==6: setattr(self, key+'_%s'%splitline[2]+'_ERR', float(splitline[5])) if key in str_keys: setattr(self, key, splitline[1]) elif key in float_keys: try: setattr(self, key, float(splitline[1])) except ValueError: pass elif m1 is not None: m = m1 if m2 is not None: m = m2 if m.group(1) in floatn_keys: try: setattr(self, key, float(splitline[1])) except ValueError: pass if len(splitline)==3: # Some parfiles don't have flags, but do have errors if splitline[2] not in ['0', '1']: setattr(self, key+'_ERR', float(splitline[2])) if len(splitline)==4: setattr(self, key+'_ERR', float(splitline[3])) # Deal with Ecliptic coords if (hasattr(self, 'BETA') and hasattr(self, 'LAMBDA')): setattr(self, 'ELAT', self.BETA) setattr(self, 'ELONG', self.LAMBDA) if (slalib and hasattr(self, 'ELAT') and hasattr(self, 'ELONG')): if hasattr(self, 'POSEPOCH'): epoch = self.POSEPOCH else: epoch = self.PEPOCH ra_rad, dec_rad = sla_ecleq(self.ELONG*pu.DEGTORAD, self.ELAT*pu.DEGTORAD, epoch) rstr = pu.coord_to_string(*pu.rad_to_hms(ra_rad)) dstr = pu.coord_to_string(*pu.rad_to_dms(dec_rad)) setattr(self, 'RAJ', rstr) setattr(self, 'DECJ', dstr) if hasattr(self, 'RAJ'): setattr(self, 'RA_RAD', pu.ra_to_rad(self.RAJ)) if hasattr(self, 'DECJ'): setattr(self, 'DEC_RAD', pu.dec_to_rad(self.DECJ)) # Compute the Galactic coords if (slalib and hasattr(self, 'RA_RAD') and hasattr(self, 'DEC_RAD')): l, b = sla_eqgal(self.RA_RAD, self.DEC_RAD) setattr(self, 'GLONG', l*pu.RADTODEG) setattr(self, 'GLAT', b*pu.RADTODEG) # Compute the Ecliptic coords if (slalib and hasattr(self, 'RA_RAD') and hasattr(self, 'DEC_RAD')): if hasattr(self, 'POSEPOCH'): epoch = self.POSEPOCH else: epoch = self.PEPOCH elon, elat = sla_eqecl(self.RA_RAD, self.DEC_RAD, epoch) setattr(self, 'ELONG', elon*pu.RADTODEG) setattr(self, 'ELAT', elat*pu.RADTODEG) if hasattr(self, 'P'): setattr(self, 'P0', self.P) if hasattr(self, 'P0'): setattr(self, 'F0', 1.0/self.P0) if hasattr(self, 'F0'): setattr(self, 'P0', 1.0/self.F0) if hasattr(self, 'FB0'): setattr(self, 'PB', (1.0/self.FB0)/86400.0) if hasattr(self, 'P0_ERR'): if hasattr(self, 'P1_ERR'): f, ferr, fd, fderr = pu.pferrs(self.P0, self.P0_ERR, self.P1, self.P1_ERR) setattr(self, 'F0_ERR', ferr) setattr(self, 'F1', fd) setattr(self, 'F1_ERR', fderr) else: f, fd, = pu.p_to_f(self.P0, self.P1) setattr(self, 'F0_ERR', self.P0_ERR/(self.P0*self.P0)) setattr(self, 'F1', fd) else: if hasattr(self, 'P1'): f, fd, = pu.p_to_f(self.P0, self.P1) setattr(self, 'F1', fd) elif hasattr(self, 'F1'): p, pd, = pu.p_to_f(self.F0, self.F1) setattr(self, 'P1', pd) if (hasattr(self, 'F0_ERR') and hasattr(self, 'F1_ERR')): p, perr, pd, pderr = pu.pferrs(self.F0, self.F0_ERR, self.F1, self.F1_ERR) setattr(self, 'P0_ERR', perr) setattr(self, 'P1', pd) setattr(self, 'P1_ERR', pderr) elif (hasattr(self, 'F0') and hasattr(self, 'F0_ERR')): setattr(self, 'P0_ERR', self.F0_ERR/(self.F0*self.F0)) if hasattr(self, 'EPS1') and hasattr(self, 'EPS2'): ecc = math.sqrt(self.EPS1 * self.EPS1 + self.EPS2 * self.EPS2) omega = math.atan2(self.EPS1, self.EPS2) setattr(self, 'E', ecc) setattr(self, 'OM', omega * pu.RADTODEG) setattr(self, 'T0', self.TASC + self.PB * omega/pu.TWOPI) if hasattr(self, 'PB') and hasattr(self, 'A1') and not \ (hasattr(self, 'E') or hasattr(self, 'ECC')): setattr(self, 'E', 0.0) if hasattr(self, 'T0') and not hasattr(self, 'TASC'): setattr(self, 'TASC', self.T0 - self.PB * self.OM/360.0) pf.close()
def __init__(self, parfilenm): self.FILE = parfilenm pf = open(parfilenm) for line in pf.readlines(): # Skip comments if line[0] == '#': continue # Convert any 'D-' or 'D+' to 'E-' or 'E+' line = line.replace("D-", "E-") line = line.replace("D+", "E+") splitline = line.split() # Skip blank lines if len(splitline) == 0: continue key = splitline[0] # Regex checks for non-digit chars, followed by digit chars m1 = re.search(r'(\D+)(\d+)$', key) # This one looks for the DMX[RF][12]_* params m2 = re.search(r'(\D+\d+_)(\d+)$', key) if key == "JUMP": if splitline[3] not in ['0', '1']: setattr(self, key + '_%s' % splitline[2], float(splitline[3])) if len(splitline) == 5: if splitline[4] not in ['0', '1']: setattr(self, key + '_%s' % splitline[2] + '_ERR', float(splitline[4])) elif len(splitline) == 6: setattr(self, key + '_%s' % splitline[2] + '_ERR', float(splitline[5])) if key in str_keys: setattr(self, key, splitline[1]) elif key in float_keys: try: setattr(self, key, float(splitline[1])) except ValueError: pass elif m1 is not None: m = m1 if m2 is not None: m = m2 if m.group(1) in floatn_keys: try: setattr(self, key, float(splitline[1])) except ValueError: pass if len( splitline ) == 3: # Some parfiles don't have flags, but do have errors if splitline[2] not in ['0', '1']: setattr(self, key + '_ERR', float(splitline[2])) if len(splitline) == 4: setattr(self, key + '_ERR', float(splitline[3])) # Deal with Ecliptic coords if (hasattr(self, 'BETA') and hasattr(self, 'LAMBDA')): setattr(self, 'ELAT', self.BETA) setattr(self, 'ELONG', self.LAMBDA) if (slalib and hasattr(self, 'ELAT') and hasattr(self, 'ELONG')): # TEMPO's ecliptic coords are always based on J2000 epoch ra_rad, dec_rad = sla_ecleq(self.ELONG * pc.DEGTORAD, self.ELAT * pc.DEGTORAD, J2000) rstr = pu.coord_to_string(*pu.rad_to_hms(ra_rad)) dstr = pu.coord_to_string(*pu.rad_to_dms(dec_rad)) setattr(self, 'RAJ', rstr) setattr(self, 'DECJ', dstr) if hasattr(self, 'RAJ'): setattr(self, 'RA_RAD', pu.ra_to_rad(self.RAJ)) if hasattr(self, 'DECJ'): setattr(self, 'DEC_RAD', pu.dec_to_rad(self.DECJ)) # Compute the Galactic coords if (slalib and hasattr(self, 'RA_RAD') and hasattr(self, 'DEC_RAD')): l, b = sla_eqgal(self.RA_RAD, self.DEC_RAD) setattr(self, 'GLONG', l * pc.RADTODEG) setattr(self, 'GLAT', b * pc.RADTODEG) # Compute the Ecliptic coords if (slalib and hasattr(self, 'RA_RAD') and hasattr(self, 'DEC_RAD')): # TEMPO's ecliptic coords are always based on J2000 epoch elon, elat = sla_eqecl(self.RA_RAD, self.DEC_RAD, J2000) setattr(self, 'ELONG', elon * pc.RADTODEG) setattr(self, 'ELAT', elat * pc.RADTODEG) if hasattr(self, 'P'): setattr(self, 'P0', self.P) if hasattr(self, 'P0'): setattr(self, 'F0', 1.0 / self.P0) if hasattr(self, 'F0'): setattr(self, 'P0', 1.0 / self.F0) if hasattr(self, 'FB0'): setattr(self, 'PB', (1.0 / self.FB0) / pc.SECPERDAY) if hasattr(self, 'P0_ERR'): if hasattr(self, 'P1_ERR'): f, ferr, fd, fderr = pu.pferrs(self.P0, self.P0_ERR, self.P1, self.P1_ERR) setattr(self, 'F0_ERR', ferr) setattr(self, 'F1', fd) setattr(self, 'F1_ERR', fderr) else: f, fd, = pu.p_to_f(self.P0, self.P1) setattr(self, 'F0_ERR', self.P0_ERR / (self.P0 * self.P0)) setattr(self, 'F1', fd) else: if hasattr(self, 'P1'): f, fd, = pu.p_to_f(self.P0, self.P1) setattr(self, 'F1', fd) elif hasattr(self, 'F1'): p, pd, = pu.p_to_f(self.F0, self.F1) setattr(self, 'P1', pd) if (hasattr(self, 'F0_ERR') and hasattr(self, 'F1_ERR')): p, perr, pd, pderr = pu.pferrs(self.F0, self.F0_ERR, self.F1, self.F1_ERR) setattr(self, 'P0_ERR', perr) setattr(self, 'P1', pd) setattr(self, 'P1_ERR', pderr) elif (hasattr(self, 'F0') and hasattr(self, 'F0_ERR')): setattr(self, 'P0_ERR', self.F0_ERR / (self.F0 * self.F0)) if hasattr(self, 'EPS1') and hasattr(self, 'EPS2'): ecc = math.sqrt(self.EPS1 * self.EPS1 + self.EPS2 * self.EPS2) omega = math.atan2(self.EPS1, self.EPS2) setattr(self, 'E', ecc) setattr(self, 'OM', omega * pc.RADTODEG) setattr(self, 'T0', self.TASC + self.PB * omega / pc.TWOPI) if hasattr(self, 'PB') and hasattr(self, 'A1') and not \ (hasattr(self, 'E') or hasattr(self, 'ECC')): setattr(self, 'E', 0.0) if hasattr(self, 'T0') and not hasattr(self, 'TASC'): setattr(self, 'TASC', self.T0 - self.PB * self.OM / 360.0) if hasattr(self, 'E') and not hasattr(self, 'ECC'): setattr(self, 'ECC', self.E) if not hasattr(self, 'EPS1'): if hasattr(self, 'E_ERR'): setattr(self, 'ECC_ERR', self.E_ERR) if hasattr(self, 'ECC') and not hasattr(self, 'E'): setattr(self, 'E', self.ECC) setattr(self, 'E_ERR', self.ECC_ERR) pf.close()
def main(): parser = OptionParser(usage) parser.add_option("-a", "--all", action="store_true", dest="all_pointings", default=False, help="Display all pointings on the map") (opts, args) = parser.parse_args() # Scan files db = Database(db="local-SBON512") DBconn = db.conn DBcursor = db.cursor #QUERY = "SELECT H.right_ascension, H.declination, H.galactic_longitude, H.galactic_latitude FROM headers as H LEFT JOIN processing as P ON P.obs_id=H.obs_id" if opts.all_pointings: QUERY = "SELECT G.right_ascension, G.declination FROM NRT_grid as G RIGHT JOIN processing as H ON H.grid_id=G.grid_id WHERE (H.proc_stat='o' OR H.proc_stat='f' OR H.proc_stat='r' OR H.proc_stat='e' OR H.proc_stat='d' OR H.proc_stat='w')" else: QUERY = "SELECT G.right_ascension, G.declination FROM NRT_grid as G RIGHT JOIN processing as H ON H.grid_id=G.grid_id WHERE G.is_SPAN=TRUE AND (H.proc_stat='o' OR H.proc_stat='f' OR H.proc_stat='r' OR H.proc_stat='e' OR H.proc_stat='d' OR H.proc_stat='w')" DBcursor.execute(QUERY) results_query = DBcursor.fetchall() l = []; b = [] for row in results_query: ra = ra_to_rad(row[0]) dec = dec_to_rad(row[1]) lon, lat = slalib.sla_eqgal(ra, dec) if lon > np.pi: lon-= 2*np.pi if lon < -np.pi: lon+= 2*np.pi l.append(lon) b.append(lat) pgopen("/xw") #pgopen("plot.ps/cps") pgsvp(0., 1., 0.15, .85) #pgwnad(180., -180., -90., 90.) #pgswin(180., -180., -60., 60.) pgswin(180., -10., -60., 60.) pltframe() print "Number of observed beams:", len(l) pgmtxt('BL', 2., 0., 0., "Number of observed beams: %d"%len(l)) # Display the pointings x, y = aitoff(np.asarray(l), np.asarray(b)) #pgpt(x*90, y*90, 21) pgsch(0.7) pgpt(x, y, 17) #for i,j,k,l in zip(l,b,x*90, y*90): #print i,j,k,l # 1st zone xlim = np.array([72,150,150,72,72]) * DEGTORAD ylim = np.array([3.5,3.5,5.,5.,3.5]) * DEGTORAD x, y = aitoff(xlim, ylim) pgline(x,y) # 2nd zone xlim = np.array([79,150,150,79,79]) * DEGTORAD ylim = np.array([-3.5,-3.5,-5.,-5.,-3.5]) * DEGTORAD x, y = aitoff(xlim, ylim) pgline(x,y) pgend() DBconn.close()