X-RAY SPECTROSCOPY: IN THEORY AND...

91
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

Transcript of X-RAY SPECTROSCOPY: IN THEORY AND...

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

WHAT YOU WANT TO UNCOVER:ASTROPHYSICAL SPECTRA

!I!(!x)

IGM, ISM,ETC.

SOURCE

BACKGROUND

DETECTOR

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:

[email protected]