Retrieving X-ray Data from the CSC

Retrieving X-ray Data from the CSC#

For my work, the most important information that I need from CXO is the coordinates of the X-ray sources (used to locate their optical counterparts on an HST image), their X-ray luminosities (calculated from the CSC-provided flux), their hardness ratios (used to determine whether or not they may be a supernova remnant in a later section), the off-axis angle, and the total X-ray counts (the last two of which are used to calculate the uncertainty radii in Astrometric Corrections). This information can be pulled directly from CSCView.jar.

Open the program by clicking the icon or typing into the command line (where it is saved):

java -jar cscview.jar &

(The optional & allows you to continue using the terminal for other processes while cscview.jar is running)

This will open the program GUI, which will look something like:

../_images/cscview.png

Select the most recent data release and press the Search button at the top left to be brought from the Catalog tab to the Query tab.

In the Query tab under Source Properties, search for hardness ratio (hard_hs) and add it to the Result Set with the + button. Do the same for off-axis angle (theta or theta_mean) and total X-ray counts (I choose to use src_cnts_aper_b, src_cnts_aper_lolim_b, and src_cnts_aper_hilim_b, which appears to be what is used in [LehmerEufrasioTzanavaris+19]). All other results can be left as is, or you may remove the properties that you won’t need to save memory. You can save the query settings for future use by clicking the Save button at the top of the window. By default, it is saved with the suffix .prop.

Note

There may be additional data needed in order to clean up the X-ray source catalog such that only good data are included in your analysis. Since I focused mainly on X-ray sources identified in [LehmerEufrasioTzanavaris+19], which did this step for me, I never had to deal with this. However, it’s something that will need to be kept in mind for future projects. See [LehmerEufrasioTzanavaris+19] for more information on data selection from CSC.

To search for the CXO X-ray sources associated with your galaxy of interest, select Cone under Position Search at the bottom of the window and search for the galaxy of interest by name or coordinates. In the example above, I am looking for X-ray sources in M101, which has a linear diameter of roughly 30 arcminutes. I set the search parameters accordingly and hit the Search button at the top left of the window. This automatically brings you from the Query tab to the Results tab, from which you can select all the X-ray sources and save them to a .vot file.

Important

You will need to press the Search button every time you make a change in the Query tab. Otherwise, your search results may not be updated!

To view the .vot file, open TopCat:

java -jar topcat-full.jar

(or whatever equivalent you saved it under). This will open a window that resembles the following:

../_images/topcat.png

Fig. 1 Example of the TOPCAT user interface.#

In the GUI above, navigate to the .vot file via the Filestore Browser or System Browser interface. This will pull up the file information under Current Table Properties. The 4th icon at the top of the window (looks like a spreadsheet) will open the Table Browser, which allows you to view the table as a spreadsheet.

Converting from VOTable to Pandas DataFrame#

The XRBID package contains a specialized function for converting .vot files from the CSC into Pandas DataFrames in python: XRBID.Sources.NewSources(). To use this function, you simply need to run something like this in python:

from XRBID.Sources import NewSources

