YALO IR - June 2000

Yalo IR Channel notes
Observing with the YALO IR Channel - June 2000 

The following are some brief notes on observing with the YALO IR channel, including standards and color terms. These are my experiences in taking and reducing the YALO IR data. All programs and scripts referred to in these notes can be obtained from my ftp area in the file yalo.tar.gz.

Basic YALO IR facts:

Rockwell 1024^2 HgCdTe "Hawaii" device
0.222"/pix for 3.4x3.4 arcmin
gain = 6.5 +/- 0.4 e-/ADU (measured Feb 2000)
ron = 13.4 +/- 1.0 e- (measured Feb 2000)
Numerical bias of 400DN is added to the data to make the output positive.
Dark is < 0.1DN/s

Minimum integration time is 4s. You can request 1-3s, but you will get 4s.

According to Darren Depoy, the upper value of DN is about 10,000 (<1% non-linear). I generally stick to <8000 to be safe.

Measured counting rates over 20 nights from Nov99-Mar00:

(J,H,K)=10 gives (6750,7200,4400) ADU/s in 10" diameter aperture (the size used by Persson, et al 1998)

J_sky = 2.7 +/- 0.6 (sigma) ADU/s/pix 15.2 mag/arcsec
H_sky = 12.8 +/- 2.7     13.6 mag/arcsec
K_sky = 29.8 +/- 6.1     12.1 mag/arcsec

J=H=7.5 in 4s is near 10000ADU peak.
K=7.5 in 4s is near 7500ADU peak. Short exposures in K are often diffraction limited.

 

CCD and IR orientation: 

           E      
       |----------|---------|
  |                    |
  |                    |N
  |                    |
  |----------|---------|

CCD left amp is bad.

Columns past about 600 are affected by vignetting changes when the internal dither is used.

CCD to IR centers.
(1510,1030) on the CCD maps to to (512,512) on the IR ( 23 Mar 2000).

 

DITHERING.

The YALO IR channel allows an internal dither. The dither is specified in dither units where 1 unit = 0.5 arcseconds. I use dithers of 30-60 units for my early observations of supernovae.

The 7 point dither with a factor of 60 will move an object in pixels as follows:

0 0
-147 43
113 -178
31 132
145 -43
-116 176
-33 -135


These offsets scale well with dither units. Thus for a dither of 30, just divide these numbers by 2.

I have an IRAF task called "dtilt" which will plot the dither positions on an IR image.

The dithering is very convenient but there are two problems.

 

1. The detector is badly vignetted for x>650 for dither positions other than the first one.

This is a serious problem and implies that you should never be using the detector area where x>650.

2. The fringing pattern in HK is a function of dither position.

If you want to go deep (H,K>15) the fringing will seriously affect your photometry.

I recommend not using the dither except for bright isolated objects. For my supernova programs, I have the telescope operator manually dither (by moving the guide star) the telescope. If you do this, please note the following:

The guider camera at the 1m is not terrible sensitive. If you are working away from the Galactic plane, there may be few or no guide stars. If there is a suitable guide star in the field, instruct the observer to dither manually. Note that the guider field has 0.72 arcsec/per unit with the field as:

                          S      
  | ------------------------------ | ->y=033         
  |         |  
  |   7 8 9 |  
  |         |  
  y|   6 1 2 |  
  |         |W  
  |   5 4 3 |  
  |         |  
  | ------------------------------ | ->y=234
  |     x   |  
  v         v  
   x=014                                          x=233

 

I instruct the observer to dither as follows:

Start with the object at (300,512) for the SN on the IR detector. Let us assume there is a guide star at guider position (x,y). The nine exposures are taken at the following positions (shown above in the diagram).

1. original position, guider at (x,y), SN at (300,512) on IR detector
2. telescope 25"E, guider at (x+35,y)
3. 25"S, guider at (x+35,y+35)
4. 25"W, guider at (x,y+35)
5. 25"W, guider at (x-35,y+35)
6. 25"N, guider at (x-35,y)
7. 25"N, guider at (x-35,y-35)
8. 25"E, guider at (x,y-35)
9. 25"E, guider at (x+35,y-35)

 

GAIN AND READ OUT NOISE

