You are on page 1of 91

X-RAY SPECTROSCOPY: IN THEORY AND PRACTICE

MICHAEL A. NOWAK (MIT-CHANDRA X-RAY SCIENCE CENTER) -WITH HELP OVER THE YEARS FROMJRN WILMS, JOHN DAVIS, JOHN HOUCK, DAVE HEUNEMOERDER, MIKE NOBLE

OUTLINE:
THE COMPONENTS OF AN X-RAY SPECTRAL FIT: DATA, SPECTRUM, RMF, ARF, BACKGROUND ISIS EXAMPLES SPRINKLED THROUGHOUT THE DETAILS OF X-RAY SPECTRAL FITTING: ANALYSIS PROGRAMS, AND GENERAL STRATEGIES INTERACTIVE SPECTRAL INTERPRETATION SYSTEM (ISIS) GETTING STARTED WITH BASIC FITS & PLOTS

WHAT YOU WANT TO UNCOVER: ASTROPHYSICAL SPECTRA


BACKGROUND

I (x)

DETECTOR IGM, ISM, ETC.

SOURCE

INTENSITY AS A FUNCTION OF POSITION & DIRECTION


BUT, LIMITATIONS ABOUND... LACK OF SPATIAL RESOLUTION CHANDRA -> XMM -> SUZAKU -> RXTE FOREGROUND ABSORPTION, BACKGROUND EMISSION LACK OF ENERGY RESOLUTION CHANDRA (HETG) -> XMM (RGS) -> SUZAKU -> RXTE LIMITED COLLECTING AREA -> COUNTS, NOT FLUX!

X-RAY SPECTROSCOPY IS ABOUT COUNTS PER CHANNEL


I (x) IS: ENERGY/SEC/HZ/AREA/STERADIAN
X-RAY TELESCOPES MEASURE: COUNTS/(INTEGRATED TIME BIN)/CHANNEL RXTE -> XMM -> CHANDRA -> SUZAKU COUNTS ARE NOT PHOTONS! POISSON STATISTICS ARE COMMONLY USED CHANNELS ARE NOT ENERGY!

WE CONVERT FROM TO DETECTOR COUNTS


C(h) =
0 i

* FLUX

Ri (h, E)Ai (E) Si (E) dE dT + B(h)

DETECTED COUNTS

RESPONSE EFFECTIVE SOURCE MATRIX AREA SPECTRA

BACKGROUND COUNTS

CAN OVERLAP

(SEE J. DAVIS, 2001, APJ, 548, P. 1010) JUST FROM THE SOURCE ALSO NOT JUST FROM THE SOURCE
*NOT

WHAT ARE THESE PIECES?


: SPECTRAL ENERGY DISTRIBUTION, S(E) UNITS = PHOTONS/SEC/AREA/ENERGY : EFFECTIVE AREA/ANCILLARY RESPONSE A(E) FUNCTION/ARF, UNITS = AREA/PHOTON
R(h, E) : RESPONSE FUNCTION/RMF, UNITLESS & E SOMETIMES NORMALIZED R(h, E) (E E0 ) dE = 1

dE, dT

: PHOTON ENERGY, INTEGRATION TIME

C(h), B(h) : SOURCE & BACKGROUND COUNTS (EVENTS)

: PULSE HEIGHT ANALYSIS (PHA) OR PULSE INVARIANT (PI) CHANNEL. DISCRETE!!!

EFFECTIVE AREA (ARF):


ARF CAN HAVE MANY COMPONENTS DETECTORS CAN BE ANGLE DEPENDENT FILTERS, WINDOWS, SHIELDS

EXTRACTION MIRRORS, COLLIMATORS REGION DEPENDENT

EFFECTIVE AREA (ARF):


ARF- COMBINATIONS OF TELESCOPE COLLECTING AREA, DETECTOR EFFICIENCIES, FILTER THROUGHPUTS, ETC. STRUCTURE OFTEN RELATED TO PHYSICS OF THE MIRRORS/COLLIMATORS, DETECTORS, FILTERS, ETC. TYPICALLY HIGHEST ON-AXIS, LOWEST OFF-AXIS. OFF-AXIS CAN BE UP TO ~1O (RXTE). UNRESOLVED/OFF-AXIS SOURCES = BACKGROUND DEPENDS UPON EXTRACTION REGION. GET THE WHOLE POINT SPREAD FUNCTION (PSF)? EXTRACT ONLY OUTER RADII (E.G., SUZAKU)? DETECTOR MOVING? ETC.

EFFECTIVE AREA (ARF):


PSF OUTSIDE BIG CIRCLE WAS EXCLUDED PSF INSIDE SMALL CIRCLE WAS EXCLUDED (PILE UP) SUZAKU CREATES ARFS VIA MONTE CARLO SIMULATIONS (SPACECRAFT SPECIFIC TOOL!)
100 200 300

EFFECTIVE AREA (ARF):


ARF CREATED BY SATELLITE-SPECIFIC SOFTWARE! CAN BE VISUALIZED:
isis> isis> isis> isis> isis> isis> arf = load_arf(/path/to/arf/file.arf); plot_bin_integral; % Area vs. wavelength (Angstrom): hplot(arf.bin_lo,arf.bin_hi,arf.value); % Area vs. energy (keV): hplot(_A(arf.bin_hi),_A(arf.bin_lo),reverse(arf.value));

EFFECTIVE AREA (ARF):


10 100 cm2/photon 20 50

cm2/photon 0.1 1

BAD PIXELS MIRROR (IRIDIUM) EDGE CHIP EDGE

SILICON EDGE MIRROR (IRIDIUM) EDGE

0.01

2 Energy (keV)

10

10

CHANDRA-HEG

SUZAKU
1 2 Energy (keV) 5 10

SOME OF THESE FEATURES ARE FIXED, OTHERS CAN VARY FROM OBSERVATION TO OBSERVATION

RESPONSE FUNCTION (RMF):


PHOTON HAS MADE IT PAST FILTERS, MIRRORS, DETECTORS, HOW IS IT ACTUALLY REGISTERED? PULSE HEIGHT - CHARGE CLOUD, CURRENT, ETC. ENERGY/FLUX -> AMPLITUDE/PEAKS OR COUNTS INPUT ENERGY-> OUTPUT CHANNEL IS ONE -> MANY RMF ENCODES INFORMATION ABOUT DETECTOR RESOLUTION, AND OTHER PHYSICAL EFFECTS RESOLUTION CAN FOLLOW ITS OWN POISSON STATISTICS, AND OFTEN GOES AS E1/2 GRATINGS ARE SPATIAL, FOLLOW ~CONSTANT

RESPONSE FUNCTION (RMF):


RMF CREATED BY SATELLITE-SPECIFIC SOFTWARE! CAN BE VISUALIZED:
isis> isis> isis> isis> isis> isis> isis> isis> load_rmf("/path/to/rmf/file.rmf"); assign_rmf (1,1); fit_fun("delta(1)"); set_par (1,1); set_par (2,_A(6.0)); % 6 keV eval_counts; plot_unit(a); ylog; plot_model(1); plot_unit(keV); plot_model(1);

% Angstrom % keV

THIS IS JUST FOLDING A DELTA-FUNCTION THROUGH THE COUNTS EQUATION, YIELDING C(h) = RMF(h,E0)

RESPONSE FUNCTION (RMF):


CHANDRA-ACIS RESPONSE
RMF @ 6 keV, 2.0664 A, sum=0.99983, moment=5.95506

0.1
R(h, E)

ESCAPE PEAK FLUORESCENCE PEAK

0.01

103

104

4 Energy [keV]

RESPONSE FUNCTION (RMF):


RXTE - PCA RESPONSE
35 100

30

10

Output Energy [keV]

25

20

WIDTH
0.1

15

10

ESCAPE PEAK

0.01

103

10

Input Energy [keV]

15

20

25

104

(COURTESY J. DAVIS)

RESPONSE FUNCTION (RMF):


FLUORESCENCE PEAKS ARE CAUSED BY THE SAME PROCESSES AS IN ASTROPHYSICAL SOURCES PHOTON WITH ENERGY > DETECTOR MATERIAL EDGE ENERGY (XENON GAS, SILICON WAFER) KNOCKS OUT INNER SHELL ELECTRON L -> K TRANSITION YIELDS FLUORESCENCE PHOTON, WHICH MIGHT BE DETECTED LOW ENERGY TRANSITIONS YIELD ESCAPE PHOTON(S) WHICH MIGHT BE DETECTED

Eescape = Eincident Euorescence

RESPONSE FUNCTION (RMF):


CYG X-1 VIEWED WITH CHANDRA-HETG
SHORT WAVELENGTH LONG WAVELENGTH

LONG WAVELENGTH

SHORT WAVELENGTH

CAN COMPARE CCD ENERGY WITH GRATINGS ENERGY

RESPONSE FUNCTION (RMF):


E |m| hc
m=-3

m = TG_MLAM E = ENERGY m=3

m=-2

m=2

Escape Events
m=-1 m=1

m = 0
RMF proles

m
Fluorescence Events

(COURTESY J. DAVIS)

RESPONSE FUNCTION (RMF):


CYG X-1: FROM HTTP://TGCAT.MIT.EDU GRATINGS ENERGY

CCD ENERGY

CHANNEL

RESPONSE FUNCTION (RMF):


LABELING CHANNELS WITH AN ENERGY IS A CONVENIENCE! ENERGY IS CONTINUOUS, PHA BINS ARE DISCRETE. THE MAPPING OF PHA VALUES TO ENERGY IS THE GAIN. THIS MAPPING CAN VARY FROM POSITION TO POSITION ON THE DETECTOR. IN PRINCIPLE, THIS IS NOT A PROBLEM SINCE THE ARF & RMF SHOULD ENCODE THE MAPPINGS. SOMETIMES ITS CONVENIENT TO HAVE THE SAME ENERGIES CORRESPOND TO THE SAME PHA VALUES PHA -> PI = PULSE INVARIANT

RESPONSE FUNCTION (RMF):


C(h) =
0 i

Ri (h, E)Ai (E) Si (E) dE dT + B(h)


ADD A MULTIPLICATIVE GAIN CORRECTION HERE

GAIN MAPPING (PHA ENERGY) IS NOT ALWAYS CORRECT. CAN ADD A CORRECTION IN THE FIT PROCESS. IF FIT DISAGREES WITH KNOWN LINE ENERGY SOMETIMES FOR CONVENIENCE, RMF & ARF ARE COMBINED IN A SINGLE RESPONSE (RESP) FILE. BUT NOT ALWAYS, ESPECIALLY WHEN SOME PARTS CHANGE WITH TIME, WHILE OTHERS DO NOT

BACKGROUND
C(h) =
0 i

Ri (h, E)Ai (E) Si (E) dE dT + B(h)

UNRESOLVED SOURCES CAN BE BACKGROUND. X-RAY BACKGROUND, GALACTIC RIDGE EMISSION, ETC. RESOLVED, BUT DIFFUSE EMISSION CAN BE BACKGROUND. DUST, HOT GAS, ETC. IN PRINCIPLE, THESE COULD (SHOULD) BE ADDED TO S(E) BACKGROUND CAN BE INSTRUMENTAL (DETECTOR NOISE), NON X-RAY (COSMIC RAYS), PARTICLE BACKGROUND, ETC. THESE TYPES OF BACKGROUNDS ARE ADDED TO B(h).

BACKGROUND
C(h) =
0 i

Ri (h, E)Ai (E) Si (E) dE dT + B(h)

BACKGROUND MIGHT BE MODELED OR MEASURED MODELED: ADDED TO THE S(E) -OR- B(h) TERMS. I.E., MAY, OR MAY NOT, BE FOLDED THROUGH RESPONSE IF MODELED WITH FIT PARAMETERS, (USUALLY) NO CHANGES TO THE STATISTICS. MEASURED: USUALLY ADDED TO THE B(h) TERM. NO FOLDING THROUGH THE RESPONSE. (USUALLY) CHANGES THE STATISTICS DEFINITION.

BACKGROUND
C(h) =
0 i

Ri (h, E)Ai (E) Si (E) dE dT + B(h)

ISIS NEVER SUBTRACTS THE BACKGROUND. IT IS ADDED TO MODEL TERMS, AND COMPARED TO *TOTAL COUNTS*. THE ONLY QUESTION IS, DO YOU REDEFINE THE COMPARISON STATISTICS? DEFAULT STATISTICS (CHI2 BASED UPON DATA COUNTS) DOES CHANGE WITH BACKGROUND. THIS DEFAULT BEHAVIOR CAN BE ALTERED.

BACKGROUND
SOURCE BACKGROUND = MEASURED BACKGROUND *(SOURCE AREA)*(SOURCE TIME)/ [(BACKGROUND AREA)*(BACKGROUND TIME)] SOURCE REGION

As (h) Ts (h) Bs (h) = Bm (h) Am (h) Tm (h)


THIS INFORMATION IS USUALLY STORED IN THE SPECTRUM DATA FILES & BACKGROUND DATA FILES VIA THE EXPOSURE AND BACKSCALE KEYWORDS. (USUALLY NO h DEPENDENCE OF A & T ). DEFAULTS INCORPORATE BACKGROUND MODEL UNCERTAINTY IN THE COMPARISON STATISTIC:

BACKGROUND REGION

C(h) =

C(h) +

-OR- FROM NON-SIMULTANEOUS MEASUREMENTS, BLANK SKY OBSERVATIONS, DETECTOR MODELS, ETC.

As (h) Ts (h) Am (h) Tm (h)

Bm (h)

C(h) +

As (h) Ts (h) Am (h) Tm (h)

Bs (h)

BACKGROUND
BACKGROUNDS OFTEN CREATED BY SATELLITE-SPECIFIC SOFTWARE! CAN BE ACCESSED AND VISUALIZED:
isis> isis> isis> isis> isis> isis> isis> isis> isis> isis> % Load the data, including background if in header d = load_data("/path/to/rmf/data.pha"); ch = get_data_counts(d); % Data & bin edges bs = get_back(d); % Scaled background ts = get_data_exposure(d); % Ts(h) as = get_data_backscale(d); % As(h) tm = get_back_exposure(d); % Tm(h) am = get_back_backscale(d); % Am(h) plot_bin_integral; hplot(_A(ch.bin_lo),_A(ch.bin_hi), reverse(ch.value)); % keV plot isis> ohplot(_A(ch.bin_lo),_A(ch.bin_hi), reverse(bs)); % keV plot

SOURCE MODEL
C(h) =
0 i

Ri (h, E)Ai (E) Si (E) dE dT + B(h)

