Chandra X-Ray Observatory
	(CXC)
Skip to the navigation links
Last modified: 14 December 2016

How do I create a plot from ChIPS in a script?


There are several ways to create a hard-copy version (e.g. postscript, PDF or PNG) of a visualization without creating an on-screen version: from ChIPS and from Python.

Using the chips program

The -b option of ChIPS will run in "batch" mode; this turns off the window.redraw preference setting so that no on-screen updates are made and will cause ChIPS to exit rather than display its prompt once all the commands have been executed. In order to create any output you will need to use the print_window command.

As an example; the Two curves in a plot example in the gallery could be run as a script:

unix% cat overlay-plot
make_figure("flare.fits[cols time_bin,count_rate]",["symbol.style","none"])
add_curve("flare.fits[count_rate>5][cols time_bin,count_rate]")
crv = ChipsCurve()
crv.line.style = "noline"
crv.symbol.style = "circle"
crv.symbol.size = 2
crv.symbol.color = "red"
set_curve(crv)
log_scale(Y_AXIS)
add_hline(5,["style","longdash"])
set_plot_xlabel("Time bin")
set_plot_ylabel("Count rate (s^{-1})")
set_plot_title("Background light curve")
add_label(22,12,"Cut off at 5 count s^{-1}")
print_window("overlay-plot.eps", ["clobber", True])
print_window("overlay-plot.png", ["clobber", True])
print("Created: overlay-plot.eps and .png")

which can be "run" by saying:

unix% chips -b overlay-plot
Created: overlay-plot.eps and .png
unix% ls -1 overlay-plot.*
overlay-plot.eps
overlay-plot.png

where the clobber parameter is set to True so that it will not fail if the script has already been run.

Notes:

As a Python script

As the ChIPS interpreter is really just Python shell, you can also use python itself to create the plot; it means you have to explicitly load the ChIPS modules you need but does allow for the use of command-line arguments.

Here we convert the version used above to be run directly by Python by adding four lines to the start of the file (they have been emphasized in the display below):

unix% cat overlay-plot.py
#!/usr/bin/env python
from pychips import *
from pychips.hlui import *
set_preference("window.display", "false")
make_figure("flare.fits[cols time_bin,count_rate]",["symbol.style","none"])
add_curve("flare.fits[count_rate>5][cols time_bin,count_rate]")
crv = ChipsCurve()
crv.line.style = "noline"
crv.symbol.style = "circle"
crv.symbol.size = 2
crv.symbol.color = "red"
set_curve(crv)
log_scale(Y_AXIS)
add_hline(5,["style","longdash"])
set_plot_xlabel("Time bin")
set_plot_ylabel("Count rate (s^{-1})")
set_plot_title("Background light curve")
add_label(22,12,"Cut off at 5 count s^{-1}")
print_window("overlay-plot.eps", ["clobber", True])
print_window("overlay-plot.png", ["clobber", True])
print("Created: overlay-plot.eps and .png")

which can then be run by either of

unix% python overlay-plot.py 
Created: overlay-plot.eps and .png
unix% ./overlay-plot.py
Created: overlay-plot.eps and .png

where the second version requires chmod u+x ./overlay-plot.py to have been used.

The two from ... lines make sure the ChIPS commands are available, the set_preference call makes sure that the on-screen version of the visualization is not created, and the first line is only needed if you want to run the script directly (as in the second example above).

Running a script with arguments

Using Python to run the script, rather than ChIPS, allows you to provide arguments to your script by using the sys.argv array provided by the Python sys module. As an example:

unix% cat qplot.py
import sys
import time
from pychips import *
from pychips.hlui import *

narg = len(sys.argv)
if narg != 3:
    raise TypeError("Usage: {0} infile outfile".format(sys.argv[0]))

set_preference("window.display", "false")
add_window(8.5, 11, "inches")
make_figure(sys.argv[1], ["line.style", "noline"])
add_label(0.95, 0.05, time.asctime(), ["coordsys", FRAME_NORM, "halign", 1])
print_window(sys.argv[2], ["clobber", True])

can be used to quickly create a US-letter sized plot by saying

unix% python qplot.py "srcs.dat[cols z,lx]" qplot.pdf

The add_label call places a label at the bottom-right of the frame with the current time (as returned by the asctime routine). The halign attribute is used to make sure the label is right-aligned to the given coordinate (95% of the frame width and 5% of its height) with the coordsys attribute defining the coordinate system.



Last modified: 14 December 2016
Smithsonian Institute Smithsonian Institute

The Chandra X-Ray Center (CXC) is operated for NASA by the Smithsonian Astrophysical Observatory. 60 Garden Street, Cambridge, MA 02138 USA.   Email:   cxchelp@head.cfa.harvard.edu Smithsonian Institution, Copyright © 1998-2017. All rights reserved.