The dome on and off are with ncoadds=10. The program findgain assumes that there are no coadds. If you use the IRAF program "findgain", you must divide the calculated gain by (ncoadds). I used the script "fgain" to calculate the gain.

 

COLOR TERMS FOR THE YALO IR DETECTOR

Standards, on the CIT system, were taken from:
Elias et al (1982). AJ, 87, 1029 (CIT system)
Elias et al (1983). AJ, 88, 1027 (CIT system)
Persson et al (1998). AJ, 116, 2475
Extinction discussion: Frogel (1998). PASP, 110, 200.

Note that the CIT standards are not quite the same as the Persson standards. The CIT system used a silicon window and the J bandpass, while having the same *filter* function, actually has a redder effective wavelength. The effect is that the CIT system is bluer than the Persson system for red stars.

Persson recommends transforming the CIT system to the LCO system via the expressions given in Table 7. I have transformed all CIT red stars using the Persson transformation for this photometry. The photometry library is given in "ir.lib" in DAOPHOT format.

If you want to observe standards, use 4s for the Elias standards and 10s for the Persson standards. A dither of 5 should give you excellent data.

The form of the transformation is :

j_nat= J + a0 + a1*(J-K) + a2*X + a3*T
h_nat= H + b0 + b1*(J-K) + b2*X + b3*T
h_nat= H + b0 + b1*(H-K) + b2*X + b3*T
k_nat= K + c0 + c1*(J-K) + c2*X + c3*T

j_nat=aperture mag corrected to 10"
J,J-K = library values of photometry
X=airmass (solved as [X-1])
T=UT times

The magnitude is measured relative to a zeropoint m=25 for a total detection of 1ADU/s in the full aperture.

In all cases there was no T dependence and I set the a3b3c3 terms to zero.

  mean m.e.   red chi-sq    
A0 = 5.4095 0.0062 << 5.3 5 1.03  
A1 = -0.0278 0.0032 << 4.4 5 0.94  
A2 = 0.0286 0.0044 << 3.9 5 0.89  
B0 = 5.3404 0.0062 << 5.9 5 1.09  
B1 = 0.0103 0.0032 << 5.0 5 1.00 J-K
B1 = 0.0217 0.0026 << 2.2 2 1.06 H-K
B2 = 0.0269 0.0045 << 2.0 5 0.63  
C0 = 5.8897 0.0062 << 3.9 5 0.89  
C1 = -0.0027 0.0031 << 5.3 5 1.03  
C2 = 0.0705 0.0034 << 9.0 5 1.34  

The color terms are

[J,J-K] = -0.028 +/- 0.005
[H,J-K] = 0.010 +/- 0.005
[H,H-K] = 0.022 +/- 0.005
[K,J-K] = -0.003 +/- 0.005

Not surprisingly, the IR color terms are close to 0.

The J extinction is very weird here. The typical extinctions should be
X(JHK)=(0.10,0.04,0.08)

but we measure

X(JHK)=(0.03,0.03,0.07)

I have no explanation for this. The extinctions are quite well determined.

The averaged observed values for the standards across all 6 nights is:
 

3 INDICES chi K errr J-K err H-K err nJ nH nK
g77-31 1.000 7.8566 0.0378 0.9258 0.0571 0.3160 0.0430 1 1 1
hd22686 1.000 7.1299  0.0388  0.0311  0.0577  0.0483  0.0438  1  1  1
hd38921 1.397 7.5360  0.0009  0.0347  0.0015  0.0144  0.0022  40  36  43
hd75223 1.453 7.2820  0.0011 0.0416  0.0020  0.0161 0.0031  31  23  38
gl347a 1.258 7.6308  0.0014  0.8028 0.0020  0.2339  0.0016  36  35 35
hd106965 3.073 7.3117  0.0011  0.0611 0.0027  0.0183  0.0038  30  24  35
p9118 0.696 11.2698  0.0025  0.4676 0.0052  0.1002  0.0032  11  13  13
p9135x 1.140 12.0712  0.0070  0.3449 0.0087  0.0463  0.0076  19  20  20
p9149 1.076 11.8694  0.0078  0.3470 0.0082  0.0468  0.0081  21  21  21
lhs191 0.781 10.6784  0.0036  0.9417  0.0044  0.3916  0.0039  19  21  21
iras537w 1.135 10.0583  0.0043  2.8830 0.0070  0.9662  0.0052  13  13  13
lhs2026 0.673 11.1269  0.0029  0.9162 0.0036  0.3612  0.0033  21  21  21
cskd-8 0.608 9.1582  0.0018  2.6326  0.0029 0.7861  0.0021  21  21  21
cskd-9 0.549 9.1360  0.0016  2.2291 0.0026  0.6301  0.0019  21  21  21
iras537sx 4.484 11.0289  0.0134  2.3007 0.0270  0.7589  0.0229  20  20  21

 

 The library values are

