SOI Image Reduction
# SOI Notes
# SDP 12 Oct 2011
# In the following document GNU/Linux and IRAF commands are preceded by
# "linux-prompt>" and "IRAFPackage>", respectively. Comments are preceded by
# "#".
# You may want to download soar.cl, soinoao.tar, and soimsu.tar first.
# Start IRAF on your local machine
linux-prompt> cl - ecl
ecl> soar
soar> soinoao
soinoao> mscred
mscred>
# Get filter information from the FITS header. Please remember that SOI can
# hold up to eight (8) filters in two (2) filter wheels at any given time.
# This can be done with IRAF using the TABLES keypar package which can be
# cumbersome. An example of an IRAF script that can do this can be found
# at get_soi_filter_keyword.cl.
# This task is more easily done by using the WCSTools gethead program. If the
# WCSTools are installed on your local machine, you can determine the SOI
# filter information by entering the following on a command line
linux-prompt> gethead FILPOS FILTERS FILTER1 FILTER2 *fits
# This returns the following information:
dflat.001.fits 1 5 s0000_s0002 s0000 Open s0002 B Bessell
...
dflat.011.fits 1 4 s0000_s0003 s0000 Open s0003 V Bessell
...
dflat.021.fits 1 3 s0000_s0004 s0000 Open s0004 R Bessell
...
dflat.031.fits 1 2 s0000_s0005 s0000 Open s0005 I Bessell
...
sflat.001.fits 2 1 s0001_s0000 s0001 U Bessell s0000 Open
# The filter position is used to record the filter name in the images headers
# and is required to handle image subsets. After the filter information is
# determined.
# From the above example with "gethead", we can see that:
# U_Bessell is in filpos 2 1
# B_Bessell is in filpos 1 5
# V_Bessell is in filpos 1 4
# R_Bessell is in filpos 1 3
# I_Bessell is in filpos 1 2
# Note: Position 1 in each filter wheel is normally designated as "Open".
# Use IRAF to create the necessary subsets
mscred> hsel *.fits[1] $I 'filpos == "2 1"' > listU
mscred> hsel *.fits[1] $I 'filpos == "1 5"' > listB
mscred> hsel *.fits[1] $I 'filpos == "1 4"' > listV
mscred> hsel *.fits[1] $I 'filpos == "1 3"' > listR
mscred> hsel *.fits[1] $I 'filpos == "1 2"' > listI
# Trim the last eight (8) characters of the filenames, i.e., ".fits[1]".
# This can be done easily using the following GNU/Linux commands:
linux-prompt> cp listU listU2
linux-prompt> vi listU2
# After you can edit the list file, perform a global search and replace of the
# .fits[1] characters using the following:
# :1,$ s/.fits\[1\]//g
# Repeat this for other filters.
# If you are not familiar with vi, you can trim the last 8 characters of the
# filename using the following IRAF code on the command line:
# mscred> int size_str
# list="listU"
# while (fscan (list,s1) !=EOF) {
# size_str=strlen(s1)
# print substr(s1,1,size_str-8) >> listU2
# }
# Repeat this for other filters.
# Update the "FILTER" parameter in the image headers within IRAF
mscred> soiupfilter @listU2 filter_=yes filter=U
mscred> soiupfilter @listB2 filter_=yes filter=B
mscred> soiupfilter @listV2 filter_=yes filter=V
mscred> soiupfilter @listR2 filter_=yes filter=R
mscred> soiupfilter @listI2 filter_=yes filter=I
# Check the IMTYPE keyword and the Filter subsets
mscred> ccdlist *fits[1]
# This should give something like the following:
dflat.001.fits[1][563,2048][ushort][FLAT][1][B]:Dome flat
...
dflat.011.fits[1][563,2048][ushort][FLAT][1][V]:Dome flat
...
dflat.021.fits[1][563,2048][ushort][FLAT][1][R]:Dome flat
...
dflat.031.fits[1][563,2048][ushort][FLAT][1][I]:Dome flat
...
sflat.001.fits[1][563,2048][ushort][SKYFLAT][1][U]:sflat
...
obj.006.fits[1][563,2048][ushort][OBJECT][1][U]:T Phe
...
obj.007.fits[1][563,2048][ushort][OBJECT][1][B]:T Phe
...
obj.008.fits[1][563,2048][ushort][OBJECT][1][V]:T Phe
...
obj.009.fits[1][563,2048][ushort][OBJECT][1][I]:T Phe
# Check the BIASSEC, DATASEC, and TRIMSEC parameters of the FITS files.
# We have received reports that these may be off by a pixel. Thus, it is
# always a good idea to inspect the data by hand before moving on. The
# latest and greatest values for these parameters that we have are...
# For Pre 14 Nov 2008 Data (SOI Leach II Controller, 2 2kx4k CCDs):
# AMP BIASSEC TRIMSEC DATASEC
# 1 [541:562,1:2048] [29:540,1:2048] [29:540,1:2048]
# 2 [1:23,1:2048] [24:535,1:2048] [24:535,1:2048]
# 3 [541:562,1:2048] [29:540,1:2048] [29:540,1:2048]
# 4 [1:23,1:2048] [24:535,1:2048] [24:535,1:2048]
# For 14 Nov 2008 -- DD MMM 2010 Data (SOI Leach III Controller, 2 2kx4k CCDs):
# AMP BIASSEC TRIMSEC DATASEC
# 1 [541:568,1:2048] [29:540,1:2048] [29:540,1:2048]
# 2 [1:28,1:2048] [29:540,1:2048] [29:540,1:2048]
# 3 [541:568,1:2048] [29:540,1:2048] [29:540,1:2048]
# 4 [1:28,1:2048] [29:540,1:2048] [29:540,1:2048]
# For Post DD MMM 2010 Data (SOI Leach III Controller, 1 4kx4k CCD):
# AMP BIASSEC TRIMSEC DATASEC
# 1 TBD TBD TBD
# 2 TBD TBD TBD
# 3 TBD TBD TBD
# 4 TBD TBD TBD
# If the BIASSEC, TRIMSEC, and DATASEC keywords are not correct, you will need
# to change them. It is easy to do this within IRAF using the mscred.ccdhedit
# task. Be sure to use the appropriate values depending upon the date of your
# observations.
# Combine the bias frames
mscred> epar zerocombine
I R A F
Image Reduction and Analysis Facility
PACKAGE = mscred
TASK = zerocombine
input = zero* List of zero level images to combine
(output = Zero) Output zero level name
(combine= median) Type of combine operation
(reject = avsigclip) Type of rejection
(ccdtype= ZERO) CCD image type to combine
(process= yes) Process images before combining?
(delete = no) Delete input images after combining?
(scale = none) Image scaling
(statsec= ) Image section for computing statistics
(nlow = 0) minmax: Number of low pixels to reject
(nhigh = 1) minmax: Number of high pixels to reject
(nkeep = 1) Minimum to keep (pos) or maximum to reject (neg)
(mclip = yes) Use median in sigma clipping algorithms?
(lsigma = 3.) Lower sigma clipping factor
(hsigma = 3.) Upper sigma clipping factor
(rdnoise= 4.4) ccdclip: CCD readout noise (electrons)
(gain = 2) ccdclip: CCD gain (electrons/DN)
(snoise = 4.4) ccdclip: Sensitivity noise (fraction)
(pclip = -0.5) pclip: Percentile clipping parameter
(blank = 0.) Value if there are no pixels
(mode = q)
mscred> epar ccdproc
I R A F
Image Reduction and Analysis Facility
PACKAGE = mscred
TASK = ccdproc
images = zero*fits List of Mosaic CCD images to process
(output = ) List of output processed images
(bpmasks= ) List of output bad pixel masks
(ccdtype= ZERO) CCD image type to process
(noproc = no) List processing steps only?
(xtalkco= no) Apply crosstalk correction?
(fixpix = no) Apply bad pixel mask correction?
(oversca= yes) Apply overscan strip correction?
(trim = yes) Trim the image?
(zerocor= no) Apply zero level correction?
(darkcor= no) Apply dark count correction?
(flatcor= no) Apply flat field correction?
(sflatco= no) Apply sky flat field correction?
(split = no) Use split images during processing?
(merge = no) Merge amplifiers from same CCD?
(xtalkfi= ) Crosstalk file
(fixfile= ) List of bad pixel masks
(saturat= 45000) Saturated pixel threshold
(sgrow = 0) Saturated pixel grow radius
(bleed = INDEF) Bleed pixel threshold
(btrail = 10) Bleed trail minimum length
(bgrow = 0) Bleed pixel grow radius
(biassec= image) Overscan strip image section
(trimsec= image) Trim data section
(zero = Zero.fits) List of zero level calibration images
(dark = ) List of dark count calibration images
(flat = ) List of flat field images
(sflat = ) List of secondary flat field images
(minrepl= 1.) Minimum flat field value
(interac= no) Fit overscan interactively?
(functio= legendre) Fitting function
(order = 2) Number of polynomial terms or spline pieces
(sample = *) Sample points to fit
(naverag= 1) Number of sample points to combine
(niterat= 4) Number of rejection iterations
(low_rej= 3.) Low sigma rejection factor
(high_re= 3.) High sigma rejection factor
(grow = 0.) Rejection growing radius
(fd = )
(fd2 = )
(mode = q)
# After you have checked all of the parameters, you can run zerocombine. It is
# generally useful to fit the first few overscan regions interactively until you
# are satisfied with the parameters.
#
# Create your master flat fields
mscred> epar flatcomb
I R A F
Image Reduction and Analysis Facility
PACKAGE = mscred
TASK = flatcombine
input = dflat*fits List of flat field images to combine
(output = Dflat_) Output flat field root name
(combine= median) Type of combine operation
(reject = avsigclip) Type of rejection
(ccdtype= ) CCD image type to combine
(process= yes) Process images before combining?
(subsets= yes) Combine images by subset parameter?
(delete = no) Delete input images after combining?
(scale = mode) Image scaling
(statsec= ) Image section for computing statistics
(nlow = 1) minmax: Number of low pixels to reject
(nhigh = 1) minmax: Number of high pixels to reject
(nhigh = 1) minmax: Number of high pixels to reject
(nkeep = 1) Minimum to keep (pos) or maximum to reject (neg)
(mclip = yes) Use median in sigma clipping algorithms?
(lsigma = 3.) Lower sigma clipping factor
(hsigma = 3.) Upper sigma clipping factor
(rdnoise= 4.4) ccdclip: CCD readout noise (electrons)
(gain = 2) ccdclip: CCD gain (electrons/DN)
(snoise = 0.) ccdclip: Sensitivity noise (fraction)
(pclip = -0.5) pclip: Percentile clipping parameter
(blank = 1.) Value if there are no pixels
(mode = q)
mscred> epar ccdproc
I R A F
Image Reduction and Analysis Facility
PACKAGE = mscred
TASK = ccdproc
images = dflat*fits List of Mosaic CCD images to process
(output = ) List of output processed images
(bpmasks= ) List of output bad pixel masks
(ccdtype= FLAT) CCD image type to process
(noproc = no) List processing steps only?
(xtalkco= no) Apply crosstalk correction?
(fixpix = no) Apply bad pixel mask correction?
(oversca= yes) Apply overscan strip correction?
(trim = yes) Trim the image?
(zerocor= yes) Apply zero level correction?
(darkcor= no) Apply dark count correction?
(flatcor= no) Apply flat field correction?
(sflatco= no) Apply sky flat field correction?
(split = no) Use split images during processing?
(merge = no) Merge amplifiers from same CCD?
(xtalkfi= ) Crosstalk file
(fixfile= ) List of bad pixel masks
(saturat= 45000) Saturated pixel threshold
(sgrow = 0) Saturated pixel grow radius
(bleed = INDEF) Bleed pixel threshold
(btrail = 10) Bleed trail minimum length
(bgrow = 0) Bleed pixel grow radius
(biassec= image) Overscan strip image section
(trimsec= image) Trim data section
(zero = Zero.fits) List of zero level calibration images
(dark = ) List of dark count calibration images
(flat = ) List of flat field images
(sflat = ) List of secondary flat field images
(minrepl= 1.) Minimum flat field value
(interac= no) Fit overscan interactively?
(functio= legendre) Fitting function
(order = 2) Number of polynomial terms or spline pieces
(sample = *) Sample points to fit
(naverag= 1) Number of sample points to combine
(niterat= 4) Number of rejection iterations
(low_rej= 3.) Low sigma rejection factor
(high_re= 3.) High sigma rejection factor
(grow = 0.) Rejection growing radius
(fd = )
(fd2 = )
(mode = q)
# Process your science frames for overscan, trim-correction, zero-subtraction,
# and flat field corrections. In general you will want to make a list of your
# data for each filter.
#
# Applying a WCS to your data and creating a mosaicked image.
#
This section is in under construction.






