python crash course pyraf 3 rd year bachelors v1.0 dd 06-09-2013 hour 1

Post on 02-Jan-2016

231 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Python Crash CoursePython Crash CoursePyrafPyraf

3rd year Bachelors

V1.0

dd 06-09-2013

Hour 1

PyRAF – scripting IRAF with PythonPyRAF – scripting IRAF with Python

• http://www.stsci.edu/resources/software_hardware/pyraf

• Command line to replace cl, allows most normal IRAF commands and Python at same prompt

• Can use IRAF tasks in Python scripts instead of having to create awkward cl scripts (or worse SPP)

PyRAF – command linePyRAF – command line

• Command and filename completion• Edit line and access history easily (like ecl or bash) • Use just as friendlier cl prompt or use Python whenever you want• Transfer data between IRAF tasks and Python• Use brackets for tasks when you want it to behave like Python

$ pyraf

Welcome to IRAF. To list the available commands, type ? or ??. To get

detailed information about a command, type `help <command>'. To run a

command or load a package, type its name. Type `bye' to exit a

package, or `logout' to get out of the CL. Type `news' to find out

what is new in the version of the system you are using.

Visit http://iraf.net if you have questions or to report problems.

The following commands or packages are currently defined:

clpackage/:

clpackage/ guiapps/ obsolete/ stlocal/ vo/

ctio/ images/ plot/ stsdas/ xdimsum/

dataio/ language/ proto/ system/

dbms/ lists/ rvsao/ tables/

esowfi/ mscred/ softools/ user/

fitsutil/ noao/ stecf/ utilities/

PyRAF 1.10 (r1352) Copyright (c) 2002 AURA

Python 2.7.3 Copyright (c) 2001-2012 Python Software Foundation.

Python/CL command line wrapper

.help describes executive commands

-->

PyRAF – command linePyRAF – command line

--> imheader dev$pix long+

dev$pix[512,512][short]: m51 B 600s

No bad pixels, min=-1., max=19936.

Line storage mode, physdim [512,512], length of user area 1621 s.u.

Created Mon 23:54:13 31-Mar-1997, Last modified Sun 16:37:53 12-Mar-2006

Pixel file "HDR$pix.pix" [ok]

'KPNO-IRAF' /

'31-03-97' /

IRAF-MAX= 1.993600E4 / DATA MAX

IRAF-MIN= -1.000000E0 / DATA MIN

IRAF-BPX= 16 / DATA BITS/PIXEL

IRAFTYPE= 'SHORT ' / PIXEL TYPE

CCDPICNO= 53 / ORIGINAL CCD PICTURE NUMBER

ITIME = 600 / REQUESTED INTEGRATION TIME (SECS)

TTIME = 600 / TOTAL ELAPSED TIME (SECS)

OTIME = 600 / ACTUAL INTEGRATION TIME (SECS)

DATA-TYP= 'OBJECT (0)' / OBJECT,DARK,BIAS,ETC.

DATE-OBS= '05/04/87' / DATE DD/MM/YY

RA = '13:29:24.00' / RIGHT ASCENSION

DEC = '47:15:34.00' / DECLINATION

--> imstat dev$pix

# IMAGE NPIX MEAN STDDEV MIN MAX

dev$pix 262144 108.3 131.3 -1. 19936.

--> imcopy dev$pix mycopy.fits

dev$pix -> mycopy.fits

--> stsdas

+------------------------------------------------------------+

| Space Telescope Science Data Analysis System |

| STSDAS Version 3.14 |

| |

| Space Telescope Science Institute, Baltimore, Maryland |

| Copyright (C) 2003 Association of Universities for |

| Research in Astronomy, Inc.(AURA) |

| See stsdas$copyright.stsdas for terms of use. |

| For help, send e-mail to help@stsci.edu |

| |

+------------------------------------------------------------+

--> fitsio

--> catfits mycopy.fits

EXT# FITSNAME FILENAME EXTVE DIMENS BITPI OBJECT

0 mycopy.fits 512x512 16 m51 B 600s

PyRAF – command linePyRAF – command line

--> imstat 2MASS_NGC_0891_K.fits

# IMAGE NPIX MEAN STDDEV MIN MAX

2MASS_NGC_0891_K.fits 1200000 -8.661 99.44 -1001. 7207.

--> fname = "data/2MASS_NGC_0891_K.fits"

--> imstat fname

# IMAGE NPIX MEAN STDDEV MIN MAX

Error reading image fname ...

--> imstat(fname)

# IMAGE NPIX MEAN STDDEV MIN MAX

data/2MASS_NGC_0891_K.fits 1200000 -8.661 99.44 -1001. 7207.

PyRAF – parameter editingPyRAF – parameter editing

--> epar imarith

PyRAF – graphics adn image displayPyRAF – graphics adn image display

--> prow dev$pix 256

--> from pyraf import gwm

--> gmw.window(“My own graphic”)

--> gwm.delete(“My own graphic”)

$ ds9 &

-->tv.display dev$pix

Frame to be written into (1:16) (1):

Z1=35. z2=346.0218

PyRAF – running tasksPyRAF – running tasks

The mapping of IRAF CL syntax to Python syntax is generally quite straightforward. The most notable requirements are: •The task or package name must be prefixed with iraf. because they come from the iraf module. In scripts, use

•to load the iraf module. Note that the first time PyRAF is imported, the normal IRAF startup process is executed (which can take a while). NOAO is working on techniques to do fast, lightweight startups for stand-alone Python scripts that use PyRAF. At the moment the only such approach is to startup in a directory with a custom version of login.cl that defines a minimal IRAF environment.

•It is also possible to import tasks and packages directly using

from pyraf import iraf

from pyraf.iraf import stsdas,imcalc

PyRAF – running tasksPyRAF – running tasks

Setting and listing the task parameters

--> s = iraf.imhead("dev$pix", long=yes, Stdout=1)

--> print s[0]

dev$pix[512,512][short]: m51 B 600s

--> iraf.head(nl=3, Stdin=s)

dev$pix[512,512][short]: m51 B 600s

No bad pixels, min=-1., max=19936.

Line storage mode, physdim [512,512], length of user area 1621 s.u.

--> iraf.imcopy.input = "dev$pix"

--> iraf.imcopy.output = "mycopy.fits"

--> iraf.imcopy() # run the task with the new values

--> iraf.imcopy.lParam()

--> iraf.lpar(iraf.imcopy) # Note there are no quotation marks

--> iraf.lpar('imcopy')

PyRAF - command linePyRAF - command line

• Many IRAF tasks create output images or tables on disk, or just print to screen, so don’t need to pass information back (see later for this)

stsdas # note can’t unload packages

improject(sky_file_2D, sky_file_1D, projaxis=2, average='no')

imcalc(sky_file_1D, sky_file_1D, 'im1*%f'%apwidthratio)

# calculate effective gain and ron due to combined images

gain = 1.91; ron = 5.41

gain_eff = gain * ncombine

ron_eff = ron * sqrt(ncombine)

# sig = sci + sky

imcalc('%s,%s'%(sci_file, sky_file_1D), sig_file, 'im1+im2')

# sig = sqrt(sig * gain + ron**2) / gain

equation = 'sqrt(max(im1,0.0)/%(g)8.5f + %(r2)8.5f/%(g2)8.5f)'

equation = equation%{'g': gain_eff, 'r2': ron_eff**2,

'g2': gain_eff**2}

imcalc(sig_file, sig_file, equation)

PyRAF - scriptingPyRAF - scripting

• Use IRAF tasks in Python scripts• Just import iraf object from pyraf module

from pyraf import iraf

from glob import glob

images = glob(“*sci.fits”)

for img in images:

iraf.imstat(img)

newimg = img.replace(‘sci’, ‘sig’)

iraf.imcalc(img, newimg, ’sqrt(img)')

PyRAF - scriptingPyRAF - scripting

• Can specify ‘default’ task parameters in neat fashion, instead of having to include on every call of a task

iraf.imstat.nclip = 3

iraf.imstat.lsigma = 5

iraf.imstat.usigma = 5

# now every time I use imstat it uses sigma clipping

iraf.imstat(im1)

iraf.imstat(im2)

iraf.imstat(im3)

# can revert to task defaults by unlearning

iraf.unlearn(‘imstat’) # note task name is a string

PyRAF - scriptingPyRAF - scripting

• Useful to make shortcuts

# shortcut for a long task name

crrej = iraf.stsdas.hst_calib.wfpc.crrej

crrej.mask = ‘mymask.fits’

crrej.sigma = 5

crrej(in1, out1)

crrej(in2, out2)

crrej(in3, out3)

PyRAF – input and output from tasksPyRAF – input and output from tasks

• IRAF outputs lots of useful data to screen - how to get at it?

• Some tasks need user input - would be nice to automate these

• PyRAF defines extra parameters Stdout and Stdin for all tasks

– Stdout can be a filename, file object, or 1 (one) to direct to a list

– Stdin can be a filename, file object, or string

for img in images:

# get a list with a string for each line of output

output = iraf.imstat(img, format=‘no’,fields=‘midpt’,Stdout=1)

# output can then be parsed as necessary to get at info

med = float(output[0])

newimg = img.replace(‘sci’, ‘sub’)

iraf.imcalc(img, newimg, ’im1 - %f’%med)

Introduction to languageIntroduction to language

End

top related