def run(self, scale=None, ra=None, dec=None): solve_field = [ self.astrometry_bin + '/solve-field', '-D', self.odir, '--no-plots', '--no-fits2fits' ] if scale is not None: scale_low = scale * (1 - self.scale_relative_error) scale_high = scale * (1 + self.scale_relative_error) solve_field.append('-u') solve_field.append('app') solve_field.append('-L') solve_field.append(str(scale_low)) solve_field.append('-H') solve_field.append(str(scale_high)) if ra is not None and dec is not None: solve_field.append('--ra') solve_field.append(ra) solve_field.append('--dec') solve_field.append(dec) solve_field.append('--radius') solve_field.append('5') solve_field.append(self.infpath) proc = subprocess.Popen(solve_field, stdout=subprocess.PIPE, stderr=subprocess.PIPE) radecline = re.compile( 'Field center: \(RA H:M:S, Dec D:M:S\) = \(([^,]*),(.*)\).') ret = None while True: a = proc.stdout.readline() if a == '': break match = radecline.match(a) if match: ret = [dms.parse(match.group(1)), dms.parse(match.group(2))] # cleanup shutil.rmtree(self.odir) return ret
def run(self,scale=None,ra=None,dec=None): solve_field=[self.astrometry_bin + '/solve-field', '-D', self.odir,'--no-plots', '--no-fits2fits'] if scale is not None: scale_low=scale*(1-self.scale_relative_error) scale_high=scale*(1+self.scale_relative_error) solve_field.append('-u') solve_field.append('app') solve_field.append('-L') solve_field.append(str(scale_low)) solve_field.append('-H') solve_field.append(str(scale_high)) if ra is not None and dec is not None: solve_field.append('--ra') solve_field.append(ra) solve_field.append('--dec') solve_field.append(dec) solve_field.append('--radius') solve_field.append('5') solve_field.append(self.infpath) proc=subprocess.Popen(solve_field,stdout=subprocess.PIPE,stderr=subprocess.PIPE) radecline=re.compile('Field center: \(RA H:M:S, Dec D:M:S\) = \(([^,]*),(.*)\).') ret = None while True: a=proc.stdout.readline() if a == '': break match=radecline.match(a) if match: ret=[dms.parse(match.group(1)),dms.parse(match.group(2))] # cleanup shutil.rmtree(self.odir) return ret
def parse(strin): """Parse string in RADEC to two floats. RA is expected to be in hours(:minutes:seconds). Both RA and DEC are returned in degrees.""" (ra,dec) = strin.split() return (dms.parse(ra) * 15.0, dms.parse(dec))
def parse(strin): """Parse string in RADEC to two floats. RA is expected to be in hours(:minutes:seconds). Both RA and DEC are returned in degrees.""" (ra, dec) = strin.split() return (dms.parse(ra) * 15.0, dms.parse(dec))
def run(self, scale=None, ra=None, dec=None, radius=5.0, replace=False, timeout=None, verbose=False, extension=None, center=False, downsample=None): solve_field = [ self.astrometry_bin + '/solve-field', '-D', self.odir, '--no-plots', '--no-fits2fits' ] if scale is not None: scale_low = scale * (1 - self.scale_relative_error) scale_high = scale * (1 + self.scale_relative_error) solve_field.append('-u') solve_field.append('app') solve_field.append('-L') solve_field.append(str(scale_low)) solve_field.append('-H') solve_field.append(str(scale_high)) if ra is not None and dec is not None: solve_field.append('--ra') solve_field.append(str(ra)) solve_field.append('--dec') solve_field.append(str(dec)) solve_field.append('--radius') solve_field.append(str(radius)) if self.use_sextractor == True: solve_field.append('--use-sextractor') solve_field.append('--sextractor-path') solve_field.append(self.sextractor_bin) if extension is not None: solve_field.append('-6') solve_field.append(extension) if center: solve_field.append('--crpix-center') if downsample is not None: solve_field.append('-z') solve_field.append(downsample) solve_field.append(self.infpath) if verbose: print 'running', ' '.join(solve_field) proc = subprocess.Popen(solve_field, stdout=subprocess.PIPE, stderr=subprocess.PIPE, preexec_fn=lambda: os.setpgid(0, 0)) if timeout is not None: def __term_proc(sig, stack): os.killpg(os.getpgid(proc.pid), signal.SIGKILL) if verbose: print 'killing process, as timeout was reached' signal.signal(signal.SIGALRM, __term_proc) signal.alarm(timeout) radecline = re.compile( 'Field center: \(RA H:M:S, Dec D:M:S\) = \(([^,]*),(.*)\).') ret = None while True: try: a = proc.stdout.readline() except IOError: break if a == '': break if verbose: print a, match = radecline.match(a) if match: ret = [dms.parse(match.group(1)), dms.parse(match.group(2))] if replace and ret is not None: shutil.move(self.odir + '/input.new', self.fits_file) shutil.rmtree(self.odir) return ret
def run( self, scale=None, ra=None, dec=None, radius=5.0, replace=False, timeout=None, verbose=False, extension=None, center=False, downsample=None, ): solve_field = [self.astrometry_bin + "/solve-field", "-D", self.odir, "--no-plots", "--no-fits2fits"] if scale is not None: scale_low = scale * (1 - self.scale_relative_error) scale_high = scale * (1 + self.scale_relative_error) solve_field.append("-u") solve_field.append("app") solve_field.append("-L") solve_field.append(str(scale_low)) solve_field.append("-H") solve_field.append(str(scale_high)) if ra is not None and dec is not None: solve_field.append("--ra") solve_field.append(str(ra)) solve_field.append("--dec") solve_field.append(str(dec)) solve_field.append("--radius") solve_field.append(str(radius)) if self.use_sextractor == True: solve_field.append("--use-sextractor") solve_field.append("--sextractor-path") solve_field.append(self.sextractor_bin) if extension is not None: solve_field.append("-6") solve_field.append(extension) if center: solve_field.append("--crpix-center") if downsample is not None: solve_field.append("-z") solve_field.append(downsample) solve_field.append(self.infpath) if verbose: print "running", " ".join(solve_field) proc = subprocess.Popen( solve_field, stdout=subprocess.PIPE, stderr=subprocess.PIPE, preexec_fn=lambda: os.setpgid(0, 0) ) if timeout is not None: def __term_proc(sig, stack): os.killpg(os.getpgid(proc.pid), signal.SIGKILL) if verbose: print "killing process, as timeout was reached" signal.signal(signal.SIGALRM, __term_proc) signal.alarm(timeout) radecline = re.compile("Field center: \(RA H:M:S, Dec D:M:S\) = \(([^,]*),(.*)\).") ret = None while True: try: a = proc.stdout.readline() except IOError: break if a == "": break if verbose: print a, match = radecline.match(a) if match: ret = [dms.parse(match.group(1)), dms.parse(match.group(2))] if replace and ret is not None: shutil.move(self.odir + "/input.new", self.fits_file) shutil.rmtree(self.odir) return ret
def run(self, scale=None, ra=None, dec=None, radius=5.0, replace=False, timeout=None, verbose=False): solve_field=[self.astrometry_bin + '/solve-field', '-D', self.odir,'--no-plots', '--no-fits2fits'] if scale is not None: scale_low=scale*(1-self.scale_relative_error) scale_high=scale*(1+self.scale_relative_error) solve_field.append('-u') solve_field.append('app') solve_field.append('-L') solve_field.append(str(scale_low)) solve_field.append('-H') solve_field.append(str(scale_high)) if ra is not None and dec is not None: solve_field.append('--ra') solve_field.append(str(ra)) solve_field.append('--dec') solve_field.append(str(dec)) solve_field.append('--radius') solve_field.append(str(radius)) if self.use_sextractor == True: solve_field.append('--use-sextractor') solve_field.append('--sextractor-path') solve_field.append(self.sextractor_bin) solve_field.append(self.infpath) if verbose: print 'running',' '.join(solve_field) proc=subprocess.Popen(solve_field, stdout=subprocess.PIPE, stderr=subprocess.PIPE, preexec_fn=lambda:os.setpgid(0, 0)) if timeout is not None: def __term_proc(sig, stack): os.killpg(os.getpgid(proc.pid), signal.SIGKILL) if verbose: print 'killing process, as timeout was reached' signal.signal(signal.SIGALRM, __term_proc) signal.alarm(timeout) radecline=re.compile('Field center: \(RA H:M:S, Dec D:M:S\) = \(([^,]*),(.*)\).') ret = None while True: try: a=proc.stdout.readline() except IOError: break if a == '': break if verbose: print a, match=radecline.match(a) if match: ret=[dms.parse(match.group(1)),dms.parse(match.group(2))] if replace and ret is not None: shutil.move(self.odir+'/input.new',self.fits_file) shutil.rmtree(self.odir) return ret
if len(sys.argv) >= 5: xoffs = float(sys.argv[3]) yoffs = float(sys.argv[4]) num = -1 try: fn = os.path.basename(sys.argv[5]) num = int(fn.split('.')[0]) except Exception, ex: pass ret = a.run(scale=0.67, ra=ra, dec=dec) if ret: raorig = dms.parse(ra) * 15.0 decorig = dms.parse(dec) raastr = float(ret[0]) * 15.0 decastr = float(ret[1]) err = pynova.angular_separation(raorig, decorig, raastr + xoffs / 3600, decastr + yoffs / 3600.0) ra_err = math.cos(math.radians(decorig)) * ( (raorig - raastr) - xoffs / 3600.0) dec_err = decorig - decastr - yoffs / 3600.0 print "corrwerr 1 {0:.10f} {1:.10f} {2:.10f} {3:.10f} {4:.10f}".format( raastr + xoffs / 3600.0, decastr + yoffs / 3600.0, ra_err, dec_err, err)
if len(sys.argv) >= 5: xoffs = float(sys.argv[3]) yoffs = float(sys.argv[4]) num = -1 try: fn = os.path.basename(sys.argv[5]) num = int(fn.split('.')[0]) except Exception,ex: pass ret=a.run(scale=0.67,ra=ra,dec=dec) if ret: raorig=dms.parse(ra)*15.0 decorig=dms.parse(dec) raastr=float(ret[0])*15.0 decastr=float(ret[1]) err = pynova.angularSeparation(raorig,decorig,raastr+xoffs/3600,decastr+yoffs/3600.0) ra_err = math.cos(math.radians(decorig))*((raorig-raastr)-xoffs/3600.0) dec_err = decorig-decastr-yoffs/3600.0 print "corrwerr 1 {0:.10f} {1:.10f} {2:.10f} {3:.10f} {4:.10f}".format(raastr + xoffs/3600.0, decastr + yoffs/3600.0, ra_err, dec_err, err) import rts2comm c = rts2comm.Rts2Comm() c.doubleValue('real_ra','[hours] image ra ac calculated from astrometry',raastr)