#!/usr/bin/env python """ НАЗВАНИЕ: 05_srctool.py НАЗНАЧЕНИЕ: Запускает scrtool для самого широкого канала 0.2-10 кэВ, чтобы спектры имели самое полное покрытие по энергиям. Список источников берется из 0.3-2.3 кэВ. ВЫЗОВ: esass ./05_srctool.py УПРАВЛЕНИЕ: Требуется запуск предыдущего скрипта 04_mosaics.py ПАРАМЕТРЫ: index=4 : Выбранный энергетический диапазон ВЫВОД: Выходные файлы записываются в директорию outfile_dir/srctool_dir ИСТОРИЯ: Роман Кривонос, ИКИ РАН, krivonos@cosmos.ru Март 2023 """ from astropy.wcs import WCS from astropy.io import fits import sys, os, os.path, time, subprocess from pathlib import Path import numpy as np import glob from os.path import dirname import inspect import pickle import uds from uds.utils import * from uds.config import * from uds.sherpa import * """ find UDS root dir """ #root_path=dirname(dirname(dirname(inspect.getfile(uds)))) """ ftools does not like long file path names, for this reason, we use relative path here """ root_path='..' print("UDS root path: {}".format(root_path)) infile_dir=root_path+'/data/processed' outfile_dir=root_path+'/products' create_folder(outfile_dir) srctool_dir="{}/{}".format(outfile_dir,"srctool-products") create_folder(srctool_dir) outkey="tm0" outfile_srctool="{}_SrcTool_".format(outkey) do_init = False do_merge = False do_srctool = False do_grppha = False do_ecf_calc = False # for all bands do_ecf_print = False # for all bands do_catalog = False do_extended = False do_ds9reg = False do_xmm_catalog = False do_xmm_final = True index=0 """ работаем именно в этом диапазоне, чтобы спектры покрывали все энергии """ vign=True vignetting = 'vign' if (vign==True) else 'novign' events=[] expmaps=[] bkgmaps=[] for tmkey in keylist_tm.keys(): print("TM{} in work... init events".format(tmkey)) for datakey in keylist_tm[tmkey]: print("--> {}".format(datakey)) """ Подготавливаем списки событий индивидуальных наблюдений """ outfile_evtool,outfile_expmap=init_events(key=datakey, eband_index=eband[index], infile_dir=infile_dir, outfile_dir=outfile_dir, do_init=do_init, do_obsmode=False, do_center=False, do_evtool=False, do_expmap=False, vign=vign, ra_cen=ra_cen, de_cen=de_cen, emin_kev=emin_kev[index], emax_kev=emax_kev[index]) events.append(outfile_evtool) expmaps.append(outfile_expmap) """ Собираем общий список событий """ outfile_evtool="{}_EventList_en{}.fits".format(os.path.join(outfile_dir,outkey), eband[index]) if(do_merge==True): do_evtool_esass(events=events, outfile=outfile_evtool) suffix_srctool=".fits" """ Output filename suffix - all output filenames appended with this string. If suffix contains no filename extension (does not contain a "."), then ".fits" is also appended to the filename. """ catprep="{}_SourceCatalog_en{}{}".format(os.path.join(outfile_dir,outkey), eband[0], outfile_post) """ take source catalog from 0.3-2.3 keV band """ if not (os.path.isfile(catprep)==True): print("{} not found, run 04_mosaics.py?".format(catprep)) sys.exit() if(do_srctool==True): test_exe('srctool') cmd=['srctool', "insts=\'1 5 6 7\'", "eventfiles={}".format(outfile_evtool), "prefix=\'{}\'".format(os.path.join(srctool_dir,outfile_srctool)), "suffix=\'{}\'".format(suffix_srctool), "srccoord={}".format(catprep), #"srcreg=\'fk5;circle * * 60s\'", #"backreg=\'fk5;annulus * * 90s 120s\'", "srcreg=AUTO", "backreg=AUTO", "clobber=yes",] os.system((" ").join(cmd)) print((" ").join(cmd)) if(do_grppha==True): group_spectra("{}/*_SourceSpec_*.fits".format(srctool_dir)) ecfout="{}_SampleFlux.pickle".format(os.path.join(outfile_dir,outkey)) if(do_ecf_calc==True): calc_ecf("{}/tm0_SrcTool_020_ARF_?????.fits".format(srctool_dir), catprep=catprep, emin=emin_kev, emax=emax_kev, eband=eband, outfile=ecfout, simnum=10000) if(do_ecf_print==True): print_ecf(infile=ecfout, emin=emin_kev, emax=emax_kev, eband=eband, skipfrac=10.0) index=0 catprep="{}_SourceCatalog_en{}{}".format(os.path.join(outfile_dir,outkey), eband[index], outfile_post) rawcat="{}_SourceCatalog_en{}.pickle".format(os.path.join(outfile_dir,outkey), eband[index]) if(do_catalog==True): forced_xmm_sources="{}_MaxLikSourceList_en{}.xmm.pickle".format(os.path.join(outfile_dir,outkey), eband[index]) with open(forced_xmm_sources, 'rb') as f: srcs_forced = pickle.load(f) make_catalog(infile='../products/tm0_SourceCatalog_en0.forced.fits', rawcat=rawcat, dlmin=10.0, dlmax=100000, ext_like=1000, emin=emin_kev[index], emax=emax_kev[index], eband=eband[index], infile_en00cat=catprep, infile_en01cat='../products/tm0_SourceCatalog_en1.forced.fits', infile_en02cat='../products/tm0_SourceCatalog_en2.forced.fits', infile_en03cat='../products/tm0_SourceCatalog_en3.forced.fits', infile_en06cat='../products/tm0_SourceCatalog_en6.forced.fits', infile_en00sens='../products/tm0_SensitivityMap_dl10_en0.fits', infile_en01sens='../products/tm0_SensitivityMap_dl10_en1.fits', infile_en02sens='../products/tm0_SensitivityMap_dl10_en2.fits', infile_en03sens='../products/tm0_SensitivityMap_dl10_en3.fits', infile_en06sens='../products/tm0_SensitivityMap_dl10_en6.fits', srcs_forced=srcs_forced, ) if(do_extended==True): make_extended(infile=rawcat,outreg="{}_ExtendedCat_en{}.reg".format(os.path.join(outfile_dir,outkey), eband[index])) if(do_ds9reg==True): make_final_ds9reg(infile=rawcat,outreg="{}_FinalCat_dl10.reg".format(os.path.join(outfile_dir,outkey))) if(do_xmm_catalog==True): """ complile raw forced XMM catalog """ make_xmm_catalog(infile_en00cat='../products/tm0_SourceCatalog_en0.forced-xmm.fits', infile_en01cat='../products/tm0_SourceCatalog_en1.forced-xmm.fits', infile_en02cat='../products/tm0_SourceCatalog_en2.forced-xmm.fits', infile_en03cat='../products/tm0_SourceCatalog_en3.forced-xmm.fits', infile_en06cat='../products/tm0_SourceCatalog_en6.forced-xmm.fits', forced_xmm_sources='../products/tm0_MaxLikSourceList_en0.fixed-xmm.pickle', outfile='../products/tm0_4XMM-DR12.pickle') if(do_xmm_final==True): """ make final XMM-forced catalog """ final_xmm_catalog(infile='../products/tm0_4XMM-DR12.pickle', outfile_fits='../products/eUDS_4XMM-DR12.fits')