SAVED FOR LAST, SINCE IN SOME WAYS THIS IS THE LEAST IMPORTANT THING YOU NEED TO WORRY ABOUT, BUT WHAT MOST PEOPLE ONLY WANT TO THINK ABOUT... MODELS ARE COMPUTED ON A DISCRETE GRID, *FINER* THAN THE h-GRID. (SOMETIMES RIDICULOUSLY SO.) OUTPUTS OF THESE MODELS ARE: COUNTS/SEC/CM2/*BIN* THE CONTENT OF THESE MODELS IS ASTROPHYSICS... I.E., THE SUBJECT OF THE NEXT 3-5 YEARS OF YOUR LIFE

SOURCE MODEL:
ISIS DEFAULTS TO WAVELENGTH GRID, WITH LO & HI BINS EXPLICITLY SPECIFIED. (IT HAS WRAPPERS TO INTERFACE WITH EXISTING XSPEC MODELS.) MODELS ARE COUNTS INTEGRATED OVER THE BIN WIDTHS! ISIS _A() FUNCTION CONVERTS ANGSTROMS <-> KEV KEEP THIS IN MIND WHEN ADDING NEW FUNCTIONS!
isis> define qpo_fit(lo,hi,par){ variable l,rms,qpo,q,f,al,ah; % Go from Angstrom to keV (which we pretend is Fourier Hz), al = _A(lo); ah = _A(hi); rms = par[0]; q = par[1]; f = par[2]; % RMS, Q-value, Frequency qpo = rms/(0.5 - atan(-2.*q)/PI); qpo = qpo^2/(al-ah)/PI*( atan(2.*q*(al-f)/f) - atan(2.*q*(ah-f)/f) ); return = reverse(qpo); } isis> add_slang_function("qpo",["norm [rms]","Q [f/FWHM]","f [Hz]"]);

THE PIECES WE NEED:


SATELLITE SPECIFIC PIECES: PHA, RMF, ARF, BKG = FITS FILES. CAN BE ASSOCIATED VIA FTOOL FUNCTION GRPPHA.
UNIX%> GRPPHA HXTA.PHA ** GRPPHA 3.0.1 ...... USING PHA_GP VER 1.1.1 PLEASE ENTER OUTPUT FILENAME[] !HXTA.PHA ------------------------MANDATORY KEYWORDS/VALUES --------------------------------------------------------------------------------------------------------------------------------------------------------------EXTNAME - SPECTRUM NAME OF THIS BINTABLE TELESCOP - XTE MISSION/SATELLITE NAME INSTRUME - HEXTE INSTRUMENT/DETECTOR FILTER - NONE INSTRUMENT FILTER IN USE EXPOSURE - 7086.5 INTEGRATION TIME (IN SECS) OF PHA DATA AREASCAL - 1.0000 AREA SCALING FACTOR BACKSCAL - 1.0000 BACKGROUND SCALING FACTOR BACKFILE - HXTABACK.PHA ASSOCIATED BACKGROUND FILE CORRSCAL - 0.0000 CORRELATION SCALING FACTOR CORRFILE - NONE ASSOCIATED CORRELATION FILE RESPFILE - HEXTE-A_SRC.RMF ANCRFILE - HEXTE-A_SRC.ARF POISSERR - FALSE WHETHER POISSONIAN ERRORS APPLY CHANTYPE - PHA WHETHER CHANNELS HAVE BEEN CORRECTED TLMIN1 - 0 FIRST LEGAL DETECTOR CHANNEL DETCHANS - 256 NO. OF LEGAL DETECTOR CHANNELS NCHAN - 256 NO. OF DETECTOR CHANNELS IN DATASET PHAVERSN - 1.2.0 OGIP FITS VERSION NUMBER STAT_ERR - TRUE STATISTICAL ERROR SYS_ERR - FALSE FRACTIONAL SYSTEMATIC ERROR QUALITY - TRUE QUALITY FLAG GROUPING - FALSE GROUPING FLAG ---------------------------------------------------------------------------------------------------------------------------------------

GRPPHA CAN ALSO BE USED TO: BIN DATA SET SYSTEMATIC ERROR BARS SET CORRFILE (ADDITIONAL BACKGROUND) WE WILL DO ALL OF THESE DURING ANALYSIS.

GROUPING & NOTICING


GROUPING TRADITIONALLY USED TO ACHIEVE SUFFICIENT SIGNAL-TO-NOISE TO USE ~GAUSSIAN STATISTICS WITH ERROR ~ (COUNTS)1/2. OFTEN: MINIMUM COUNTS/BIN, UNIFORM CHANNELS/BIN IGNORE BINS WITH LOW S/N AND/OR POOR CALIBRATION GRPPHA (HEASOFT) OR DMGROUP (CIAO) ALLOW YOU TO CHOOSE MINIMUM COUNTS/BIN, OR SPECIFIED NO. OF CHANNELS/BIN OVER GIVEN RANGES. I PREFER TO MAKE THESE CHOICES DURING ANALYSIS, WITH A MORE FLEXIBLE SET OF CRITERIA.

GROUPING & NOTICING


SUZAKU CYG X-1NO GROUPING
10 50 Counts s!1 keV!1 0.1 1 5 1 Counts s!1 keV!1 10 20

SUZAKU CYG X-1S/N>8 & HWHM RES.

0.1

1 Energy (keV)

10

2 Energy (keV)

THE PIECES WE NEED:


FITS (FLEXIBLE IMAGE TRANSPORT SYSTEM) - BINARY FORMAT TO STORE ASTROPHYSICAL DATA
http://heasarc.gsfc.nasa.gov/docs/heasarc/fits.html

FILES READ WITH FTOOLS/CFITSIO (HEASOFT), DMTOOLS (CIAO), OTHERS. INCORPORATED INTO ANALYSIS SYSTEMS. PHA (SPECTRAL FILES) HAVE TYPE 1 & TYPE 2. TYPE 1 - SINGLE SPECTRUM PER FILE. HEADER (WHAT GRPPHA ALTERS) CAN CONTAIN INFORMATION ON ASSOCIATED RESPONSES AND BACKGROUND. TYPE 2 - MULTIPLE SPECTRA PER FILE (E.G., MULTIPLE GRATING ORDERS), NO STANDARD STORAGE OF NAMES OF ASSOCIATED RESPONSES AND BACKGROUNDS.

SOLVING THE FIT EQUATION:


Ch Bh T
h i E 2 h i RhE Ai FE (Mp )]2 E

FORWARD FOLDING - VARY A SET OF MODEL PARAMETERS, CALCULATING COUNTS/BIN, AND MINIMIZE A STATISTIC - TYPICALLY CHI2 THIS IS ALSO NOT UNIQUE! DIFFERENT MODELS CAN YIELD NEARLY IDENTICAL FIT STATISTICS.

SOLVING THE FIT EQUATION:


C(h) =
0 i

Ri (h, E)Ai (E) Si (E) dE dT + B(h)

REALLY JUST A MATRIX EQUATIONCh = T


i E i RhE i AE i SE

dE + Bh

CANT WE INVERT IT? NO! HORRIBLY UNSTABLE!


1 (Ch RhE

NOISE

Bh ) = SE dE T AE UNCERTAINTIES

Ratio 0.9 1 1.1 109 1 10 100 Ratio 0.9 1 1.1 1 10 100 Energy (keV) F! (ergs cm!2 s!1 keV!1) 1010 109 Energy (keV)

S
F! (ergs cm!2 s!1 keV!1) 1010

IDENTICAL DATA, DIFFERENT FITS, SIMILAR STATISTICS

FIT EQUATION SOLVED WITH ANALYSIS PACKAGES


PACKAGES ARE DESIGNED TO READ & PLOT THE DATA. HANDLE THE META-DATA, I.E., PROPER ASSOCIATION OF EXPOSURES, RESPONSES, & BACKGROUNDS. KEEP TRACK OF GROUPING & NOTICED/IGNORED BINS. GROUPING TRADITIONALLY HAS BEEN DONE EXTERNAL TO ANALYSIS PROGRAMS. MINIMIZE THE FIT STATISTIC(S), AND REPORT THE VALUES OF BEST-FIT PARAMETERS AND STATISTICS. CALCULATE PARAMETER ERROR BARS, FLUXES, ETC. SAVE AND PLOT RESULTS.

COMMON ANALYSIS PACKAGES:


THERE ARE MANY ANALYSIS PACKAGES OUT THERE, RANGING FROM CUSTOM IDL CODES TO WELLESTABLISHED, LONG USED PROGRAMS (XSPEC) XSPEC IS THE MOST COMMONLY USED, WITH A WIDE RANGE OF INTRINSIC & USER CONTRIBUTED (LOCAL) MODELS: http://heasarc.gsfc.nasa.gov/docs/xanadu/xspec A VARIETY OF OTHER ANALYSIS PACKAGES ARE USED: ISIS: http://space.mit.edu/CXC/ISIS/ SHERPA: http://cxc.harvard.edu/sherpa/ SPEX: http://www.sron.nl/divisions/hea/spex/

COMPARISON OF SOME ANALYSIS PACKAGE FEATURES:


XSPEC MODELs

ISIS Sherpa XSPEC SPEX

Nearly All Most All Few

DATA OTHER USER XSPEC SCRIPTED USER PRODUCT FIT FIT LOCAL MODELS SCRIPTS ACCESS KERNEL KERNEL MODELS

USER OPTIM. METHS.

USER FIT STATS

Yes No Yes No

S-lang

S-lang

Yes Yes Very Limited No

Gain Pileup No Gain No

Yes Yes No No

Yes Yes No No

Yes Yes No No

S-lang S-lang Python Python Limited- TCL mdene No


NONX-RAY DATA

No

ATOMIC MULTI- MULTI- MULTI- MULTICORE CORE SYSTEM SYSTEM DATA FITS ERRORS MODELS ACCESS ERRORS

ISIS Sherpa XSPEC SPEX

Yes Yes
With Fake RMF, ARF

Yes No No Yes

ISIS 1.5 CIAO 4.2 No No

ISIS 1.5 No No No

Yes No No No

Yes No No No

No

INTERACTIVE SPECTRAL ANALYSIS SYSTEM (ISIS)


CURRENTLY HAS WIDEST SELECTION OF MODELS (ESSENTIALLY ALL XSPEC, PLUS MORE), & SCRIPTABILITY VIA S-LANG WIDE SELECTION OF ANALYSIS MODULES: GNU SCIENTIFIC LIBARY (GSL), STATISTICS, HISTOGRAM, HDF5 (BINARY DATA FORMAT - USED IN ASTRO SIMULATIONS), GTK, XPA (INTERFACE TO DS9 ASTRO IMAGER), VOLVIEW (3D VISUALIZATION), PARALLEL VIRTUAL MACHINE EXTENSIVE HISTORY OF INCORPORATING PARALLELIZATION METHODS FOLLOWING DETAILS ARE IN ISIS, BUT MUCH OF THE ADVICE APPLIES TO USING ANY ANALYSIS SYSTEM

STARTING UP ISIS:
ISIS CAN MAKE USE OF VARIOUS ENVIRONMENT VARIABLES UPON START UP. USEFUL TO PLACE IN, E.G., A ~/.CSHRC FILE.
# If GNU readline has been set, saves input history. setenv ISIS_HISTORY_FILE /home/mnowak/.isis_history # Places to search for S-lang scripts setenv SLANG_LOAD_PATH /home/mnowak/slang_scripts setenv ISIS_LOAD_PATH /home/mnowak/slang_scripts # Places to search for modules. Modules are compiled binaries with # S-lang interfaces, e.g., GSL or histogram modules setenv SLANG_MODULE_PATH /home/mnowak/slang_modules setenv ISIS_MODULE_PATH /home/mnowak/slang_modules # The editor we will use when editing model parameter files # You might prefer to use vi instead. setenv EDITOR /usr/bin/emacs VERY USEFUL!!!

STARTING UP ISIS:
UPON START UP, ISIS LOADS THE CONTENTS OF ~/.isisrc - FILE CONTAINING S-LANG COMMANDS & FUNCTIONS
Isis_Append_Semicolon=1; DEFAULT -> Isis_List_Filenames=1; Isis_Use_PHA_Grouping=1; DEFAULT -> Fit_Verbose=0; DEFAULT -> Isis_Verbose=0; Minimum_Stat_Err=1.e-30; DEFAULT -> Rmf_OGIP_Compliance=2; % % % % % % % % % No ; required interactively Be verbose with list functions Use the grppha applied grouping Only final statistics printed Not too verbose on ISIS messages =0 forces Poisson errors; we choose a value for when we fit radio/IR data Lower number to read poorly written RMFs/ARFs (INTEGRAL requires even more)

putenv("PGPLOT_BACKGROUND=white"); % invert default for nicer putenv("PGPLOT_FOREGROUND=black"); % look - black on white % Define places to search for useful code. static variable path="/home/mnowak/"; add_to_isis_load_path(path+"isis_code"); add_to_isis_module_path(path+"isis_code"); % You can load-up useful bits of code automatically ... ()=evalfile(path+isis_code/isis_utility_functions_prerelease_1.5.sl); ()=evalfile(path+isis_code/isis_utility_functions.sl);

BRIEF WORDS ABOUT S-LANG:


S-LANG IS A SCRIPTING LANGUAGE WITH STRONG NUMERICAL ABILITIES. SEE: WWW.S-LANG.ORG. ALL S-LANG FUNCTIONS WORK IN ISIS, *ALL* ISIS COMMANDS CAN BE USED IN ISIS/S-LANG SCRIPTS.
isis> isis> isis> isis> isis> isis> isis> isis> isis> 2 isis> isis> 3 2 1 isis> a=[0:10]; b = sin(2*PI*a/10)+1; % Vector math variable y = struct{time, rate}; % Some ISIS commands return structures y.time=[0:100:0.1]; % Note we are using % for comments y.rate=y.time^2; % Scripts require ; and variable % latter not required in ISIS, former can be turned off ()=load_data(pca.pha); % Note that ()= captures and discards % the return value, otherwise placed on and then popped off the stack (a,b,c) = some_funct(b); % Lets say this returns 1,2,3 ... print(b); (,,) = some_funct(b); some_funct(b); % Discard the return values % 1, then 2, then 3 placed on the stack

% Top of the stack, 3, pops off first, then 2, then 1 ...

USING ISIS TO ANALYZE SIMPLE X-RAY SPECTRA


IN WHAT FOLLOWS, I WILL BE ASSUMING WEVE LOADED UP THE ISIS UTILITY FUNCTIONS PROVIDED AT:
http://www.black-hole.eu/index.php/schools-workshops-and-conferences/ 1st-school-on-multiwavelength-astronomy/course-materials/83-isis-scripts

ISIS COMMANDS UNIQUE TO THESE SCRIPTS WILL BE HIGHLIGHTED IN BLUE (FOR COMMANDS TO BE ADDED TO ISIS 1.5) OR RED (FOR COMMANDS THAT WILL HAVE TO BE LOADED VIA SCRIPTS, EVEN IN ISIS 1.5). NOTE THAT ISIS ALLOWS YOU TO CHANGE THE NAMES OF ANY COMMANDS. DONT LIKE A NAME? CHANGE IT!

isis> alias(fit_fun, model);

OBTAINING HELP IN ISIS:


THE who; COMMAND WILL GIVE YOU A LIST OF VARIABLES THAT YOU HAVE DEFINED *ON THE COMMAND LINE* .apropos COMMAND WILL GIVE YOU A LIST OF GLOBALLY DEFINED FUNCTIONS (INCLUDING FROM SCRIPTS!) THAT CONTAIN A GIVEN SUBSTRING .help COMMAND WILL GIVE YOU A HELP FILE FOR MOST ISIS INTRINSIC FUNCTIONS
isis> a = [0:10]; b = pizza; isis> who; a: Integer_Type[11] b: pizza isis> .apropos rmf Found 12 matches in namespace Global: all_rmfs assign_rmf find_rmf_peaks get_rmf_arf_grid get_rmf_info list_rmf rebin_rmf set_rmf_info isis> .help load_arf load_arf SYNOPSIS Load an effective area (ARF) file ...

delete_rmf get_rmf_data_grid load_rmf unassign_rmf

STEPS FOR PERFORMING A SUCCESSFUL X-RAY ANALYSIS


LOAD THE DATA - CHECK THAT IT IS WHAT YOU WANT! PLOT THE DATA - *SEE* THAT IT IS WHAT YOU WANT! GROUP & NOTICE THE DATA OF INTEREST. PLOT! DEFINE A MODEL. PUT IN REASONABLE STARTING PARAMETERS. *EVALUATE THE MODEL*, AND PLOT! THINK! REASONABLE? IF NOT, ITERATE! FIT THE DATA. PLOT THE RESULTS. LOOK AT PARAMETERS. THINK! REASONABLE? IF NOT, ITERATE! SEARCH FOR ERROR BARS. LOOK AT RESULTS. THINK! REASONABLE? IF NOT, ITERATE!

LOADING & PLOTTING DATA:


isis> () = evalfile("isis_fancy_plots.sl"); isis> () = evalfile("isis_utility_functions.sl"); isis> () = evalfile("isis_utility_functions_prerelease_1.5.sl"); isis> isis> pca = load_data("pca_cygx1_I.pha"); RMF includes the effective area Warning: negative EBOUNDS value E_MIN=-0.161702, set to zero Warning: 1 hi/lo grid values needed tweaking isis> print(pca); 1

ISIS WILL ASSIGN NUMERIC IDENTIFIERS TO DATA SETS, RMFS, & ARFS. NOTE THAT FOR A GIVEN DATA SET, THESE 3 NUMBERS ARE *NOT* NECESSARILY THE SAME! LOAD_RMF(RMF.FITS); LOAD_ARF(ARF.FITS); WILL LOAD JUST THE RMF/ARF - USED WITH TYPE 2 PHA FILES.

LOADING & PLOTTING DATA:


isis> list_data; Current Spectrum List: id instrument m prt src target 1 PCA 0 0 0 file: pca_cygx1_I.pha back: pcaback_cygx1_I.pha isis> isis> list_rmf; Current RMF List: id grating detector m type 1 PCU2 0 file: isis> isis> list_arf; isis> use/nbins 129/ 129 A R 1 totcts 7.8833e+06 exp(ksec) 9.200

file pcaresp_cygx1_I.rmf

FOR RXTE-PCA SPECTRA, RMF & ARF ARE COMBINED. DATA=1, RMF=1, ARF HAS NO NUMBER. THE NEXT RMF WE LOAD WOULD BE ASSIGNED #2, THE NEXT ARF WE LOAD WOULD BE ASSIGNED #1

LOADING & PLOTTING DATA:


isis> isis> isis> isis> isis> isis> isis> isis> isis> isis> isis> isis> plot_unit("kev"); plot_bin_integral; plot_data_counts(pca); xlog; ylog; plot_bin_integral; plot_data_counts(pca); plot_bin_density; plot_data_counts(pca); Plot_Unit("kev"); plot_counts(pca;dsym=4,dcol=4); plot_data(pca;dsym=4,dcol=4); plot_counts(pca;dsym=4,dcol=4,bkg=1); plot_data(pca;dsym=4,dcol=4,bkg=1);

STANDARD ISIS PLOTS ALWAYS LEAVE BACKGROUND IN, AND CAN BE DIFFICULT TO USE WHEN PLOTTING MULTIPLE DATASETS. MY CUSTOM ROUTINES PUT PLOT_BIN_INTEGRAL/DENSITY INTO SEPARATE FUNCTIONS - PLOT_COUNTS/PLOT_DATA

HOW SHOULD I PLOT DATA?


105
10 103 100

Counts/bin 100 1000 104

DETECTOR OR BIN FEATURES


1 10 Energy (keV) 100

Counts s!1 keV!1 0.01 0.1 1

DETECTOR FEATURE
1 10 Energy (keV) 100

10

USEFUL *BEFORE* BINNING, *OR* WITH UNIFORM BINS

USEFUL AFTER BINNING

PLOTTING WITH BACKGROUND IS USEFUL TO SEE ITS FEATURES


100
105 Counts/bin 1000 104 1 10 Energy (keV) 100

0.01

Counts s!1 keV!1 0.1 1 10

10 Energy (keV)

100

PUTTING BOTH TOGETHER:


100 0.01 1 Counts s!1 keV!1 0.1 1 10

10 Energy (keV)

100

isis> plot_data(pca;dsym=4,dcol=8,bkg=1); isis> plot_data(pca;dsym=4,dcol=4,oplt=1);

WHAT ABOUT UNFOLDING THE SPECTRUM? DANGEROUS!!!


C(h) B(h) F(h) = T E RhE AE

!F! (ergs cm!2 s!1) 5109 108

10

20

50

Energy (keV)

MOST UNFOLED SPECTRA IN THE LITERATURE HAVE *NOT* BEEN DONE THIS WAY! (THEYRE EVEN MORE DANGEROUS!)

isis> Plot_Unit(kev,ergs); isis> plot_unfold(pca;dsym=4,dcol=4,xrng={3,60});

UNFOLDED SPECTRA CAN BE VERY MISLEADING


FROM TGCAT THIS LOVELY EMISSION LINE IN XTE J1118+480

IS REALLY A DETECTOR FEATURE

GROUPING & LIMITING DATA:


isis> isis> isis> isis> isis> isis> isis> isis> isis> isis> isis> isis> set_systematics(pca,[0],[128],[0.005]); % ISIS actually has a fine intrinsic function: % set_sys_err_frac. I just havent properly % incorporated it yet into the plotting routines. group(pca;min_sn=5,bounds=3.,unit="kev"); notice_values(pca,3,22;unit="kev"); % qualifier name is unit *not* units! % ignore_values also will exist in ISIS 1.5 % see also: notice, xnotice, notice_en, xnotice_en plot_data(pca;dsym=4,dcol=4,decol=8,xrng={3,22});

ANETA WILL HAVE (RIGHTLY) WARNED YOU OF THE EVILS OF SYSTEMATIC ERRORS. BUT THEY OFTEN ARE NEEDED FOR PCA. WE APPLY 0.5% SYSTEMATICS, AND GROUP TO A S/N>=5, FOR keV ENERGIES >=3 keV, AND NOTICE DATA WHERE THE *ENTIRE* BIN IS >=3 keV AND <=22 keV.

GROUPING & LIMITING DATA:


WHERE TO IGNORE THE DATA IS A MATTER OF KNOWLEDGE OF THE SPACECRAFT, AND EXPERIENCE WITH ITS DATA. PCA RESPONSES NOT SO GOOD < 3 keV, BACKGROUND STARTS BECOMING IMPORTANT ABOVE ~20 keV.
5 10 Energy (keV) 20 100 5 Counts s!1 keV!1 10 20 50

THESE DECISIONS CAN CHANGE OVER TIME, AS CALIBRATIONS IMPROVE.

HOW DOES THE FIT FUNCTION WORK?


fit_fun("convolution(#, funct1(#)*(funct2(#)+funct3(#))) + funct4(#)");

ISIS TREATS FUNCTIONS AS VECTORS OF VALUES. ANYTHING THAT MAKES MATHEMATICAL SENSE WORKS. REMEMBER THAT MODELS ARE (USUALLY) COUNTS/BIN, SO MATH SENSE IS NOT NECESSARILY PHYSICAL SENSE! #S ARE USED TO IDENTIFY AN INSTANCE OF A MODEL. THUS YOU CAN HAVE GAUSSIAN(1), GAUSSIAN(5), .... THE NUMBERS KEEP THE INSTANCES DISTINCT. EACH CAN HAVE THEIR OWN PARAMETERS. WILD CARD CHARACTERS CAN BE USEFUL HERE: set_par_fun(gaussian(*).Sigma,0.1,0,0,0.5); PARAMETER NAMES ARE CASE SENSITIVE!

DEFINING THE FIT FUNCTION


isis> fit_fun("phabs(1)*powerlaw(1)"); isis> isis> list_par; % Or just list_free to see the unfrozen parameters. phabs(1)*powerlaw(1) idx param tie-to freeze value min max 1 phabs(1).nH 0 0 1 0 100000 10^22 2 powerlaw(1).norm 0 0 1 0 1e+10 3 powerlaw(1).PhoIndex 0 0 1 -2 9 isis> isis> % Could use edit_par; to use an editor window, or, on the command line ... isis> set_par(1,0.6,-1); % Or: set_par("phabs(*).nH",0.6,-1); isis> set_par(3,1.7,0,1,3); isis> isis> () = renorm_counts; Parameters[Variable] = 3[1] Data bins = 45 Chi-square = 2210.172 Reduced chi-square = 50.23119

USE YOUR KNOWLEDGE OF PHYSICS AND THE PROPERTIES OF THE SOURCE TO GUIDE YOUR INITIAL PARAMETER GUESSES!

HOW DOES THE FIT FUNCTION WORK?


fit_fun("convolution(#, funct1(#)*(funct2(#)+funct3(#))) + funct4(#)");

YOU CAN RENAME ANY MODEL WITH: alias_fun(old,new); NOTE THAT CONVOLUTION MODELS HAVE A UNIQUE SYNTAX. REFLECTION, RELATIVISTIC SMEARING = CONVOLUTION THE UNIQUE ISIS VARIABLE, Isis_Active_Dataset, CAN BE USED TO IDENTIFY & ISOLATE MODEL INSTANCES.
Isis_Active_Dataset = # OF DATA SET BEING EVALUATED. gaussian(Isis_Active_Dataset) = gaussian(1) FOR DATA SET 1, = gaussian(2) FOR DATA SET 2, ETC.

(ADVANCED) USE A BLANK () TO DO VERY CLEVER THINGS

ADVANCED FUNCTION SYNTAX WITH BLANK ()


isis> isis> isis> isis> isis> isis> isis> isis> isis> % Use it as short hand for longer models - Manfred Hanke % has an example like this that creates a model with nearly % 100 lines (for gratings spectroscopy of Cyg X-1) define triple(){ return gaussian(1)+gaussian(2)+gaussian(3); } fit_fun(phabs(1)*(powerlaw(1)+triple())); % Use it to define functions that behave differently for each % data set you are evaluating (i.e., using Isis_Active_Dataset) define line(){ switch(Isis_Active_Dataset); { case 1: return gaussian(1); % ... if Isis_Active_Dataset=1 } { case 2: return diskline(1); % ... if Isis_Active_Dataset=2 } return laor(1); % All other cases }

isis> isis> fit_fun(phabs(1)*(powerlaw(1)+line())); isis> % We wont be doing anything this fancy in this exercise!

(BACK TO...) HOW DOES THE FIT FUNCTION WORK?


fit_fun("convolution(#, funct1(#)*(funct2(#)+funct3(#))) + funct4(#)");

THE FUNCTIONS WILL BE EVALUATED ON THE *INTERNAL* GRID OF THE ARF (USUALLY FINER THAN THE UNBINNED PHA CHANNELS). YOU CAN FORCE ISIS TO USE ANY GRID & REBIN TO ARF ISIS WILL LOOK AT THE RMF AND ONLY EVALUATE AT ENERGIES WHERE E->PHA BINS THAT ARE NOTICED. YOU CAN FORCE ISIS TO EVALUATE A WIDER RANGE SOMETIMES NECESSARY FOR CONVOLUTION MODELS. ISIS EVALUATES WHOLE MODEL FOR *EACH* DATA SET YOU CAN CACHE ON A GRID, AND REBIN TO EACH

THINGS YOU CAN DO WITH PARAMETERS


YOU CAN FREEZE OR THAW ANY FIT PARAMETER:
isis> isis> isis> isis> set_par(phabs(1).nH,0.6,1); set_par(phabs(1).nH,0.6,0); freeze(phabs(1).nH); freeze(1); thaw(phabs(1).nH); thaw(1); % % % % 1 Freezes 0 Thaws Either works Either works

YOU CAN TIE PARAMETER VALUES TOGETHER.


isis> tie(1,2,3,4); isis> untie(2,3,4); % Tie parameters 2-4 -> 1 % Untie parameters 2-4

ANY PARAMETER CAN BE MADE AN ARBITRARY FUNCTION OF ANY OTHER PARAMETER(S)!


isis> set_par_fun("phabs(1).nH","sin(powerlaw(1).norm)+2"); isis> set_par_fun(1,"sin(_par(2))+2"); isis> set_par_fun(1,NULL); % That was stupid, lets not!

GETTING ON WITH THE FITTING


START OFF WITH LEAST IMPORTANT AND NARROW BAND PARAMETERS FROZEN. LIMIT PARAMETER RANGES TO SENSIBLE VALUES. TRY AN OVERALL RE-NORMALIZATION FIRST. FIT! CHOOSE FROM SEVERAL OPTIMIZATION METHODS:
isis> isis> isis> isis> isis> isis> isis> isis> set_fit_method(lmdif); % Default. Good & fast. set_fit_method(marquardt); % Sometimes works better % than lmdif. Fast. set_fit_method(subplex); % Very slow, but can find % minima that others miss set_fit_method(plm); % Coming in ISIS 1.5 % parallelized L-M. Shows % promise on multi-core machines

THINGS TO KNOW ABOUT FITTING METHODS


isis> set_fit_method(lmdif); isis> set_fit_method(marquardt);
LEVENBERG-MARQUARDT METHODS EXPECT CHI2-TYPE STATISTICS, I.E.: (D M )2 / 2
i i i i

isis> set_fit_method(subplex);
SUBPLEX CAN BE USED ON CASH STATISTICS. (NOTE- ISIS CASH IS THE SAME AS XSPEC/ SHERPA CSTAT.)

GETTING ON WITH THE FITTING


UNTIL YOU *REALLY* KNOW WHAT YOURE DOING, PLOT RESIDUALS WITH CHI2!
isis> () = fit_counts; Parameters[Variable] = Data bins = Chi-square = Reduced chi-square =
Counts s!1 keV!1 5 10 20 50 100 !2 500 50 100

3[2] 45 672.4607 15.63862

10 Energy (keV)

20

isis> plot_data(pca;dsym=4,dcol=4,decol=5,xrng={3,22},res=2);

LINE? ADD ONE AND REFIT


isis> fit_fun("phabs(1)*(powerlaw(1)+gaussian(1))"); isis> list_par; phabs(1)*(powerlaw(1)+gaussian(1)) idx param tie-to freeze value min 1 phabs(1).nH 0 1 0.6 0 2 powerlaw(1).norm 0 0 1.539388 0 3 powerlaw(1).PhoIndex 0 0 1.588304 1 4 gaussian(1).norm 0 0 1 0 5 gaussian(1).LineE 0 0 6.5 0 6 gaussian(1).Sigma 0 0 0.1 0 isis> set_par("gaussian(1).LineE",6.4,1,6,7); isis> set_par("gaussian(1).norm",0.1,0,0,1); isis> () = fit_counts; Parameters[Variable] = 6[3] Data bins = 45 Chi-square = 623.9285 Reduced chi-square = 14.85544 isis> thaw(6); isis> () = fit_counts; Parameters[Variable] = 6[4] Data bins = 45 Chi-square = 618.4107 Reduced chi-square = 15.08319 isis> plot_data(pca;dsym=4,dcol=4,decol=5,xrng={3,22},res=2); max 100000 1e+10 3 1e+10 1000000 10

10^22

keV keV

SOME, BUT NOT ENOUGH, IMPROVEMENT


Counts s!1 keV!1 5 10 20 50 100

THE RESIDUALS SEEM TO INDICATE THAT A BREAK IN THE POWERLAW WOULD IMPROVE THE FIT. LETS ADD ONE.
5 10 Energy (keV) 20

!2 50 0 50

isis> fit_fun("phabs(1)*(bknpower(1)+gaussian(1))"); isis> list_par; phabs(1)*(bknpower(1)+gaussian(1)) idx param tie-to freeze value min max 1 phabs(1).nH 0 1 0.6 0 100000 2 bknpower(1).norm 0 0 1 0 1e+10 3 bknpower(1).PhoIndx1 0 0 1 -2 9 4 bknpower(1).BreakE 0 0 5 0.01 1000000 5 bknpower(1).PhoIndx2 0 0 2 -2 9 6 gaussian(1).norm 0 0 0.006378002 0 1 7 gaussian(1).LineE 0 1 6.4 6 7 8 gaussian(1).Sigma 0 0 5.283852e-05 0 1 isis> isis> set_par(2,1.5,0,0.1,10); % bknpower has same normalization as powerlaw isis> set_par(3,1.6,0,1,3); % slope wasn't too far off isis> set_par(4,10,0,8,13); % break looks to be around 9 or 10 keV isis> set_par(5,1.4,0,1,3); % second power law looks "harder" isis> isis> () = renorm_counts; Parameters[Variable] = 8[1] Data bins = 45 Chi-square = 397.054 Reduced chi-square = 9.023955 isis> isis> () = fit_counts; Parameters[Variable] = 8[6] Data bins = 45 Chi-square = 23.81623 Reduced chi-square = 0.6106725 isis> plot_data(pca;dsym=4,dcol=4,decol=5,xrng={3,22},res=2);

10^22

keV

keV keV

MUCH IMPROVEMENT, BUT SOME RESIDUALS REMAIN


Counts s!1 keV!1 5 10 20 50 100

!2 5 0 5 1015

WE HAD FROZEN THE ENERGY OF THE LINE. IMPROVEMENT IF WE LET IT GO FREE?

10 Energy (keV)

20

isis> thaw("gaussian(1).LineE"); isis> () = fit_counts; Parameters[Variable] = 8[7] Data bins = 45 Chi-square = 23.81605 Reduced chi-square = 0.6267381 isis> list_free; phabs(1)*(bknpower(1)+gaussian(1)) idx param tie-to freeze value min 2 bknpower(1).norm 0 0 1.77756 0.1 3 bknpower(1).PhoIndx1 0 0 1.677097 1 4 bknpower(1).BreakE 0 0 9.76005 8 5 bknpower(1).PhoIndx2 0 0 1.408868 1 6 gaussian(1).norm 0 0 0.008118369 0 7 gaussian(1).LineE 0 0 6.4 6 8 gaussian(1).Sigma 0 0 5.283852e-05 0 isis> isis> set_fit_method("subplex"); isis> () = fit_counts; Parameters[Variable] = 8[7] Data bins = 45 Chi-square = 20.52235 Reduced chi-square = 0.5400618 isis> isis> set_fit_method("lmdif"); isis> () = fit_counts; Parameters[Variable] = 8[7] Data bins = 45 Chi-square = 20.39472 Reduced chi-square = 0.5367033 isis> plot_data(pca;dsym=4,dcol=4,decol=5,xrng={3,22},res=2);

max 10 3 13 3 1 7 1

keV

keV keV

GETTING THERE, BUT WE MAY BE STUCK IN A LOCAL MINIMUM


Counts s!1 keV!1 5 10 20 50 100

!2 0 5 10

ERROR BAR SEARCHES ARE OFTEN A GOOD WAY TO GET UNSTUCK

10 Energy (keV)

20

isis> conf(8); % Can search for error bars individually **** Parameter range endpoint 0 is inside the confidence limit **** Lower confidence limit didn't converge[8]: allow wider parameter ranges? Found improved fit, stat= 15.072 for param[8] = 0.500079 **** Found improved fit 0.500079 0.500079 isis> isis> (,) = conf_loop("all",1,0.1;save,prefix="bknpower_gaussian"); Found improved fit, stat= 14.6825 for param[2] = 1.76451 **** Found improved fit Parameters[Variable] = 8[7] Data bins = 45 Chi-square = 14.62909 Reduced chi-square = 0.3849759 isis> isis> !more bknpower_gaussian.save phabs(1)*(bknpower(1)+gaussian(1)) idx param tie-to freeze value min max 1 phabs(1).nH 0 1 0.6 0 100000 10^22 2 bknpower(1).norm 0 0 1.769163 1.736502 1.803789 3 bknpower(1).PhoIndx1 0 0 1.676277 1.664857 1.688937 4 bknpower(1).BreakE 0 0 9.626676 9.136459 10.09752 keV 5 bknpower(1).PhoIndx2 0 0 1.410334 1.393771 1.426189 6 gaussian(1).norm 0 0 0.01083106 0.008576826 0.01347842 7 gaussian(1).LineE 0 0 6.160142 6.028331 6.29854 keV 8 gaussian(1).Sigma 0 0 0.4182171 0.192534 0.6204544 keV isis> isis> plot_data(pca;dsym=4,dcol=4,decol=5,xrng={3,22},res=2);

LOW OVERPARAMETERIZED, OR SYST ERRORS TOO LARGE


Counts s!1 keV!1 5 10 20 50 100

2: CHI

ERROR BARS IN LINE REGION A LITTLE TOO FLAT. NOTE ALSO THAT CUSTOM IN X-RAY ASTRONOMY IS TO QUOTE 90% CONFIDENCE LIMIT ERROR BARS.

!2 2 0

10 Energy (keV)

20

NOW YOU ARE ALLOWED TO LOOK AT THE UNFOLDED SPECTRA


!F! (ergs cm!2 s!1) 5109 !F! (ergs cm!2 s!1) 5109 5 10 Energy (keV) 20 "2 2 0 2

SMEARING BY RMF INCLUDED

"2 2 0

10 Energy (keV)

20

isis> isis> isis> isis>

use_con_flux=0; plot_unfold(pca;dsym=4,dcol=4,decol=5,xrng={3,22},res=2); use_con_flux=1; plot_unfold(pca;dsym=4,dcol=4,decol=5,xrng={3,22},res=2);

ADDENDA - (SOME) ANSWERS TO HOW TO QUESTIONS


AT THE X-RAY SCHOOL, A NUMBER OF YOU ASKED QUESTIONS ABOUT HOW TO TAKE THIS SIMPLE ANALYSIS FURTHER. THESE INCLUDED HOW DO WE CALCULATE FLUX? HOW DO WE LOOK AT CHI2 VS. PARAMETER? (I.E., EQUIVALENT TO XSPECS STEPPAR COMMAND) HOW DO WE CALCULATE ERROR CONTOURS? HOW DO WE PLOT MODEL COMPONENTS INDIVIDUALLY? WELL GIVE EXAMPLES OF THESE ON THE NEXT PAGES...

CALCULATING FLUX
isis> % You can get flux from value_structure = get_model_flux(dataset_id); or from isis> % Isis_Active_Dataset=#; % Dataset of interest - they can have different norms! isis> % y = eval_fun(angstrom_lo,angstrom_hi); isis> % Then sum up the answer over the band of interest. The former *only* evaluates isis> % over the energy range in the internal grid of the ARF, the latter returns isis> % photons/bin/cm^2/sec for any specified grid. So, in both cases, some care isis> % must be exercised in their use. isis> isis> % Using the former, I have written a short script to calculate the flux, and isis> % and call it (somewhat stupidly) kev_flux(); You have it in the scripts. isis> % Exercise for the reader to write a nicer version using eval_fun()! isis> isis> kev_flux(1,2,10); % listed below: 2-10 keV ergs/cm^2/sec, photons/cm^2/sec 7.2141e-09 1.0128 isis> % Remember what we said about the order of putting on/popping off the stack! isis> (ergs_flux, photon_flux) = kev_flux(1,2,10); isis> isis> kev_flux(1,1.5,10); % The internal grid stops at 1.5 keV, hence ... 7.40266e-09 1.0738 isis> kev_flux(1,1,10); % ... the lack of change of the numbers here. 7.40266e-09 1.0738

2 CHI
isis> isis> isis> isis> isis> isis> isis>

VS. PARAMETER (I.E., STEPPAR)

% The functions fit_counts; renorm_counts; eval_counts; optionally return info % about the statistics. To do this, you must pass a reference to a variable % in which to store these statistics. The & in front of the variable name below % says that you are passing this reference. What you get back is a structure % with fields for statistic, num_variable_params, and num_bins. Heres a short % script that will do what steppar does: define steppar(par,lo,hi,nsteps) { variable par_vals=[lo:hi:(hi-lo)/nsteps]; variable info, stat, par_use; stat = Double_Type[length(par_vals)]; variable i = 0; foreach par_use (par_vals) { set_par(par,par_use,1); % Freeze parameter () = fit_counts(&info); stat[i] = info.statistic; i++; } thaw(par); () = fit_counts; return par_vals, stat; } isis> (par_vals,stat) = steppar("bknpower(1).BreakE",9,10.2,12); isis> xrange, yrange; xlin; ylin; xlabel("Break Energy"); ylabel("Chi\\u2\\d"); isis> plot(par_vals,stat);

2 CHI

VS. PARAMETER (I.E., STEPPAR)


HERE ARE THE RESULTS. THIS WAS A QUICK & DIRTY SCRIPT. WITH A LITTLE WORK, WE COULD ADD SOME BELLS & WHISTLES.

Chi2 15 9 16

17

18

9.5 Break Energy

10

CONTOUR PLOTS
isis> isis> isis> isis> isis> isis> isis> isis> isis> % Confidence contours can be created with ISIS intrinsic functions. First you % Define the x & y grids, then create the contours, then plot and/or save them x = conf_grid(3,1.66,1.69,10); % Photon Index 1 y = conf_grid(5,1.385,1.415,10); % Photon Index 2 contr = conf_map_counts(x,y); % Create the contours xlabel("\\frPhoton Index 1"); ylabel("\\frPhoton Index 2"); plot_conf(contr); % Plot the contours save_conf(contr,file); % Save them (later load them with load_conf;)

1.66

1.67 Photon Index 1

1.68

1.69

DEFAULTS ARE 68%, 90%, AND 99% CONFIDENCE FOR 2 PARAMETERS. CUSTOM LEVELS CAN BE CHOSEN INSTEAD. THIS FUNCTION WILL BE PARALLELIZED IN ISIS 1.5.

1.39

Photon Index 2 1.4

1.41

PLOTTING INDIVIDUAL MODEL COMPONENTS


ISIS, UNLIKE XSPEC, DOESNT PLOT INDIVIDUAL MODEL COMPONENTS. ONE MAJOR REASON FOR THIS IS THAT ISIS DOESNT DIFFERENTIATE BETWEEN ADDITIVE AND MULTIPLICATIVE MODELS - THEYRE ALL JUST VECTORS OF NUMBERS TO ISIS. ISIS THEREFORE DOESNT KEEP SEPARATE TRACK OF THE PIECES REQUIRED. HOWEVER, I DO DO THIS (SEE SLIDE #36 ABOVE!). BASICALLY, I WRITE A SCRIPT THAT CALLS MY PLOTTING ROUTINES, ZEROS OUT MODEL COMPONENTS, AND OVERPLOTS SERIALLY. NOTE THAT FOR MULTI-PANEL PLOTS (E.G., DATA & RESIDUALS), THIS IS A LITTLE BIT MORE COMPLICATED THAN USING THE OPLT=1 OPTION. EXAMPLE FOLLOWS - I AM OPEN TO SUGGESTIONS FOR A SYNTAX TO AUTOMATE THIS!

PLOTTING INDIVIDUAL MODEL COMPONENTS


isis> define fancy_plot() { % Save parameters as the initially are save_par("/tmp/initial.par"); % Let's make a 3 panel plot, where the top is counts, the middle is % "unfolded" spectra, and the bottom is residuals with and without % the lines. % 3 panel plot, with vertical ratios of 5:5:2 multiplot([5,5,2]); % pgplot is much happier if you just work on 1 pane at a time. % Start with the top most pane. mpane(1); % For single pane plots, the oplt=1 plot option works fine. For % multi-panel plots, we have to tell pgplot to *not* automatically % jump to the next pane after doing a plot. This global variable % does that for my routines. no_reset=1; % First plot counts/unit/sec; X-axis will be keV. Y-axis will be % proportional to ergs when we plot the unfolded data. xlog; ylog; Plot_Unit("kev","ergs");

PLOTTING INDIVIDUAL MODEL COMPONENTS


% set the gaussian line to 0, then the powerlaw norm to 0, then % plot the whole model. Components in orange, whole model in red. set_par("gaussian(1).norm",0); () = eval_counts; plot_data(1;dsym=-4,dcol=4,decol=4,mcol=8,xrng={3,20},yrng={1.01,199.9}); load_par("/tmp/initial.par"); set_par("bknpower(1).norm",0,0,0,10); () = eval_counts; plot_data(1;dsym=-4,dcol=4,decol=4,mcol=8,oplt=1); load_par("/tmp/initial.par"); () = eval_counts; plot_data(1;dsym=-4,dcol=4,decol=4,mcol=2,oplt=1); % Now do the same thing with the "unfolded" data in the middle % panel. Use the "smeared" model via the use_con_flux=1; choice. mpane(2); use_con_flux=1; % Make sure we use the same x-range as above (y-range is different, of course...) set_par("gaussian(1).norm",0); () = eval_counts; plot_unfold(1;dsym=-4,dcol=4,decol=4,mcol=8,power=2,xrng={3,20},yrng={1.01e-11,1.99e-9 });

PLOTTING INDIVIDUAL MODEL COMPONENTS


load_par("/tmp/initial.par"); set_par("bknpower(1).norm",0,0,0,10); () = eval_counts; plot_unfold(1;dsym=-4,dcol=4,decol=4,mcol=8,power=2,oplt=1); load_par("/tmp/initial.par"); () = eval_counts; plot_unfold(1;dsym=-4,dcol=4,decol=4,mcol=2,power=2,oplt=1); % Now do the same thing with the residuals in the lower % panel; however, we only 0 out the gaussian this time. mpane(3); % Make sure we use the same x-range as above (y-range is different, of course...) set_par("gaussian(1).norm",0); () = eval_counts; plot_residuals(1;res=1,rsym=0,rcol=2,recol=8,xrng={3,20},yrng={-2.99,14.99}); % The next plots after this one we want to go back to "normal" behavior. no_reset=0; load_par("/tmp/initial.par"); () = eval_counts; plot_residuals(1;res=1,rsym=0,rcol=4,recol=5,xrng={3,20},oplt=1); } isis> isis> fancy_plot;

PLOTTING INDIVIDUAL MODEL COMPONENTS


Counts s!1 keV!1 10 100

F! (ergs cm!2 s!1 keV!1) " 0 5 10 1010 109

YOU PROBABLY WANT TO SAVE FANCY_PLOT AS A SCRIPT SO YOU CAN MODIFY IT MORE EASILY.

5 Energy (keV)

10

20

MORE ON PLOTTING

PGPLOT IS A FAIRLY SIMPLE PROGRAM. ITS SERVICABLE, BUT LOTS OF PEOPLE (UNDERSTANDABLY) PREFER THINGS LIKE IDL. WITH MY PLOT ROUTINES, WRITE_PLOT WILL SAVE SIMPLE ASCII FILES FOR THE *LAST* PLOT YOU MADE WITH *MY ROUTINES*. THOSE SHOULD BE SUITABLE FOR READING INTO OTHER PROGRAMS, AND REPLOTTING. AGAIN, USE SCRIPTS TO MAKE REPRODUCING WHAT YOU DID A LITTLE EASIER.

END OF THE ADDENDA


SOMETIME (LATE) SUMMER 2009, LOOK AT: http://
space.mit.edu/home/mnowak/isis_vs_xspec/index.html

THE SCRIPTS YOU HAVE FROM SCHOOL ARE *MORE RECENT* THAN THESE. HOWEVER, POST-ISIS 1.5 RELEASE, I WILL BE UPDATING THEM FURTHER. PLANS, AMONG OTHER THINGS, INCLUDE MODIFYING THE PLOTTING ROUTINES. SUGGESTIONS ON IMPROVEMENTS TO FUNCTIONALITY & SYNTAX VERY WELCOME! SUGGESTIONS ON NEW FUNCTIONS ALSO WELCOME!

EXERCISES FOR FURTHER PRACTICE:


REPEAT THE SAME PROCESS, BUT NOW INCLUDE THE TWO SIMULTANEOUS HEXTE DATA SETS. THINGS TO KNOW ABOUT HEXTELARGE BACKGROUND, BUT DIRECTLY MEASURED BANDPASS FROM ABOUT 20-200 KEV CALIBRATION DIFFERENCES FROM PCA - DOESNT NECESSARILY HAVE THE SAME NORMALIZATION CROSS-NORMALIZATION CONSTANT THE MODEL: constant(Isis_Active_Dataset) WILL PROVE VERY USEFUL!

OTHER FUNCTIONS/TIPS THAT YOU WILL FIND USEFUL


save_par(file.par); WILL SAVE PARAMETERS load_par(file.par); WILL LOAD PARAMETERS edit_par; CALL UP AN EDIT WINDOW WITH PARAMS SAVE INTERMEDIATE RESULTS, AND TRIAL MODELS! plot_data([1,2,3];xrng={3,200},yrng=...); MULTIPLE DATA SETS CAN BE PLOTTED ON THE SAME GRAPH COMMANDS WILL BE SAVED TO A HISTORY FILE, BUT SOMETIMES IT CAN BE USEFUL TO OPEN AN EDIT FILE, WRITE THE COMMANDS AS A SCRIPT, AND EVALUATE.

FIT FUNCTIONS THAT YOU MIGHT FIND USEFUL


bbody, diskbb, cutoffpl, highecut BLACKBODY, DISK, POWERLAW WITH A ROLLOVER, AN EXPONENTIAL ROLLOVER (MULTIPLIES OTHER MODELS) comptt, pexrav - FOR THE MORE ADVENTUROUS. COMPTONIZATION, AND A REFLECTED POWERLAW. THE LATTER MODEL REQUIRES EVALUATION OUT TO ~1 MeV. I.E., ONE HAS TO EXTEND THE GRID TRY FORCING THE LINE TO STAY NARROW. PLOT THE UNFOLDED SPECTRA WITH use_con_flux=1. FOR A LIST OF XSPEC MODELS, SEE: http://
heasarc.gsfc.nasa.gov/docs/xanadu/xspec/manual/XspecModels.html

FOR FURTHER HELP S-LANG & ISIS BUILDING & MANUALS, CHECK THE MAIN WEB-SITES: www.s-lang.org http://space.mit.edu/CXC/ISIS/ COMPARISONS TO XSPEC & TUTORIAL: http://space.mit.edu/home/mnowak/ isis_vs_xspec/index.html LOOK FOR UPDATE TO ABOVE LATER IN 2009!

FOR FURTHER HELP ISIS-USERS MAILING LIST: http://space.mit.edu/CXC/ISIS/ mailing_list.html OR CONTACT US DIRECTLY: FOR ISSUES WITH ISIS-BUILDS, ISIS-MODULES, AND BASIC ISIS-FUNCTIONALITY:
houck@space.mit.edu, mnoble@space.mit.edu

FOR TRANSLATING FROM XSPEC EQUIVALENTS AND ANY SCRIPTS SHOWN IN THIS PRESENTATION:
mnowak@space.mit.edu

You might also like