def decstr_to_rad(decstr): """ decstr_to_rad(decstr) Convert declination string of the form DDMMSS.SSSS to declination in radians """ decstr = str(decstr) # Ensure decstr is string, not int or float sign, d, m, s = parse_decstr(decstr) return sign_to_int(sign)*psr_utils.dms_to_rad(float(d), float(m), float(s))
def __init__(self, line): parts = line.split()[1:] part_index = 0 param_index = 0 # print parts while param_index < len(params): param = params[param_index] # print param, parts[part_index] if param=="NAME": if not parts[part_index]=='*': self.name = parts[part_index][1:] else: self.name = "" elif param=="PSRJ": if not parts[part_index]=='*': self.jname = parts[part_index][1:] if self.name == self.jname: self.name = "" elif param=="RAJ": if not parts[part_index]=='*': hms = map(float, parts[part_index].split(':')) if len(hms)==3: h, m, s = hms elif len(hms)==2: h, m = hms s = 0.0 elif len(hms)==1: h = hms m = s = 0.0 self.ra = psr_utils.hms_to_rad(h, m, s) self.raerr = float(parts[part_index+1]) * psr_utils.SECTORAD part_index += 1 elif param=="DECJ": if not parts[part_index]=='*': dms = map(float, parts[part_index].split(':')) if len(dms)==3: d, m, s = dms elif len(dms)==2: d, m = dms s = 0.0 elif len(dms)==1: d = dms m = s = 0.0 # Fixed silly dec=-0.0 bug if parts[part_index].split(":")[0]=="-00": m = -m s = -s self.dec = psr_utils.dms_to_rad(d, m, s) self.decerr = float(parts[part_index+1]) * psr_utils.ARCSECTORAD part_index += 1 elif param=="PMRA": if not parts[part_index]=='*': self.pmra, self.pmraerr = float(parts[part_index]), float(parts[part_index+1]) part_index += 1 elif param=="PMDEC": if not parts[part_index]=='*': self.pmdec, self.pmdecerr = float(parts[part_index]), float(parts[part_index+1]) part_index += 1 elif param=="PX": if not parts[part_index]=='*': self.px, self.pxerr = float(parts[part_index]), float(parts[part_index+1]) part_index += 1 elif param=="POSEPOCH": if not parts[part_index]=='*': self.posepoch = float(parts[part_index]) elif param=="Gl": if not parts[part_index]=='*': self.l = float(parts[part_index]) elif param=="Gb": if not parts[part_index]=='*': self.b = float(parts[part_index]) elif param=="P0": if not parts[part_index]=='*': self.p, self.perr = float(parts[part_index]), float(parts[part_index+1]) self.f, self.ferr = psr_utils.pferrs(self.p, self.perr) else: self.f = self.ferr = self.p = self.perr = 0.0 self.fd = self.fdd = self.fddd = 0.0 self.pd = self.pdd = self.pddd = 0.0 self.fderr = self.fdderr = self.fddderr = 0.0 self.pderr = self.pdderr = self.pddderr = 0.0 part_index += 1 elif param=="P1": if not parts[part_index]=='*': self.pd, self.pderr = float(parts[part_index]), float(parts[part_index+1]) self.f, self.ferr, self.fd, self.fderr = psr_utils.pferrs(self.p, self.perr, self.pd, self.pderr) part_index += 1 elif param=="F2": if not parts[part_index]=='*': self.fdd, self.fdderr = float(parts[part_index]), float(parts[part_index+1]) self.p, self.pd, self.pdd = presto.p_to_f(self.f, self.fd, self.fdd) part_index += 1 elif param=="F3": if not parts[part_index]=='*': self.fddd, self.fddderr = float(parts[part_index]), float(parts[part_index+1]) part_index += 1 elif param=="PEPOCH": if parts[part_index]=='*': self.pepoch = 51000.0 # Just to pick a reasonable value else: self.pepoch = float(parts[part_index]) elif param=="DM": if not parts[part_index]=='*': self.dm, self.dmerr = float(parts[part_index]), float(parts[part_index+1]) else: self.dm = self.dmerr = 0.0 part_index += 1 elif param=="DM1": if not parts[part_index]=='*': self.ddm, self.ddmerr = float(parts[part_index]), float(parts[part_index+1]) part_index += 1 elif param=="S400": if not parts[part_index]=='*': self.s400, self.s400err = float(parts[part_index]), float(parts[part_index+1]) else: self.s400 = None part_index += 1 elif param=="S1400": if not parts[part_index]=='*': self.s1400, self.s1400err = float(parts[part_index]), float(parts[part_index+1]) else: self.s1400 = None part_index += 1 elif param=="BINARY": if not parts[part_index]=='*': self.binary_model = parts[part_index] self.binary = 1 self.pb = self.x = self.w = self.To = self.e = None self.pberr = self.xerr = self.werr = self.Toerr =self.eerr = None else: self.binary = 0 elif param=="T0": if self.binary and not parts[part_index]=='*': self.To, self.Toerr = float(parts[part_index]), float(parts[part_index+1]) part_index += 1 elif param=="PB": if self.binary and not parts[part_index]=='*': self.pb, self.pberr = float(parts[part_index]), float(parts[part_index+1]) part_index += 1 elif param=="A1": if self.binary and not parts[part_index]=='*': self.x, self.xerr = float(parts[part_index]), float(parts[part_index+1]) part_index += 1 elif param=="OM": if self.binary and not parts[part_index]=='*': self.w, self.werr = float(parts[part_index]), float(parts[part_index+1]) part_index += 1 elif param=="ECC": if self.binary and not parts[part_index]=='*': self.e, self.eerr = float(parts[part_index]), float(parts[part_index+1]) part_index += 1 elif param=="TASC": if self.binary and self.binary_model=="ELL1" and not parts[part_index]=='*': self.To, self.Toerr = float(parts[part_index]), float(parts[part_index+1]) part_index += 1 elif param=="EPS1": if self.binary and self.binary_model=="ELL1" and not parts[part_index]=='*': self.eps1, self.eps1err = float(parts[part_index]), float(parts[part_index+1]) part_index += 1 elif param=="EPS2": if self.binary and self.binary_model=="ELL1" and not parts[part_index]=='*': self.eps2, self.eps2err = float(parts[part_index]), float(parts[part_index+1]) if not hasattr(self, 'eps1'): self.eps1 = 0.0 self.e = math.sqrt(self.eps1*self.eps1 + self.eps2*self.eps2) self.eerr = 0.0001 # This needs fixing... self.w = psr_utils.RADTODEG*math.atan2(self.eps1, self.eps2) if (self.w < 0.0): self.w += 360.0 self.werr = 1.0 # This needs fixing... part_index += 1 elif param=="DIST": if not parts[part_index]=='*': self.dist = float(parts[part_index]) else: self.dist = None elif param=="ASSOC": if not parts[part_index]=='*': self.assoc = parts[part_index] else: self.assoc = None elif param=="PSR": if not parts[part_index]=='*': self.type = parts[part_index] else: self.type = None part_index += 1 param_index += 1 self.alias = ""
def __init__(self, line): parts = line.split()[1:] part_index = 0 param_index = 0 # print parts while param_index < len(params): param = params[param_index] # print param, parts[part_index] if param == "NAME": if not parts[part_index] == '*': self.name = parts[part_index][1:] else: self.name = "" elif param == "PSRJ": if not parts[part_index] == '*': self.jname = parts[part_index][1:] if self.name == self.jname: self.name = "" elif param == "RAJ": if not parts[part_index] == '*': hms = map(float, parts[part_index].split(':')) if len(hms) == 3: h, m, s = hms elif len(hms) == 2: h, m = hms s = 0.0 elif len(hms) == 1: h = hms m = s = 0.0 self.ra = psr_utils.hms_to_rad(h, m, s) self.raerr = float( parts[part_index + 1]) * psr_utils.SECTORAD part_index += 1 elif param == "DECJ": if not parts[part_index] == '*': dms = map(float, parts[part_index].split(':')) if len(dms) == 3: d, m, s = dms elif len(dms) == 2: d, m = dms s = 0.0 elif len(dms) == 1: d = dms m = s = 0.0 # Fixed silly dec=-0.0 bug if parts[part_index].split(":")[0] == "-00": m = -m s = -s self.dec = psr_utils.dms_to_rad(d, m, s) self.decerr = float( parts[part_index + 1]) * psr_utils.ARCSECTORAD part_index += 1 elif param == "PMRA": if not parts[part_index] == '*': self.pmra, self.pmraerr = float(parts[part_index]), float( parts[part_index + 1]) part_index += 1 elif param == "PMDEC": if not parts[part_index] == '*': self.pmdec, self.pmdecerr = float( parts[part_index]), float(parts[part_index + 1]) part_index += 1 elif param == "PX": if not parts[part_index] == '*': self.px, self.pxerr = float(parts[part_index]), float( parts[part_index + 1]) part_index += 1 elif param == "POSEPOCH": if not parts[part_index] == '*': self.posepoch = float(parts[part_index]) elif param == "Gl": if not parts[part_index] == '*': self.l = float(parts[part_index]) elif param == "Gb": if not parts[part_index] == '*': self.b = float(parts[part_index]) elif param == "P0": if not parts[part_index] == '*': self.p, self.perr = float(parts[part_index]), float( parts[part_index + 1]) self.f, self.ferr = psr_utils.pferrs(self.p, self.perr) else: self.f = self.ferr = self.p = self.perr = 0.0 self.fd = self.fdd = self.fddd = 0.0 self.pd = self.pdd = self.pddd = 0.0 self.fderr = self.fdderr = self.fddderr = 0.0 self.pderr = self.pdderr = self.pddderr = 0.0 part_index += 1 elif param == "P1": if not parts[part_index] == '*': self.pd, self.pderr = float(parts[part_index]), float( parts[part_index + 1]) self.f, self.ferr, self.fd, self.fderr = psr_utils.pferrs( self.p, self.perr, self.pd, self.pderr) part_index += 1 elif param == "F2": if not parts[part_index] == '*': self.fdd, self.fdderr = float(parts[part_index]), float( parts[part_index + 1]) self.p, self.pd, self.pdd = presto.p_to_f( self.f, self.fd, self.fdd) part_index += 1 elif param == "F3": if not parts[part_index] == '*': self.fddd, self.fddderr = float(parts[part_index]), float( parts[part_index + 1]) part_index += 1 elif param == "PEPOCH": if parts[part_index] == '*': self.pepoch = 51000.0 # Just to pick a reasonable value else: self.pepoch = float(parts[part_index]) elif param == "DM": if not parts[part_index] == '*': self.dm, self.dmerr = float(parts[part_index]), float( parts[part_index + 1]) else: self.dm = self.dmerr = 0.0 part_index += 1 elif param == "DM1": if not parts[part_index] == '*': self.ddm, self.ddmerr = float(parts[part_index]), float( parts[part_index + 1]) part_index += 1 elif param == "S400": if not parts[part_index] == '*': self.s400, self.s400err = float(parts[part_index]), float( parts[part_index + 1]) else: self.s400 = None part_index += 1 elif param == "S1400": if not parts[part_index] == '*': self.s1400, self.s1400err = float( parts[part_index]), float(parts[part_index + 1]) else: self.s1400 = None part_index += 1 elif param == "BINARY": if not parts[part_index] == '*': self.binary_model = parts[part_index] self.binary = 1 self.pb = self.x = self.w = self.To = self.e = None self.pberr = self.xerr = self.werr = self.Toerr = self.eerr = None else: self.binary = 0 elif param == "T0": if self.binary and not parts[part_index] == '*': self.To, self.Toerr = float(parts[part_index]), float( parts[part_index + 1]) part_index += 1 elif param == "PB": if self.binary and not parts[part_index] == '*': self.pb, self.pberr = float(parts[part_index]), float( parts[part_index + 1]) part_index += 1 elif param == "A1": if self.binary and not parts[part_index] == '*': self.x, self.xerr = float(parts[part_index]), float( parts[part_index + 1]) part_index += 1 elif param == "OM": if self.binary and not parts[part_index] == '*': self.w, self.werr = float(parts[part_index]), float( parts[part_index + 1]) part_index += 1 elif param == "ECC": if self.binary and not parts[part_index] == '*': self.e, self.eerr = float(parts[part_index]), float( parts[part_index + 1]) part_index += 1 elif param == "TASC": if self.binary and self.binary_model == "ELL1" and not parts[ part_index] == '*': self.To, self.Toerr = float(parts[part_index]), float( parts[part_index + 1]) part_index += 1 elif param == "EPS1": if self.binary and self.binary_model == "ELL1" and not parts[ part_index] == '*': self.eps1, self.eps1err = float(parts[part_index]), float( parts[part_index + 1]) part_index += 1 elif param == "EPS2": if self.binary and self.binary_model == "ELL1" and not parts[ part_index] == '*': self.eps2, self.eps2err = float(parts[part_index]), float( parts[part_index + 1]) if not hasattr(self, 'eps1'): self.eps1 = 0.0 self.e = math.sqrt(self.eps1 * self.eps1 + self.eps2 * self.eps2) self.eerr = 0.0001 # This needs fixing... self.w = psr_utils.RADTODEG * math.atan2( self.eps1, self.eps2) if (self.w < 0.0): self.w += 360.0 self.werr = 1.0 # This needs fixing... part_index += 1 elif param == "DIST": if not parts[part_index] == '*': self.dist = float(parts[part_index]) else: self.dist = None elif param == "ASSOC": if not parts[part_index] == '*': self.assoc = parts[part_index] else: self.assoc = None elif param == "PSR": if not parts[part_index] == '*': self.type = parts[part_index] else: self.type = None part_index += 1 param_index += 1 self.alias = ""