g77-31 7.840 0.0100 0.927 0.0100 0.329 0.0100 CIT_to_Persson
hd22686 7.185 0.0070 0.010 0.0070 0.005 0.0070 CIT_to_Persson
hd38921 7.535 0.0050 0.035 0.0050 0.015 0.0050 CIT_to_Persson
hd75223 7.280 0.0050 0.045 0.0050 0.015 0.0050 CIT_to_Persson
gl347a 7.630 0.0100 0.801 0.0100 0.236 0.0100 CIT_to_Persson
hd106965 7.315 0.0050 0.060 0.0050 0.021 0.0050 CIT_to_Persson
p9118 11.264 0.0160 0.459 0.0110 0.093 0.0090 Persson
p9135x 12.071 0.015 0.322 0.015 0.027 0.015 average of
Persson and me
p9149 11.861 0.0050 0.352 0.0070 0.056 0.0060 Persson
lhs191 10.667 0.0200 0.954 0.0130 0.391 0.0120 Persson
iras537w 9.981 0.0130 2.993 0.0090 1.051 0.0090 Persson
lhs2026 11.129 0.0070 0.937 0.0060 0.368 0.0050 Persson
cskd-8 9.151 0.0110 2.590 0.0100 0.762 0.0100 Persson
cskd-9 9.161 0.0110 2.211 0.0100 0.627 0.0100 Persson
iras537s 10.972 0.0140 2.883 0.0120 1.115 0.0090 Persson

The observed mags for iras537s were quite different than the values in the Persson table. I did not use it in the solution.

There are large correlated O-C differences here for the red stars.

If you need absolute photometry, you should include a Persson standard before or after your observation (on a photometric night). Make sure the standard is very near in airmass (and preferably near on the sky) to your object. If this is done over a few photometric nights, using the transformations above, you should be able to transform your photometry to an absolute scale. You should observe the Elias standards for 4s and the Persson standards for 15s. A dither of 30units over 5 positions for each color will give a good calibration.

 

BASIC CALIBRATIONS FOR YOUR DATA

The YALO observer will take dome flats for you. These are 4s exposures, coadds=10 at dither=1 position. They are processed for you as DOME_ON - DOME_OFF and will be placed in your directory for each night of observation. This is the standard flat field. For most observers, this is all the calibration that you need. I however, ask for other data.

1. I ask that along with the JHK (DOME_ON - DOME_OFF), they also copy the averaged DOME_ON and DOME_OFF data to my tape. The DOME_OFF data is a very quick check on the "bias" level of the chip. You can also use these data to calculate the gain and read noise.