# Note: I saved my .vot to a directory called 'testdata', 
#       so that's included in my filename path below
TempSources = NewSources("../testdata/cscresults_M101.vot") 
display(TempSources)
Reading in table from ../testdata/cscresults_M101.vot
DONE
separation name ra dec livetime theta_mean err_ellipse_r0 err_ellipse_r1 err_ellipse_ang significance ... hard_hs_hilim hard_hm hard_hm_lolim hard_hm_hilim hard_ms hard_ms_lolim hard_ms_hilim src_cnts_aper_b src_cnts_aper_lolim_b src_cnts_aper_hilim_b
0 0.835778 2CXO J140312.5+542056 210.802227 54.348952 192658.710333 2.687974 0.296164 0.295254 89.606978 22.302136 ... -0.454091 0.028732 -0.100562 0.156777 -0.553404 -0.61649 -0.485322 170.006026 155.698239 184.313814
1 0.835778 2CXO J140312.5+542056 210.802227 54.348952 142729.493705 2.727056 0.296164 0.295254 89.606978 22.302136 ... -0.454091 0.028732 -0.100562 0.156777 -0.553404 -0.61649 -0.485322 254.489381 233.532285 274.136658
2 0.835778 2CXO J140312.5+542056 210.802227 54.348952 141298.623812 2.783596 0.296164 0.295254 89.606978 22.302136 ... -0.454091 0.028732 -0.100562 0.156777 -0.553404 -0.61649 -0.485322 442.576953 419.112035 464.477543
3 0.835778 2CXO J140312.5+542056 210.802227 54.348952 132129.439441 2.690653 0.296164 0.295254 89.606978 22.302136 ... -0.454091 0.028732 -0.100562 0.156777 -0.553404 -0.61649 -0.485322 131.798703 118.539780 144.321019
4 0.835778 2CXO J140312.5+542056 210.802227 54.348952 130186.649966 2.749161 0.296164 0.295254 89.606978 22.302136 ... -0.454091 0.028732 -0.100562 0.156777 -0.553404 -0.61649 -0.485322 649.590529 616.129127 683.051932
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
3487 892.520732 2CXO J140447.2+542633 211.196627 54.442543 120993.038017 NaN 1.612100 0.795238 86.007749 2.650000 ... NaN NaN NaN NaN NaN NaN NaN 0.000000 0.000000 59.364933
3488 892.520732 2CXO J140447.2+542633 211.196627 54.442543 88598.047743 NaN 1.612100 0.795238 86.007749 2.650000 ... NaN NaN NaN NaN NaN NaN NaN 0.000000 0.000000 14.952548
3489 892.520732 2CXO J140447.2+542633 211.196627 54.442543 81021.851289 13.486809 1.612100 0.795238 86.007749 2.650000 ... NaN NaN NaN NaN NaN NaN NaN 53.481053 29.414579 77.547526
3490 892.520732 2CXO J140447.2+542633 211.196627 54.442543 52087.100775 NaN 1.612100 0.795238 86.007749 2.650000 ... NaN NaN NaN NaN NaN NaN NaN 0.000000 0.000000 34.780341
3491 892.520732 2CXO J140447.2+542633 211.196627 54.442543 14276.493764 3.416463 1.612100 0.795238 86.007749 2.650000 ... NaN NaN NaN NaN NaN NaN NaN 7.591890 4.313574 10.870206

3492 rows × 28 columns

Keep in mind, the code will need to point towards where your .vot file(s) are saved on your computer! If you would like to save this to a file, you can do so in one of two ways: either save it using functions native to Pandas, or use the outfile parameter in NewSources():

# Saving the file using Pandas
TempSources.to_csv("../testdata/cscresults_M101.frame") # Pandas version of saving the df

# Alternatively, saving file using NewSources
TempSources = NewSources(infile="../testdata/cscresults_M101.vot", 
                         outfile="../testdata/cscresults_M101.frame")
Reading in table from ../testdata/cscresults_M101.vot
Reading in sources from ../testdata/cscresults_M101.frame...
DONE

As you can see, the calls to NewSources above will read in the table exactly as written. If you want to rename the headers, you can do so manually in the .frame file created above or by setting the rename parameter to True. The code below will prompt you to rename each of the headers within the .vot table, then save the DataFrame as a comma-separated value (CSV):

NewSources(infile="../testdata/cscresults_M101.vot", rename=True, 
           outfile="../testdata/cscresults_M101_renamed.frame")
../_images/newsources_output.png

The CSV output file created above (cscresults_M101.frame) is easily read in by pd.read_csv() or XRBID.Sources.LoadSources(). The latter is a little slower, but it will automatically remove the index column of the CSV file and convert applicable values from strings into actual numbers as the DataFrame is being built. This is usually very helpful during the analysis stage, so I recommend using LoadSources() when you can.

You should also save these sources as a region file that can be loaded into DS9 or CARTA to overlay onto an HST FITS file. This can be done fairly simply with XRBID.WriteScript.WriteReg() – for example:

from XRBID.WriteScript import WriteReg
from XRBID.Sources import LoadSources

