X-RAY SPECTROSCOPY: IN THEORY AND PRACTICE
MICHAEL A. NOWAK
(MIT-CHANDRA X-RAY SCIENCE CENTER)
-WITH HELP OVER THE YEARS FROM-
JÖRN 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
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
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!
!I!(!x)
WE CONVERT FROM FLUX*
TO DETECTOR COUNTS§
*NOT JUST FROM THE SOURCE§ALSO NOT JUST FROM THE SOURCE
DETECTEDCOUNTS
RESPONSEMATRIX
EFFECTIVEAREA
SOURCESPECTRA
BACKGROUNDCOUNTS
CAN “OVERLAP”
(SEE J. DAVIS, 2001, APJ, 548, P. 1010)
C(h) =! !
0
"
i
Ri(h, E)Ai(E) Si(E) dE dT + B(h)
WHAT ARE THESE PIECES?
: SPECTRAL ENERGY DISTRIBUTION, UNITS = PHOTONS/SEC/AREA/ENERGY
: EFFECTIVE AREA/ANCILLARY RESPONSE FUNCTION/ARF, UNITS = AREA/PHOTON
: RESPONSE FUNCTION/RMF, UNITLESS & SOMETIMES NORMALIZED -
: PHOTON ENERGY, INTEGRATION TIME
: SOURCE & BACKGROUND COUNTS (EVENTS)
: PULSE HEIGHT ANALYSIS (PHA) OR PULSE INVARIANT (PI) CHANNEL. DISCRETE!!!
R(h, E)
A(E)
S(E)
dE, dT
C(h), B(h)
h
!
h
" E
0R(h, E) !(E ! E0) dE = 1
EFFECTIVE AREA (ARF):
ARF CAN HAVE MANY COMPONENTS
FILTERS,WINDOWS,SHIELDSMIRRORS,
COLLIMATORS
DETECTORS
CAN BEANGLE
DEPENDENT
EXTRACTIONREGION
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):
100 200 300
PSF OUTSIDE BIG CIRCLE WAS EXCLUDED
PSF INSIDE SMALL CIRCLE WAS EXCLUDED (PILE UP)
SUZAKU CREATES ARFS VIA MONTE CARLO SIMULATIONS (SPACECRAFT SPECIFIC TOOL!)
EFFECTIVE AREA (ARF):
ARF CREATED BY SATELLITE-SPECIFIC SOFTWARE!
CAN BE VISUALIZED:
isis> arf = load_arf(“/path/to/arf/file.arf”);isis> plot_bin_integral;isis> % Area vs. wavelength (Angstrom):isis> hplot(arf.bin_lo,arf.bin_hi,arf.value);isis> % Area vs. energy (keV):isis> hplot(_A(arf.bin_hi),_A(arf.bin_lo),reverse(arf.value));
EFFECTIVE AREA (ARF):
1 102 510
100
2050
Energy (keV)
cm2 /p
hoto
n
1 102 5
0.01
0.1
110
Energy (keV)
cm2 /p
hoto
n
SOME OF THESE FEATURES ARE “FIXED”, OTHERS CAN VARY FROM OBSERVATION TO OBSERVATION
MIRROR (IRIDIUM)EDGE
SILICONEDGE
CHIPEDGE
BADPIXELS
MIRROR (IRIDIUM)EDGE
CHANDRA-HEG SUZAKU
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> load_rmf("/path/to/rmf/file.rmf");isis> assign_rmf (1,1);isis> fit_fun("delta(1)");isis> set_par (1,1);isis> set_par (2,_A(6.0)); % 6 keVisis> eval_counts;isis> plot_unit(“a”); ylog; plot_model(1); % Angstromisis> plot_unit(“keV”); plot_model(1); % keV
THIS IS JUST FOLDING A DELTA-FUNCTION THROUGH THE COUNTS EQUATION, YIELDING C(h) = RMF(h,E0)
RESPONSE FUNCTION (RMF):
CHANDRA-ACIS RESPONSE
65432
1
0.1
0.01
10!3
10!4
RMF @ 6 keV, 2.0664 A, sum=0.99983, moment=5.95506
Energy [keV]
R(h,E
)
ESCAPEPEAK
FLUORESCENCEPEAK
252015105
35
30
25
20
15
10
5
100
10
1
0.1
0.01
10!3
10!4
Input Energy [keV]
OutputEnergy[keV]
RESPONSE FUNCTION (RMF):
RXTE - PCA RESPONSE
ESCAPEPEAK
WIDTH
(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 ! Efluorescence
RESPONSE FUNCTION (RMF):
CYG X-1 VIEWED WITH CHANDRA-HETG
SHORTWAVELENGTH
SHORTWAVELENGTH
LONGWAVELENGTH
LONGWAVELENGTH
CAN COMPARE “CCD ENERGY”WITH “GRATINGS ENERGY”
RESPONSE FUNCTION (RMF):
|m!| Ehc
m!m! = 0
m=-1 m=1
m=-2 m=2
m=-3 m=3
EscapeEvents
Fluorescence EventsRMF profiles
m! = TG_MLAM
E = ENERGY
(COURTESY J. DAVIS)
RESPONSE FUNCTION (RMF):
CYG X-1: FROM HTTP://TGCAT.MIT.EDU
CC
D E
NE
RG
Y
GRATINGS ENERGY
CH
AN
NE
L
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”
C(h) =! !
0
"
i
Ri(h, E)Ai(E) Si(E) dE dT + B(h)
RESPONSE FUNCTION (RMF):
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
ADD A MULTIPLICATIVE GAIN CORRECTION HERE
C(h) =! !
0
"
i
Ri(h, E)Ai(E) Si(E) dE dT + B(h)
BACKGROUND
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).
C(h) =! !
0
"
i
Ri(h, E)Ai(E) Si(E) dE dT + B(h)
BACKGROUND
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.
C(h) =! !
0
"
i
Ri(h, E)Ai(E) Si(E) dE dT + B(h)
BACKGROUND
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
SOURCEREGION
BACKGROUNDREGION
-OR- FROM NON-SIMULTANEOUSMEASUREMENTS, “BLANK SKY”OBSERVATIONS, DETECTOR MODELS, ETC.
SOURCE BACKGROUND = MEASURED BACKGROUND*(SOURCE AREA)*(SOURCE TIME)/[(BACKGROUND AREA)*(BACKGROUND TIME)]
THIS INFORMATION IS USUALLY STORED IN THESPECTRUM DATA FILES & BACKGROUND DATA FILESVIA THE “EXPOSURE” AND “BACKSCALE” KEYWORDS.(USUALLY NO h DEPENDENCE OF A & T ).
Bs(h) = Bm(h)! As(h) Ts(h)Am(h) Tm(h)
DEFAULTS INCORPORATE “BACKGROUND MODEL” UNCERTAINTY IN THE COMPARISON STATISTIC:
!C(h) =
!
C(h) +"
As(h) Ts(h)Am(h) Tm(h)
#2
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> % Load the data, including background if in headerisis> d = load_data("/path/to/rmf/data.pha"); isis> ch = get_data_counts(d); % Data & bin edgesisis> bs = get_back(d); % “Scaled” backgroundisis> ts = get_data_exposure(d); % Ts(h)isis> as = get_data_backscale(d); % As(h)isis> tm = get_back_exposure(d); % Tm(h)isis> am = get_back_backscale(d); % Am(h)isis> plot_bin_integral;isis> hplot(_A(ch.bin_lo),_A(ch.bin_hi), reverse(ch.value)); % keV plotisis> ohplot(_A(ch.bin_lo),_A(ch.bin_hi), reverse(bs)); % keV plot
C(h) =! !
0
"
i
Ri(h, E)Ai(E) Si(E) dE dT + B(h)
SOURCE MODEL
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:
UNCERTAINTIES
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.1PLEASE 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
UNCERTAINTIES
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
UNCERTAINTIES
0.1 1 10
0.1
110
Energy (keV)
Coun
ts s!
1 keV
!1
1 2 5
105
2050
Energy (keV)
Coun
ts s!
1 keV
!1
SUZAKU CYG X-1- NO GROUPING
SUZAKU CYG X-1- S/N>8 & HWHM RES.
THE PIECES WE NEED:
UNCERTAINTIES
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:
UNCERTAINTIES
!
h
"Ch ! Bh ! T
#i
#E Ri
hE AiE FE(Mp)]2
!2h
“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.
C(h) =! !
0
"
i
Ri(h, E)Ai(E) Si(E) dE dT + B(h)
SOLVING THE FIT EQUATION:
REALLY JUST A MATRIX EQUATION-
CAN’T WE INVERT IT?NOISE
UNCERTAINTIES
NO!HORRIBLY
UNSTABLE!
UNCERTAINTIES
R!1hE
(Ch !Bh)TAE
= SEdE
Ch = T!
i
!
E
RihE Ai
E SiE dE + Bh
IDENTICAL DATA, DIFFERENT FITS, SIMILAR STATISTICS
UNCERTAINTIES
10−10
10−9
F ! (e
rgs c
m!2
s!1 k
eV!1
)
1 10 100
0.911.1
Ratio
Energy (keV)
10−10
10−9
F ! (e
rgs c
m!2
s!1 k
eV!1
)
1 10 100
0.911.1
Ratio
Energy (keV)
FIT EQUATION “SOLVED” WITH ANALYSIS PACKAGES
UNCERTAINTIES
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 WELL-ESTABLISHED, 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:
XSPECMODELs
XSPECLOCAL
MODELS
SCRIPTEDMODELS
USERSCRIPTS
DATAPRODUCTACCESS
OTHERFIT
KERNEL
USERFIT
KERNEL
USEROPTIM.
METHS.
USERFIT
STATS
ISIS
Sherpa
XSPEC
SPEX
NearlyAll Yes S-lang S-lang Yes Gain
Pileup Yes Yes Yes
Most No S-langPython
S-langPython Yes No Yes Yes Yes
All Yes Limited-mdefine TCL Very
Limited Gain No No No
Few No No No No No No No No
NON-X-RAYDATA
ATOMICDATA
ACCESS
MULTI-CORE
ERRORS
MULTI-COREFITS
MULTI-SYSTEMERRORS
MULTI-SYSTEMMODELS
ISIS
Sherpa
XSPEC
SPEX
Yes Yes ISIS 1.5 ISIS 1.5 Yes Yes
Yes No CIAO 4.2 No No No
With FakeRMF, ARF No No No 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. VERY USEFUL!!!setenv ISIS_HISTORY_FILE /home/mnowak/.isis_history
# Places to search for S-lang scriptssetenv SLANG_LOAD_PATH /home/mnowak/slang_scriptssetenv 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 modulessetenv SLANG_MODULE_PATH /home/mnowak/slang_modulessetenv 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
STARTING UP ISIS:
UPON START UP, ISIS LOADS THE CONTENTS OF ~/.isisrc - FILE CONTAINING S-LANG COMMANDS & FUNCTIONS
Isis_Append_Semicolon=1; % No ‘;’ required interactivelyIsis_List_Filenames=1; % Be verbose with list functionsIsis_Use_PHA_Grouping=1; % Use the grppha applied groupingFit_Verbose=0; % Only final statistics printedIsis_Verbose=0; % Not too verbose on ISIS messagesMinimum_Stat_Err=1.e-30; % =0 forces Poisson errors; we choose % a value for when we fit radio/IR dataRmf_OGIP_Compliance=2; % Lower number to read poorly written % RMFs/ARFs (INTEGRAL requires even more)
putenv("PGPLOT_BACKGROUND=white"); % invert default for nicerputenv("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”);
DEFAULT ->
DEFAULT ->DEFAULT ->
DEFAULT ->
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> a=[0:10]; b = sin(2*PI*a/10)+1; % Vector mathisis> variable y = struct{time, rate}; % Some ISIS commands return structuresisis> y.time=[0:100:0.1]; % Note we are using % for commentsisis> y.rate=y.time^2; % Scripts require ; and ‘variable’ -isis> % latter not required in ISIS, former can be turned offisis> ()=load_data(“pca.pha”); % Note that ()= captures and discards isis> % the return value, otherwise placed on and then “popped off” the ‘stack’isis> (a,b,c) = some_funct(b); % Lets say this returns 1,2,3 ...isis> print(b); 2isis> (,,) = some_funct(b); % Discard the return valuesisis> some_funct(b); % 1, then 2, then 3 placed on the ‘stack’ 3 2 1isis> % 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 WE’VE 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. DON’T 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: pizzaisis> .apropos rmfFound 12 matches in namespace Global:all_rmfs assign_rmf delete_rmffind_rmf_peaks get_rmf_arf_grid get_rmf_data_gridget_rmf_info list_rmf load_rmfrebin_rmf set_rmf_info unassign_rmfisis> .help load_arfload_arf
SYNOPSIS Load an effective area (ARF) file...
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 areaWarning: negative EBOUNDS value E_MIN=-0.161702, set to zeroWarning: 1 hi/lo grid values needed tweakingisis> 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 use/nbins A R totcts exp(ksec) target 1 PCA 0 0 0 129/ 129 - 1 7.8833e+06 9.200 file: pca_cygx1_I.phaback: pcaback_cygx1_I.phaisis>isis> list_rmf;Current RMF List: id grating detector m type file 1 PCU2 0 file: pcaresp_cygx1_I.rmfisis>isis> list_arf;isis>
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> plot_unit("kev");isis> plot_bin_integral; plot_data_counts(pca);isis> xlog; ylog; plot_bin_integral; plot_data_counts(pca);isis> plot_bin_density; plot_data_counts(pca);isis>isis> Plot_Unit("kev"); isis>isis> plot_counts(pca;dsym=4,dcol=4);isis> plot_data(pca;dsym=4,dcol=4);isis>isis> plot_counts(pca;dsym=4,dcol=4,bkg=1);isis> 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?
1 10 100
10100
1000
104
105
Energy (keV)
Coun
ts/bi
n
1 10 10010
−30.01
0.1
110
100
Energy (keV)
Coun
ts s!
1 keV
!1
USEFUL *BEFORE* BINNING, *OR* WITH
UNIFORM BINS
USEFUL AFTER BINNING
DETECTOR OR BIN
FEATURES
DETECTOR FEATURE
PLOTTING WITH BACKGROUND IS USEFUL TO SEE ITS FEATURES
1 10 100
1000
104
105
Energy (keV)
Coun
ts/bi
n
1 10 100
0.01
0.1
110
100
Energy (keV)
Coun
ts s!
1 keV
!1
PUTTING BOTH TOGETHER:
isis> plot_data(pca;dsym=4,dcol=8,bkg=1);isis> plot_data(pca;dsym=4,dcol=4,oplt=1);
1 10 100
0.01
0.1
110
100
Energy (keV)
Coun
ts s!
1 keV
!1
105 20 50
10−8
5×10
−9
Energy (keV)
!F!
(erg
s cm!2
s!1 )
WHAT ABOUT “UNFOLDING” THE SPECTRUM? DANGEROUS!!!
isis> Plot_Unit(“kev”,“ergs”);isis> plot_unfold(pca;dsym=4,dcol=4,xrng={3,60});
F(h) =C(h)!B(h)
T!
E RhE AE
MOST “UNFOLED” SPECTRA IN THE
LITERATURE HAVE*NOT* BEEN DONE
THIS WAY!(THEY’RE EVEN MORE
DANGEROUS!)
UNFOLDED SPECTRA CAN BE VERY MISLEADING
THIS LOVELY “EMISSION
LINE” IN XTE J1118+480
IS REALLY ADETECTORFEATURE
FROM TGCAT
GROUPING & LIMITING DATA:
isis> set_systematics(pca,[0],[128],[0.005]); isis> % ISIS actually has a fine intrinsic function: isis> % set_sys_err_frac. I just haven’t properlyisis> % incorporated it yet into the plotting routines.isis>isis> group(pca;min_sn=5,bounds=3.,unit="kev");isis> notice_values(pca,3,22;unit="kev");isis> % qualifier name is unit *not* units!isis> % ignore_values also will exist in ISIS 1.5isis> % see also: notice, xnotice, notice_en, xnotice_enisis>isis> 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.
THESE DECISIONS CAN CHANGE OVER TIME, AS CALIBRATIONS IMPROVE.
105 20
10100
520
50
Energy (keV)
Coun
ts s!
1 keV
!1
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> % Use it as short hand for longer models - Manfred Hankeisis> % has an example like this that creates a model with nearlyisis> % 100 lines (for gratings spectroscopy of Cyg X-1)isis> define triple(){ return gaussian(1)+gaussian(2)+gaussian(3); }isis> fit_fun(“phabs(1)*(powerlaw(1)+triple())”);isis>isis> % Use it to define functions that behave differently for eachisis> % data set you are evaluating (i.e., using Isis_Active_Dataset)isis> 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 won’t 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> set_par(“phabs(1).nH”,0.6,1); % 1 Freezesisis> set_par(“phabs(1).nH”,0.6,0); % 0 Thawsisis> freeze(“phabs(1).nH”); freeze(1); % Either worksisis> thaw(“phabs(1).nH”); thaw(1); % Either works
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, let’s not!
YOU CAN TIE PARAMETER VALUES TOGETHER.
isis> tie(1,2,3,4); % Tie parameters 2-4 -> 1isis> untie(2,3,4); % Untie parameters 2-4
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> set_fit_method(“lmdif”); % Default. Good & fast.isis> set_fit_method(“marquardt”); % Sometimes works betterisis> % than lmdif. Fast.isis> set_fit_method(“subplex”); % Very slow, but can findisis> % minima that others missisis> set_fit_method(“plm”); % Coming in ISIS 1.5 -isis> % parallelized L-M. Showsisis> % promise on multi-core machines
THINGS TO KNOW ABOUT FITTING METHODS
LEVENBERG-MARQUARDT METHODS EXPECT CHI2-TYPE STATISTICS, I.E.:
isis> set_fit_method(“lmdif”); isis> set_fit_method(“marquardt”);
isis> set_fit_method(“subplex”);
!
i
(Di !Mi)2/!2i
SUBPLEX CAN BE USED ON CASH STATISTICS. (NOTE- ISIS CASH IS THE SAME AS XSPEC/SHERPA CSTAT.)
GETTING ON WITH THE FITTING
isis> () = fit_counts; Parameters[Variable] = 3[2] Data bins = 45 Chi-square = 672.4607 Reduced chi-square = 15.63862 isis> plot_data(pca;dsym=4,dcol=4,decol=5,xrng={3,22},res=2);
10100
520
50Co
unts
s!1 k
eV!1
105 20
−500
50100
!2
Energy (keV)
UNTIL YOU *REALLY* KNOW
WHAT YOU’RE DOING, PLOT RESIDUALS
WITH CHI2!
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 max 1 phabs(1).nH 0 1 0.6 0 100000 10^22 2 powerlaw(1).norm 0 0 1.539388 0 1e+10 3 powerlaw(1).PhoIndex 0 0 1.588304 1 3 4 gaussian(1).norm 0 0 1 0 1e+10 5 gaussian(1).LineE 0 0 6.5 0 1000000 keV 6 gaussian(1).Sigma 0 0 0.1 0 10 keVisis> 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.85544isis> thaw(6);isis> () = fit_counts; Parameters[Variable] = 6[4] Data bins = 45 Chi-square = 618.4107 Reduced chi-square = 15.08319isis> plot_data(pca;dsym=4,dcol=4,decol=5,xrng={3,22},res=2);
SOME, BUT NOT ENOUGH, IMPROVEMENT10
100
520
50Co
unts
s!1 k
eV!1
105 20
−50050
!2
Energy (keV)
THE RESIDUALS SEEM TO INDICATE THAT A BREAK IN THE POWERLAW WOULD IMPROVE
THE FIT.
LET’S ADD ONE.
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 10^22 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 keV 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 keV 8 gaussian(1).Sigma 0 0 5.283852e-05 0 1 keVisis>isis> set_par(2,1.5,0,0.1,10); % bknpower has same normalization as powerlawisis> set_par(3,1.6,0,1,3); % slope wasn't too far offisis> set_par(4,10,0,8,13); % break looks to be around 9 or 10 keVisis> 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.023955isis>isis> () = fit_counts; Parameters[Variable] = 8[6] Data bins = 45 Chi-square = 23.81623 Reduced chi-square = 0.6106725isis> plot_data(pca;dsym=4,dcol=4,decol=5,xrng={3,22},res=2);
MUCH IMPROVEMENT, BUT SOME RESIDUALS REMAIN
WE HAD FROZEN THE ENERGY OF THE LINE. IMPROVEMENT
IF WE LET IT GO FREE?
10100
520
50Co
unts
s!1 k
eV!1
105 20
−5051015
!2
Energy (keV)
isis> thaw("gaussian(1).LineE");isis> () = fit_counts; Parameters[Variable] = 8[7] Data bins = 45 Chi-square = 23.81605 Reduced chi-square = 0.6267381isis> list_free;phabs(1)*(bknpower(1)+gaussian(1)) idx param tie-to freeze value min max 2 bknpower(1).norm 0 0 1.77756 0.1 10 3 bknpower(1).PhoIndx1 0 0 1.677097 1 3 4 bknpower(1).BreakE 0 0 9.76005 8 13 keV 5 bknpower(1).PhoIndx2 0 0 1.408868 1 3 6 gaussian(1).norm 0 0 0.008118369 0 1 7 gaussian(1).LineE 0 0 6.4 6 7 keV 8 gaussian(1).Sigma 0 0 5.283852e-05 0 1 keVisis>isis> set_fit_method("subplex");isis> () = fit_counts; Parameters[Variable] = 8[7] Data bins = 45 Chi-square = 20.52235 Reduced chi-square = 0.5400618isis>isis> set_fit_method("lmdif");isis> () = fit_counts; Parameters[Variable] = 8[7] Data bins = 45 Chi-square = 20.39472 Reduced chi-square = 0.5367033isis> plot_data(pca;dsym=4,dcol=4,decol=5,xrng={3,22},res=2);
GETTING THERE, BUT WE MAY BE STUCK IN A LOCAL MINIMUM
ERROR BAR SEARCHES ARE
OFTEN A GOOD WAY TO GET “UNSTUCK”
10100
520
50Co
unts
s!1 k
eV!1
105 20
0510
!2
Energy (keV)
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 fit0.5000790.500079isis> 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.3849759isis>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 keVisis> isis> plot_data(pca;dsym=4,dcol=4,decol=5,xrng={3,22},res=2);
LOW CHI2: OVERPARAMETERIZED, OR SYST ERRORS TOO LARGE
ERROR BARS IN LINE REGION A
LITTLE “TOO FLAT”.
10100
520
50Co
unts
s!1 k
eV!1
105 20
−20
2!2
Energy (keV)
NOTE ALSO THAT CUSTOM IN X-RAY ASTRONOMY IS TO
QUOTE 90% CONFIDENCE LIMIT
ERROR BARS.
NOW YOU ARE ALLOWED TO LOOK AT THE UNFOLDED SPECTRA
5×10
−9
!F!
(erg
s cm!2
s!1 )
105 20
−20
2"2
Energy (keV)5×10
−9
!F!
(erg
s cm!2
s!1 )
105 20
−20
2"2
Energy (keV)
isis> use_con_flux=0;isis> plot_unfold(pca;dsym=4,dcol=4,decol=5,xrng={3,22},res=2);isis> use_con_flux=1;isis> plot_unfold(pca;dsym=4,dcol=4,decol=5,xrng={3,22},res=2);
SMEARING BYRMF INCLUDED
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 XSPEC’S STEPPAR COMMAND)
HOW DO WE CALCULATE ERROR CONTOURS?
HOW DO WE PLOT MODEL COMPONENTS INDIVIDUALLY?
WE’LL GIVE EXAMPLES OF THESE ON THE NEXT PAGES...
CALCULATING FLUX
isis> % You can get flux from value_structure = get_model_flux(dataset_id); or fromisis> % 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* evaluatesisis> % over the energy range in the internal grid of the ARF, the latter returnsisis> % photons/bin/cm^2/sec for any specified grid. So, in both cases, some careisis> % must be exercised in their use. isis> isis> % Using the former, I have written a short script to calculate the flux, andisis> % 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/sec7.2141e-091.0128isis> % 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-091.0738isis> kev_flux(1,1,10); % ... the lack of change of the numbers here.7.40266e-091.0738
CHI2 VS. PARAMETER (I.E., “STEPPAR”)
isis> % The functions fit_counts; renorm_counts; eval_counts; optionally return infoisis> % about the statistics. To do this, you must pass a “reference” to a variableisis> % in which to store these statistics. The & in front of the variable name belowisis> % says that you are passing this reference. What you get back is a structureisis> % with fields for statistic, num_variable_params, and num_bins. Here’s a shortisis> % script that will do what steppar does:isis> 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);
CHI2 VS. PARAMETER (I.E., “STEPPAR”)
9 9.5 10
1516
1718
Break Energy
Chi2
HERE ARE THE RESULTS.
THIS WAS A QUICK & DIRTY SCRIPT. WITH A LITTLE
WORK, WE COULD ADD SOME BELLS &
WHISTLES.
CONTOUR PLOTS
isis> % Confidence contours can be created with ISIS intrinsic functions. First youisis> % Define the x & y grids, then create the contours, then plot and/or save themisis>isis> x = conf_grid(3,1.66,1.69,10); % Photon Index 1isis> y = conf_grid(5,1.385,1.415,10); % Photon Index 2isis> contr = conf_map_counts(x,y); % Create the contoursisis> xlabel("\\frPhoton Index 1"); ylabel("\\frPhoton Index 2"); isis> plot_conf(contr); % Plot the contoursisis> save_conf(contr,”file”); % Save them (later load them with load_conf;)
1.66 1.67 1.68 1.69
1.39
1.4
1.41
Photon Index 1
Phot
on In
dex
2
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.
PLOTTING INDIVIDUAL MODEL COMPONENTS
ISIS, UNLIKE XSPEC, DOESN’T PLOT INDIVIDUAL MODEL COMPONENTS. ONE MAJOR REASON FOR THIS IS THAT ISIS DOESN’T DIFFERENTIATE BETWEEN “ADDITIVE” AND “MULTIPLICATIVE” MODELS - THEY’RE ALL JUST VECTORS OF NUMBERS TO ISIS. ISIS THEREFORE DOESN’T 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
10100
Coun
ts s!
1 keV
!1
10−10
10−9
F ! (e
rgs c
m!2
s!1 k
eV!1
)
105 20
0510
"
Energy (keV)
YOU PROBABLY WANT TO SAVE “FANCY_PLOT”
AS A SCRIPT SO YOU CAN MODIFY IT MORE
EASILY.
MORE ON PLOTTING
PGPLOT IS A FAIRLY SIMPLE PROGRAM. IT’S 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 HEXTE-
LARGE BACKGROUND, BUT DIRECTLY MEASURED
BANDPASS FROM ABOUT 20-200 KEV
CALIBRATION DIFFERENCES FROM PCA - DOESN’T 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:
[email protected], [email protected]
FOR TRANSLATING FROM XSPEC EQUIVALENTS AND ANY SCRIPTS SHOWN IN THIS PRESENTATION: