Motion of an X-Ray Jet Ejected by a Black Hole

Astronomical Laboratory ASTR:4850, Spring 2018
by Philip Kaaret


Reading


Not a lab - This assignment will be started (and maybe completed) during lab time, but should be done individually and written up individually. The assignment should not go into your lab notebook. You may write it up in any format that you like (electronically, on paper, stone tablets...). Hand in your final code along with your write up.

Introduction

This course is focused on visible light, but astronomy covers the whole electromagnetic spectrum from lethargic radio waves to very energetic gamma-rays. In today's lab, we will analyze X-ray data obtained with the Chandra X-ray Observation of jets ejected from the black hole X-ray binary XTE J1550-564. XTE J1550-564 (hereafter J1550) is a binary system consisting of a black hole with a mass of 9.10±0.61 solar masses and a star of spectral type K3III in a 1.55 day orbit. The system is at a distance of = 4.4±0.6 kpc. In 1998, the system produced a major X-ray outburst that peaked on 1998 September 20. Radio jets on milli-arcsecond scales were observed a few days after the outburst. In 2002, a radio jet was discovered to the East of the black hole. This led to a re-analysis of X-ray data taken in 2000 and the detection of an X-ray counterpart of the radio jet. Follow-up observations led to the discovery of a jet visible in X-rays to the west of the black hole. The figure below shows an X-ray image taken on 2002 March 11. The color scale represents the number of X-rays in each pixel of the image. The black hole is the bright source at the center of the image, the western jet is the brighter source on the right, and the eastern jet is the dim source on the left. The red line shows the axis of the milli-arcsecond scale jets seen in 1998 shortly after the major X-ray outburst. The jets visible in 2000-2002 appear to be the same jets ejected in 1998 re-energized by interaction with the interstellar medium.

In this class, we will have the pleasure of analyzing X-ray event data obtained with the Chandra X-Ray Observatory. We will compare two images, one taken on 2002 March 11 and a second taken on 2002 September 24. The data were previously analyzed in these papers: http://adsabs.harvard.edu/abs/2003ApJ...582..945K and http://adsabs.harvard.edu/abs/2004NuPhS.132..354K. You will be measuring the position of the Western jet relative to the black hole to estimate the speed of the jet.

X-Ray event data in FITS format

With optical CCDs, one exposes the CDD for some time with photons striking many, if not all, of the pixels on the CCD. The data read out from the CCD is then an image of the sum of all the photons received. X-ray CCDs work in a different mode, recording each individual X-ray. X-ray astronomy suffers from a paucity of photons (we delude ourselves that quality counts more than quantity). Even with large X-ray telescopes such as Chandra, the rate at which X-rays are collected is often one per second or less. X-ray CCDs are usually typically exposed for short intervals, shorter than the average time between two successive photons. Each image is then an image of a single photon. Also, due to their sizable energies, X-ray do not produce a single photoelectron, but many. In silicon, 3.65 eV of energy is required, on average, to produce an electron-hole pair, so an X-ray with an energy of 2000 eV can produce 550 electrons. CCDs measure the total number of electrons, called pulse height, which is a measure of the energy of incident X-ray. Rather than producing images, X-ray CCDs produce a record of each individual X-ray detected. The position of the photoelectrons on the chip indicates the position on the sky from which the X-ray originated, the total number of electrons indicates the X-ray energy, and the time at which the exposure was acquired indicates the time at which the X-ray arrived. Thus, the data from X-ray CCDs is fundamentally different from optical images.

We have been storing our optical images in FITS format. FITS (the Flexible Image Transport System) was originally created to store images, but its popularity led to extensions for other types of data. X-ray data are typically stored in a 'binary table extension', which is basically a list of events with values, such as time, pulse height, and position.

We will get our X-ray data form the Chandra archive. Observatories operated by NASA are required to store all of their observational data and make it publicly available (often first giving the observers who obtained it exclusive access for the first year). Go to the Chandra Search and Retrival interface http://cda.harvard.edu/chaser/.  Type (or paste) XTE J1550-564 in the Target Name field and click the "Resolve Name" button. Check that the name was resolved (RA and DEC coordinates should appear) and then click the "Search" button. Now find the observations that occurred on 2002-03-11 and 2002-09-24 and check the Select box for those. Click the "Add Products to Retrieval List" button. Then click the "Retrieve Products" button. Wait a bit and then click "view the status of your retrieval". A little window should pop-up; wait until it indicates your data are ready for retrieval, then click on the link to download your data. You will need to extract two files: 3448/primary/acisf03448N003_evt2.fits.gz and 3807/primary/acisf03807N003_evt2.fits.gz. You'll then need to gunzip those so that you end up with files with .fits extension. These are event files containing binary tables of X-ray events. If your computer doesn't have software for uncompressing tar and gz file, you can use the portable version of 7-zip that requires no installation unzip software that can be used to open tar/gz: https://portableapps.com/apps/utilities/7-zip_portable.

Many of you may have wondered why we use ds9. You're about to find out. Start up ds9 and then open one of the event files. Set the Scale to Log and adjust the colormap to nice values (I'm fond of 'heat'). You're now looking at your event file collapsed to an image. Try that with MaxIm DL!

