blob: 3fa0216587815b1409b3686fb62d5fd31cd66ad3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
# Copyright (c) 2017 Weitian LI <liweitianux@live.com>
# MIT license
"""
Chandra ACIS spectrum.
"""
from astropy.io import fits
from .acis import ACIS
class Spectrum:
"""
Chandra ACIS spectrum
"""
def __init__(self, filepath):
self.filepath = filepath
self.fitsobj = fits.open(filepath)
ext_spec = self.fitsobj["SPECTRUM"]
self.header = ext_spec.header
# spectral data
self.channel = ext_spec.data.columns["CHANNEL"].array
self.counts = ext_spec.data.columns["COUNTS"].array
# spectral keywords
self.EXPOSURE = self.header.get("EXPOSURE")
self.BACKSCAL = self.header.get("BACKSCAL")
def calc_flux(self, elow, ehigh, verbose=False):
"""
Calculate the flux:
flux = counts / exposure / area
Parameters
----------
elow, ehigh : float, optional
Lower and upper energy limit to calculate the flux.
"""
chlow = ACIS.energy2channel(elow)
chhigh = ACIS.energy2channel(ehigh)
counts = self.counts[(chlow-1):chhigh].sum()
if verbose:
print("counts / exposure / backscale :: %d / %.1f / %.5g" %
(counts, self.EXPOSURE, self.BACKSCAL))
flux = counts / self.EXPOSURE / self.BACKSCAL
return flux
def calc_pb_flux(self, elow=9500, ehigh=12000, verbose=False):
"""
Calculate the particle background (default: 9.5-12 keV) flux.
"""
return self.calc_flux(elow=elow, ehigh=ehigh, verbose=verbose)
|