2. I plan my observations to have set exposure times, typically 45s, 60s, or 90s. For each set exposure time I use, I ask the night assistant to observe dark frames for me, and to average the darks and write them to the tape (I don't save the individual darks). I ask for 20 darks for each exposure time. These darks are the actual zero structure of the chip. This data is needed if you need to understand the vignetting.

Don't be fooled into believing that the darks are sufficient for the warm pixel removal. Like all IR detectors, this one has lots of warm pixels. Most of the charge injection into these pixels is constant, so the subtraction of the dark can remove it, but a small number of the warm pixels vary during the night. The only way to remove these warm pixels is by the usual sky subtraction.

 

DATA REDUCTION

I am not going to tell you how to reduce your data. But here are some hints on the YALO data.

prelimiaries:

1. The YALO FITS headers have some features which I change.

equinox ==> epoch
observat ==> "ctio"
and move the jd to JD-OLD

I run the script "yalohead" to convert the FITS headers into something
more standard for IRAF.

2. Then run

setjd ir*.fits date="UTDATE" time="UT" exposure="EXPTIME" epoch="EQUINOX"

to set the JD.

3. Set the airmass

setairmass ir*.fits

4. I have written a small task to put a dither parameter in the header.

If you have standards that were taken with dithers, you may want to use this.

task dtilt = home$scripts/dtilt.cl

dtilt:

image = "a*.imh" input images
(dither = 30) Tilt step: 10,20,30, etc
(tilt1 = 1535) Tilt position 1
(tilt2 = 2440) Tilt position 2
(tilt3 = 2070) Tilt position 3
(imglist = "tmp$tmp.562ga")  
(mode = "ql")  

Check the tilt parameters first as:

hsel *.fits $I,tilt1,tilt2,tilt3 yes
dtilt *.fits

 

BASIC CCDRED STUFF.

If there are vignetting problems, it is easier to deal with the data if you copy all the J data (ir*.fits, ir*.J_OFF.fits, ir*.flatj.fits) to a directory called "j". Same for H and K. For some reason, ccdred gets annoyed if the data are not in *.imh format. You must copy the *flat*.fits data to *flat*.imh, where these data are the ON-OFF dome data.

hsel ir*.fits $I,irfltid yes | grep "J" - | fields - 1 > inj
hsel ir*.fits $I,irfltid yes | grep "H" - | fields - 1 > inh
hsel ir*.fits $I,irfltid yes | grep "K" - | fields - 1 > ink

Copy the images and rename them something simplier, like a???.imh.
 

To copy images from *.fits to *.imh, you can use:
task cpimh = /uw50/nick/scripts/cpimh.cl
cpimh ir000323.K_OFF

This task copies the *.fits to *.imh in the user directory.

 

Making the biases:

The IR detector has a numerical bias of 400 units. On top of that, the dark frame at the same exptime as an object frame has warm pixels that are similar to biases. The biases we will use are in order of preference:

1. A dark taken at the same time as the object frame.


2. The DOME_OFF frame

Note the the K DOME_OFF actually has some light on it. You must do a getsky on this image, see what the sky value is, and subtract a constant to bring it to 400.

imar ir000323.K_OFF - 460 ir000323.K_OFF

3. A numerical bias frame with 400. in all the pixels. If you have to make a numerical bias, then:

imcopy ir991121.flatj zero400
imrep zero400 400. lower=INDEF upper=INDEF
hedit zero400 IMAGETYP zero up+
hedit zero400 title "Numerical bias of 400" up+

For the DOME_OFF, dark, or a constant bias of 400 frame, you must declare the image as a ZERO image.

hedit ir000323.H_OFF IMAGETYP zero up+ ver-

 

Making the flats.

0. Copy the flats to *.imh

task cpimh = /uw50/nick/scripts/cpimh.cl
cpimh *.flat?.fits delin+

1. The data called ir991121.flatj etc. are the flats calculated as DOME_ON-DOME_OFF.

YOU MUST EDIT THE HEADER OF YOUR FLAT FRAME TO SHOW THAT THESE FLATS ARE ZERO-CORRECTED. (They are already zero-corrected because they were calculated as DOME_ON-DOME_OFF). IF YOU DON'T DO THIS, THE FLATS WILL BE ZERO-CORRECTED BY CCDPR, AND THIS IS VERY WRONG!

hedit *flat*.imh ZEROCOR "Corrected by DOME_OFF" add+

2. The flats may have 0 value pixels, which will cause the ccdpr to crash.

The low pixels should be replaced by a large number (here I chose saturation) so that in the division, they will be close to 0. You may want to run the flats through imrep as:

imreplace *flat*.imh 10000 lower=INDEF upper=1

Now the ccd reduction:

With the parametes set, you just run:
ccdpr a*.fits nop+
to see what happens and then
ccdpr a*.fits

MAKE SURE THE FLAT DOES NOT GET ZERO SUBTRACTED!

ccdr:

pixeltype = "real real") Output and calculation pixel datatupes
(verbose = yes) Print log information to the standard output?
(logfile = "logfile") text log file
(plotfile = "") Log metacode plot file
(backup = "") Backup directory or prefix
(instrument = "myiraf$/yalo_ir.dat") CCD instrument file
(ssfile = "myiraf$/yalo:_ir.sub") Subset translation file
(graphics = "stdgraph") Insteractive graphics output
(cursor = "") Graphics cursor input
(version = "2: October 1987")  
(mode = "ql")  
($nargs = 0)  

 