You should see two bright X-ray source near the center of the image. Use Simbad to find the coordinates for XTE J1550+564 so that you can identify which is the black hole binary. Draw circular regions around the black hole and the X-ray jet to the west (to the right in the image). To draw a circular region, select Region/Shape/Circle and Edit/Region. Then move your cursor to where you want the center of the region, click and hold dragging out to your desired radius. Make your radius just large enough to enclose all of the counts associated with each source. You will need the region information later on. You can either double click on the region, which will raise a pop-up window or do Region/Save Regions to write the regions you have defined to a file. Find regions in physical coordinates for the black hole and jet in each image.

Reading X-Ray event data in FITS format in Python

Now let's look at a python program to process event files in fits format. Load xray_fits.py into an editor of your choice. Briefly look at line 3. Most of the python examples in this class import everything from numpy using 'from numpy import *'. This is easy, but has the disadvantage of loading the whole numpy module which can sometimes conflict with other modules or your own code. It is better practice to import only those functions that you actually use as done here. The downside of this is that you have to remember to put the functions in the import statement.

Edit line 6 that sets the filename to match the name that you used for one of your downloaded event files. Add directory information if you don't store your code in the same directory as your data.

Lines 8-11 open the FITS file and read it in, copy the header information into the variable h, copy all of the event information into the numpy record array d, and then close the file. It's always do practice to close a file as soon as you are done with it, since you'll forget otherwise.

A record array works like an array, but allows using a text index into the data rather than a numerical index. This is evidence in line 14. d['x'] picks out the data filed under the index 'x'. Lines 15-19 do the same for other event data. We end up with a set of numpy arrays with the event data: x, y, energy, time, ccd_id, and grade. The first entry in each array corresponds to the first event in the FITS file, the second to the second event, ...  The variables x and y are sky coordinates in pixels. These match the physical coordinates in ds9. energy is the event energy in eV. Time is the event time in seconds since 1998 Jan 1, 00:00:00 TT (Terrestrial Time). ccd_id indicates on which CCD the event was recorded. Chandra has multiple CCDs. The observations you are examining were taken with only one of the CCDs on, CCD #7 which is also called the S3 chip. The layout of the Chandra CCDs is described here: http://cxc.harvard.edu/proposer/POG/html/chap6.html.

The variable grade indicates the shape of the X-ray event. As noted above, X-ray CCDs are operated so that single X-rays are recorded in each exposure. However, the charge from a single X-ray can reach more than one pixel. This happens if the track length of the primary photoelectron produced by the X-ray is larger the pixel size. An additional effect is that electrons diffuse as they move in the CCD, spreading the charge cloud. Even so, images of individual X-ray tend to be very compact, with most of the charge going into the central pixel and extra charge going into an adjacent pixel sharing a side (rather than a corner). In space there are energetic particles that can also strike the CCD and deposit charge. Sometimes these particle-induced events look just like X-rays. However, energetic particles can deposit energy in multiple pixels making some particle-induced events more spread out than X-rays. Chandra, and almost all other X-ray CCDs in space, use the event 'grade' to screen out particle-induced events. The standard Chandra data processing retains grades 0, 2, 3, 4, and 6. These correspond to events with all of the charge in a single pixel, in two adjacent pixels sharing a side, or three adjacent pixels forming an 'L'. you can read about this in section 6.15.1 of http://cxc.harvard.edu/proposer/POG/html/chap6.html.

The next set of lines, 21-29, select out only events with energies between 300 and 8000 eV. This is a commonly used energy range with Chandra. Line 22 sets the energy range. Line 23 finds which events satisfy the energy cut. Lines 24-29 picks out only the events satisfying the cut and put them back into the same variables.

The remainder of the code makes a few plots: a histogram of event grades, a histogram of event energies, and a plot of the event positions. On the position plot, it will probably look like a solid block when the plot first appears. This is because the plot symbol is relatively large. If you zoom in on the coordinates of the black hole and jet, you should be able to pick them out.

Now run the program and look at the plots. Are the grades as expected? Can you see the black hole and the X-ray jet?

Now print out the variable h. The first line indicates that we have a binary table extension. NAXIS1 is the number of bytes used to record each event. NAXIS2 is the number of events. The different data recorded for each event are described by keywords like TTYPE1 = the name of the datum, TFORM1 = the format (1D is a double precision floating point number, 1I is an integer), and TUNIT1 = the units. Our python code uses only a subset of the data available for each event. How many different pieces of information are recorded for each event?

Measuring the motion of the X-ray jet

We want to measure the displacement between the black hole and the jet in the two images. To do this, you will need to write code to pick out the events corresponding to the black hole or X-ray jet in each image and then find the centroid for those events. From the position of the black hole and of the X-ray jet, you can calculate the distance between them in pixels. Convert the pixel distance to arcseconds using the pixel size in the Chandra  Advanced CCD Imaging Spectrometer description. You can then calculate how much the jet moved between the two observations. Using the change in distance between the two observations and the time between the two observations, you can then calculate the average apparent speed of the jet during that interval (let's use units of milliarcseconds per day).

Hints - you might use the code for event selection based on energy as a guide about how to do event selection based on X and Y. You can do the event selection using either circles or rectangles. You could convert the event list into an image and use your code from the astrometry lab, but you might find it easier to keep everything in terms of the event list.

Questions - can you estimate the error on your position calculations? Given that the jet isn't very point-like, is there a better way to estimate how much it moved?

If you get bored, you can watch Neil de Grasse Tyson comment on these data.