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
Exemple #2
0
    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
Exemple #3
0
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))
Exemple #4
0
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))
Exemple #5
0
    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
Exemple #6
0
    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
Exemple #7
0
	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)
Exemple #9
0
    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)