ccdpr:

images = "a*.imh" List od CCD images to correct
(output = "") List of output CCD images
(ccdtype = "") CCD image type to correct
(max_cache = 0) Maximun image caching memory (in Mbytes)
(noproc = no) List processing steps only?\n
(fixpix = no) Fix bad CCD lines and columns?
(overscan = no) Apply overscan strip correction?
(trim = no) Trim the image?
(zerocor = yes) Apply zero level correction?
(darkcor = no) Apply dark count correction?
(flatcor = no) Apply flat field correction?
(illumcor = no) Apply illumination correction?
(fringecor = no) Apply fringe correction?
(readcor = no) Convert zero level image readout correction?
(scancor = no) Convert flat fiel image to scan correction?\n
(readaxis = "line") Read out axis (column|line)
(fixfile = "") File describing the bad lines and columns
(biassec = "") Overscan strip image section
(trimsec = "") Trim data section
(zero = "zero400") Zero level calibration image
(dark = "") Dark count calibration image
(flat = "ir*.flat*.imh") Flat field images
(illum = "") Illumination correction images
(fringe = "") Fringe correction images
(minreplace = 1.) Minimum flat field value
(scantype = "shortscan") Scan type (shortscan|longscan)
(nscan = 1) Number of short scan lines\n
(interactive = yes) Fit overscan interactively?
(function = "legendre") Fitting function
(order = 4) Number of polynomial terms of spline pieces
(sample = "*") Sample points to fit
(naverage = 1) Number of sample points to combine
(niterate = 3) Number of rejection iterations
(low_reject = 2.5) Low sigma rejection factor
(high_reject = 2.5) High sigma rejection factor
(grow = 0.) Rejection growing radius
(mode = "ql")  

myiraf$/yalo_ir.dat:
exptime exptime
imagetyp imagetyp
subset IRFLTID
 

         OBJECT   object
  DARK   zero
  FLAT flat  
  BIAS   zero
  MASK   other

myiraf$/yalo_ir.sub

       'H' H
  'J' J
  'K' K

 

Reduce the data to [Z] with ccdpr. We will do the flatfields and badpix fixing later after the sky subtraction.

 

MAKE THE MASK

Make a mask image as follows. Here we use the dome flats for the mask. Note that there are very many warm pixels with the detector and about 10% of these change flux during the night. If the warm pixels change flux between the ON and OFF images, they will be flagged as bad pixels here.

The philosophy of the masks is that all pixels in a normalize image that are less than some value like 0.7 are probably bad, and will be marked as a bad pixel.

mask1.cl:
# to make the mask, use imhist and look for the limits
# first flatten the flats and remove the edge defects
#
string img
img = "ir000323.flath"
#
fmed(img,"mask", xwin=1, ywin=101, boundary="wrap")
imar(img, "/", "mask", "mask")
imrep mask[*,1:9] 0 lower=INDEF upper=INDEF
imrep mask[*,1021:1024] 0 lower=INDEF upper=INDEF
imrep mask[1:1,*] 0 lower=INDEF upper=INDEF
imrep mask[1021:1024,*] 0 lower=INDEF upper=INDEF
#
# now check the historgram and change the limits if needed.
#
imhist mask z1=0.4 z2=1.4 nbins=100

mask2.cl
#
# good pix are 0, bad are 1 for IRAF mask
# the values 0.65 and 1.25 need to be checked on the histogram
# each time you make the mask.
#
real lll, uuu
lll = 0.8
uuu = 1.17
displ mask 1
imrep("mask", lower=INDEF, upper=lll, val=-1 )
imrep("mask", lower=uuu, upper=INDEF, val=-1)
imrep("mask", lower=lll, upper=uuu, val=0)
imar mask * mask mask
imcopy mask.imh mask.pl
# make DAOPHOT mask where bad pix are 0 and good are 1
imrename mask.imh maskdao
imar maskdao - 1 maskdao
imar maskdao * -1 maskdao
#
displ mask.pl 2 zs- zr- z1=0 z2=1

You can check frames 1,2 to see if the mask looks good.

 

SKY SUBTRACTION

Make inj,inh,ink files for all the SN data. These will be used to make the sky.

task irsky = home$scripts/irsky.cl
hsel @in1 $I,irfltid yes | grep "J" - | fields - 1 > inj
hsel @in1 $I,irfltid yes | grep "H" - | fields - 1 > inh
hsel @in1 $I,irfltid yes | grep "K" - | fields - 1 > ink
 

Run irsky:
irsky:

images = "@inj" input images
(statsec = "[10:700,10:1010]") Stat sec
(sigma = 2.5 sigma clip fro stats
(niter = 5 interactions for sigma
(irfltid = "IRFLTID" keyword for filter
(outimage = "Sky" Output roor for sky image
(nlow = 0 number of low pixel to reject
(nhigh = 1 number of high pixels to reject
(combine = "median" type of combine function
(reject = "minmax" type of rejection
(imglist1 = "t1.jnk"  
(mode = "ql"  

irsky f*.imh

You may have to play with the nhigh to reduce the print-through.

This program outputs a file called sub.cl. Edit sub.cl to output s???.imh

imdel tempsky
imar SkyJ * 1.0095662405725 tempsky
imar ir000528.0203 - tempsky s203
imdel tempsky
imar SkyJ * 1.0479313902369 tempsky
imar ir000528.0204 - tempsky s204
etc.

This is now sky subtracted data. All the data should be near 0 sky. You can check this with getsky.

task getsky = home$scripts/getsky.cl

Look at the final subtractions to see if the sky subtracted well, and there is not a large flux "hole" in the image center due to print through of the median combine of the images.


Note on standard stars. For the standard star runs, I looked at the J,H,K separately, and separated out the exposure times. I then formed skies for each exptime, rather than a grand average one. I did not scale the skies; rather I used an offset and a straight median. This is because the sky is a lot less of a problem than warm pixels. The subtraction looked good but some warm pixels did not get subtracted out. One needs a few object exposures sequentially with the telescope moved to get the warm pixels removed using a local median.

First sort the data based on exptime, and make files of images in a given filter and a given exptime, such as inj04,inj15 etc.

hsel @inj $I,exptime yes | sort col=2 > junkj
hsel @inh $I,exptime yes | sort col=2 > junkh
hsel @ink $I,exptime yes | sort col=2 > junkk


imcomb @ink04 SkyK04 scal- rejec=minmax comb=median nlo=0 nhi=1 zero=mode
imcomb @inj04 SkyJ04 scal- rejec=minmax comb=median nlo=0 nhi=1 zero=mode
imcomb @inh04 SkyH04 scal- rejec=minmax comb=median nlo=0 nhi=1 zero=mode
imcomb @ink15 SkyK15 scal- rejec=minmax comb=median nlo=0 nhi=1 zero=mode
imcomb @inj15 SkyJ15 scal- rejec=minmax comb=median nlo=0 nhi=1 zero=mode
imcomb @inh15 SkyH15 scal- rejec=minmax comb=median nlo=0 nhi=1 zero=mode

Then subract the images into s???.imh
hsel a*.imh $I,irfltid,exptime yes > in2
edit in2, etc.

Put a keyword in the header that you have done the skysubtraction:
hedit sxxx.imh SKYSUB "Subtracted SkyJ04" add+ ver-
etc.

 

FLATTEN AND FIX BAD PIXELS

ccdpr s???.imh flatcor+
fixpix s???.imh mask=mask.pl

Check to see that the images are now [BZF].

ccdl s*.imh

I leave the final shift and average task to you. I tend to shift and stack only the data in common to all the dithered images. Others will first imbed the image in a large image (say 1500x1500) and then shift and stack. In the final image, some pixels will come from only one frame, others from all the frames. It depends on if you need the area or not.

 

back to top