forked from xmm/arches
SAS
This commit is contained in:
132
scripts/05_sas_spectrum_merge.py
Executable file
132
scripts/05_sas_spectrum_merge.py
Executable file
@@ -0,0 +1,132 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
from pysas.wrapper import Wrapper as w
|
||||
import os, sys
|
||||
from os.path import dirname
|
||||
import inspect
|
||||
import glob
|
||||
|
||||
import os.path
|
||||
from os import path
|
||||
import subprocess
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
from astropy.io import fits
|
||||
from astropy.table import Table
|
||||
from matplotlib.colors import LogNorm
|
||||
|
||||
import re
|
||||
import pyds9
|
||||
|
||||
import arches
|
||||
from arches.utils import *
|
||||
from arches.config import *
|
||||
|
||||
root_path=dirname(dirname(dirname(inspect.getfile(arches))))
|
||||
print("Arches root path: {}".format(root_path))
|
||||
|
||||
archive_dir=root_path+'/data/archive'
|
||||
events_dir=root_path+'/data/processed'
|
||||
products_dir=root_path+'/products/sas'
|
||||
ds9reg_dir=root_path+'/data/ds9reg'
|
||||
|
||||
|
||||
create_folder(products_dir)
|
||||
|
||||
inargs = ['--version']
|
||||
t = w('sasver', inargs)
|
||||
t.run()
|
||||
|
||||
files = glob.glob(archive_dir+'/*')
|
||||
|
||||
for obsid in files:
|
||||
obsid = os.path.basename(obsid)
|
||||
if(obsid in skip):
|
||||
continue
|
||||
|
||||
work_dir = init_work_dir(obsid, products_dir=products_dir)
|
||||
os.chdir(work_dir)
|
||||
|
||||
#
|
||||
# Combine MOS1+2
|
||||
#
|
||||
|
||||
spec=[]
|
||||
bkg=[]
|
||||
resp=[]
|
||||
arf=[]
|
||||
for imos in [1,2]:
|
||||
in_SPSRCFile = work_dir+f'/EPIC_MOS{imos}_source_spectrum.fits' # Name of the output source spectrum
|
||||
in_SPBKGFile = work_dir+f'/EPIC_MOS{imos}_background_spectrum.fits' # Name of the output background spectrum
|
||||
in_RESPFile = work_dir+f'/EPIC_MOS{imos}.rmf' # Name of the output redistribution
|
||||
in_ARFFile = work_dir+f'/EPIC_MOS{imos}.arf' # Name of the output ancillary
|
||||
spec.append(in_SPSRCFile)
|
||||
bkg.append(in_SPBKGFile)
|
||||
resp.append(in_RESPFile)
|
||||
arf.append(in_ARFFile)
|
||||
|
||||
in_spec=" ".join(spec)
|
||||
in_bkg=" ".join(bkg)
|
||||
in_resp=" ".join(resp)
|
||||
in_arf=" ".join(arf)
|
||||
|
||||
out_SPSRCFile = work_dir+f'/EPIC_MOS_merged_source_spectrum.fits' # Name of the output source spectrum
|
||||
out_SPBKGFile = work_dir+f'/EPIC_MOS_merged_background_spectrum.fits' # Name of the output background spectrum
|
||||
out_RESPFile = work_dir+f'/EPIC_MOS_merged.rmf' # Name of the output redistribution
|
||||
out_ARFFile = work_dir+f'/EPIC_MOS_merged.arf' # Name of the output ancillary
|
||||
|
||||
inargs = [f'pha=\"{in_spec}\"',f'bkg={in_bkg}',
|
||||
f'rmf=\"{in_resp}\"',f'arf=\"{in_arf}\"',
|
||||
f'allowHEdiff=yes',
|
||||
f'filepha={out_SPSRCFile}',
|
||||
f'filebkg={out_SPBKGFile}',
|
||||
f'filersp={out_RESPFile}']
|
||||
|
||||
w("epicspeccombine", inargs).run()
|
||||
|
||||
# rebin the spectra and link associated files
|
||||
in_GRPFile = work_dir+f'/EPIC_MOS_merged_spectrum_grp.fits' # Name of the output specgruop
|
||||
inargs = [f'spectrumset={out_SPSRCFile}','mincounts=30','oversample=3',
|
||||
f'rmfset={out_RESPFile}',
|
||||
f'backgndset={out_SPBKGFile}',f'groupedset={in_GRPFile}']
|
||||
w("specgroup", inargs).run()
|
||||
|
||||
#
|
||||
# Combine MOS1,2+PN
|
||||
#
|
||||
|
||||
|
||||
in_SPSRCFile = work_dir+f'/EPIC_PN_source_spectrum.fits' # Name of the output source spectrum
|
||||
in_SPBKGFile = work_dir+f'/EPIC_PN_background_spectrum.fits' # Name of the output background spectrum
|
||||
in_RESPFile = work_dir+f'/EPIC_PN.rmf' # Name of the output redistribution
|
||||
in_ARFFile = work_dir+f'/EPIC_PN.arf' # Name of the output ancillary
|
||||
|
||||
spec.append(work_dir+f'/EPIC_PN_source_spectrum.fits')
|
||||
bkg.append(work_dir+f'/EPIC_PN_background_spectrum.fits')
|
||||
resp.append(work_dir+f'/EPIC_PN.rmf')
|
||||
arf.append(work_dir+f'/EPIC_PN.arf')
|
||||
|
||||
in_spec=" ".join(spec)
|
||||
in_bkg=" ".join(bkg)
|
||||
in_resp=" ".join(resp)
|
||||
in_arf=" ".join(arf)
|
||||
|
||||
out_SPSRCFile = work_dir+f'/EPIC_merged_source_spectrum.fits' # Name of the output source spectrum
|
||||
out_SPBKGFile = work_dir+f'/EPIC_merged_background_spectrum.fits' # Name of the output background spectrum
|
||||
out_RESPFile = work_dir+f'/EPIC_merged.rmf' # Name of the output redistribution
|
||||
out_ARFFile = work_dir+f'/EPIC_merged.arf' # Name of the output ancillary
|
||||
|
||||
inargs = [f'pha=\"{in_spec}\"',f'bkg={in_bkg}',
|
||||
f'rmf=\"{in_resp}\"',f'arf=\"{in_arf}\"',
|
||||
f'allowHEdiff=yes',
|
||||
f'filepha={out_SPSRCFile}',
|
||||
f'filebkg={out_SPBKGFile}',
|
||||
f'filersp={out_RESPFile}']
|
||||
w("epicspeccombine", inargs).run()
|
||||
|
||||
# rebin the spectra and link associated files
|
||||
in_GRPFile = work_dir+f'/EPIC_merged_spectrum_grp.fits' # Name of the output specgruop
|
||||
inargs = [f'spectrumset={out_SPSRCFile}','mincounts=30','oversample=3',
|
||||
f'rmfset={out_RESPFile}',
|
||||
f'backgndset={out_SPBKGFile}',f'groupedset={in_GRPFile}']
|
||||
w("specgroup", inargs).run()
|
||||
Reference in New Issue
Block a user