TempSources = LoadSources("../testdata/cscresults_M101_renamed.frame")
display(TempSources)

# Writing to a DS9-compatible region file
WriteReg(TempSources, outfile="../testdata/cscsources_M101.reg", idname="CSC ID", 
        radius=50, width=2, color="hotpink", showlabel=True)
Reading in sources from ../testdata/cscresults_M101_renamed.frame...
Separation CSC ID RA Dec ExpTime Theta Err Ellipse Major Err Ellipse Minor Err Ellipse Angle Significance ... HS Ratio hilim HM Ratio HM Ratio lolim HM Ratio hilim MS Ratio MS Ratio lolim MS Ratio hilim Counts Counts lolim Counts hilim
0 0.835778 2CXO J140312.5+542056 210.802227 54.348952 192658.710333 2.687974 0.296164 0.295254 89.606978 22.302136 ... -0.454091 0.028732 -0.100562 0.156777 -0.553404 -0.61649 -0.485322 170.006026 155.698239 184.313814
1 0.835778 2CXO J140312.5+542056 210.802227 54.348952 142729.493705 2.727056 0.296164 0.295254 89.606978 22.302136 ... -0.454091 0.028732 -0.100562 0.156777 -0.553404 -0.61649 -0.485322 254.489381 233.532285 274.136658
2 0.835778 2CXO J140312.5+542056 210.802227 54.348952 141298.623812 2.783596 0.296164 0.295254 89.606978 22.302136 ... -0.454091 0.028732 -0.100562 0.156777 -0.553404 -0.61649 -0.485322 442.576953 419.112035 464.477543
3 0.835778 2CXO J140312.5+542056 210.802227 54.348952 132129.439441 2.690653 0.296164 0.295254 89.606978 22.302136 ... -0.454091 0.028732 -0.100562 0.156777 -0.553404 -0.61649 -0.485322 131.798703 118.539780 144.321019
4 0.835778 2CXO J140312.5+542056 210.802227 54.348952 130186.649966 2.749161 0.296164 0.295254 89.606978 22.302136 ... -0.454091 0.028732 -0.100562 0.156777 -0.553404 -0.61649 -0.485322 649.590529 616.129127 683.051932
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
3487 892.520732 2CXO J140447.2+542633 211.196627 54.442543 120993.038017 NaN 1.612100 0.795238 86.007749 2.650000 ... NaN NaN NaN NaN NaN NaN NaN 0.000000 0.000000 59.364933
3488 892.520732 2CXO J140447.2+542633 211.196627 54.442543 88598.047743 NaN 1.612100 0.795238 86.007749 2.650000 ... NaN NaN NaN NaN NaN NaN NaN 0.000000 0.000000 14.952548
3489 892.520732 2CXO J140447.2+542633 211.196627 54.442543 81021.851289 13.486809 1.612100 0.795238 86.007749 2.650000 ... NaN NaN NaN NaN NaN NaN NaN 53.481053 29.414579 77.547526
3490 892.520732 2CXO J140447.2+542633 211.196627 54.442543 52087.100775 NaN 1.612100 0.795238 86.007749 2.650000 ... NaN NaN NaN NaN NaN NaN NaN 0.000000 0.000000 34.780341
3491 892.520732 2CXO J140447.2+542633 211.196627 54.442543 14276.493764 3.416463 1.612100 0.795238 86.007749 2.650000 ... NaN NaN NaN NaN NaN NaN NaN 7.591890 4.313574 10.870206

3492 rows × 28 columns

Saving ../testdata/cscsources_M101.reg

The code above takes every source in TempSources (i.e. every row in the DataFrame) and writes the coordinates to a DS9-compatible region file called cscsources_M101.reg. The default coordinate system here is galactic coordinates (or fk5 in DS9), since the DataFrame only contains RA and Dec coordinates. By setting showlabel = True and idname = "CSC ID", each circular region (representing the X-ray sources from CSC) will be labeled with the source ID taken from CSC and stored under the header “CSC ID”.

Note

For more information on additional parameters taken in by WriteReg(), one can run help(WriteReg) in python. This can be done with any python function.