#!/usr/bin/env python __author__ = "Roman Krivonos" __copyright__ = "Space Research Institute (IKI)" """ TO BE RUN IN ARCHIVE ONLY """ import re import sys from glob import glob from astropy.io import fits from astropy.io.fits import getheader from astropy.coordinates import SkyCoord # High-level coordinates from astropy.coordinates import ICRS, Galactic, FK4, FK5 # Low-level frames from astropy.coordinates import Angle, Latitude, Longitude # Angles import astropy.units as u def file_grep(pattern=None, filename=None, filt=None): fl = open(filename, "r") for line in fl: if re.search(pattern, line): if(filt): if(filt in line): return(line.replace("\n", "")) else: return(line.replace("\n", "")) return(None) bands={ 'E01':'25.00 60.00', 'E02':'17.00 22.10', 'E03':'22.10 28.73', 'E04':'28.73 37.35', 'E05':'37.35 48.55', 'E06':'48.55 63.12', 'E07':'63.12 82.06', 'E08':'82.06 106.67', 'E09':'106.67 138.67', 'E10':'138.67 180.28', 'E11':'180.28 234.36', 'E12':'234.36 304.67', } crab_crd = SkyCoord(83.6287, 22.0147, frame=FK5(), unit="deg") key = sys.argv[1] do_mjd = False revs = sorted(glob("????", recursive = False)) erange = bands[key] fout="detcnts.{}.fits".format(key) obs_id=[] ra=[] dec=[] rota=[] lon=[] lat=[] t_start=[] t_stop=[] exposure=[] ph1=[] ph2=[] ph=[] raw=[] src=[] clean=[] npix=[] rms=[] orbit=[] tstart=[] tstop=[] mjd=[] crab_sep=[] for rev in revs: logs = sorted(glob(rev+"/????????????.log", recursive = False)) for log in logs: res = file_grep(pattern="rev_phase1",filename=log) phase1 = float(res.split()[1]) if(res) else 0.0 res = file_grep(pattern="rev_phase2",filename=log) phase2 = float(res.split()[1]) if(res) else 0.0 res = file_grep(pattern="Final FSD RMS",filename=log) rms0 = float(res.split()[-1]) if(res) else None res = file_grep(pattern="OBTMISDC",filename=log) obtmisdc = float(res.split()[-1]) if(res) else None res = file_grep(pattern="DETCNTS2",filename=log,filt=erange) d = res.split() if(res) else None if not (d): continue # ['DETCNTS2', '011000130010', '00001', '266.570', '-26.994', '89.359', '2639.38', '28148860.0', '28152310.0', '3.55128E-03', '8.53612E-04', '2.69767E-03', '1.27125E+04', '28.73', '37.35'] obsid=d[1] ra0=float(d[3]) dec0=float(d[4]) rota0=float(d[5]) texp=float(d[6]) t1=float(d[7]) t2=float(d[8]) raw0=float(d[9]) src0=float(d[10]) clean0=float(d[11]) npix0=float(d[12]) e1=float(d[13]) e2=float(d[14]) if not (raw0 > 0.0): continue obs_id.append(obsid) orbit.append(int(obsid[:4])) ra.append(ra0) dec.append(dec0) rota.append(rota0) sc = SkyCoord(ra0, dec0, frame=FK5(), unit="deg") lon.append(sc.galactic.l.value if(sc.galactic.l.value<180) else sc.galactic.l.value-360) lat.append(sc.galactic.b.value) crab_sep.append(crab_crd.separation(sc).deg) t_start.append(t1) t_stop.append(t2) exposure.append(texp) raw.append(raw0) src.append(src0) clean.append(clean0) npix.append(npix0) ph1.append(phase1) ph2.append(phase2) ph.append((phase1+phase2)/2.0) rms.append(rms0) if(do_mjd): # ~/results1/osa11/scw/0101/010100040010.001/isgri_cor_events.fits.gz corfile="/afs/mpa/project/integral/data1/scw/{}/{}.001/swg.fits".format(obsid[:4],obsid) d = getheader(corfile, 1) mjdref=float(d['MJDREF']) # tjd2/86400+obtmisdc+mjdref-40000 tj1=float(d['TSTART']) tj2=float(d['TSTOP']) tstart.append(tj1) tstop.append(tj2) mjd.append((tj1+tj2)/2.0+mjdref) #print(obtmisdc,mjdref) #print("{} {} {} {}".format(log,phase1,phase2,obsid)) else: mjd.append(0.0) indices = sorted( range(len(t_start)), key=lambda index: t_start[index] ) coldefs = fits.ColDefs([ fits.Column(name='REV', format='J', array=[orbit[index] for index in indices]), fits.Column(name='OBSID', format='12A', array=[obs_id[index] for index in indices]), fits.Column(name='RA', format='D', unit='deg', array=[ra[index] for index in indices]), fits.Column(name='DEC', format='D', unit='deg', array=[dec[index] for index in indices]), fits.Column(name='ROTA', format='D', unit='deg', array=[rota[index] for index in indices]), fits.Column(name='LON', format='D', unit='deg', array=[lon[index] for index in indices]), fits.Column(name='LAT', format='D', unit='deg', array=[lat[index] for index in indices]), #fits.Column(name='SC_TSTART', format='D', unit='s', array=[t_start[index] for index in indices]), #fits.Column(name='SC_TSTOP', format='D', unit='s', array=[t_stop[index] for index in indices]), #fits.Column(name='TSTART', format='D', unit='day', array=[tstart[index] for index in indices]), #fits.Column(name='TSTOP', format='D', unit='day', array=[tstop[index] for index in indices]), fits.Column(name='MJD', format='D', unit='day', array=[mjd[index] for index in indices]), fits.Column(name='EXPOSURE', format='D', unit='s', array=[exposure[index] for index in indices]), #fits.Column(name='PHASE1', format='D', unit='', array=[ph1[index] for index in indices]), #fits.Column(name='PHASE2', format='D', unit='', array=[ph2[index] for index in indices]), fits.Column(name='PHASE', format='D', unit='', array=[ph[index] for index in indices]), #fits.Column(name='NROWS', format='J', unit='', array=[nrows[index] for index in indices]), #fits.Column(name='LIVETIME', format='D', unit='s', array=[livetime[index] for index in indices]), fits.Column(name='RAW', format='D', unit='cts/s', array=[raw[index] for index in indices]), fits.Column(name='SRC', format='D', unit='', array=[src[index] for index in indices]), fits.Column(name='CLEAN', format='D', unit='', array=[clean[index] for index in indices]), fits.Column(name='RMS', format='D', unit='', array=[rms[index] for index in indices]), fits.Column(name='CRAB_SEP', format='D', unit='deg', array=[crab_sep[index] for index in indices]), ]) hdu = fits.BinTableHDU.from_columns(coldefs, name='RATE') hdu.header['MISSION'] = ('INTEGRAL', '') hdu.header['ERANGE'] = (key, '') hdu.header['E1'] = (erange.split()[0], '') hdu.header['E2'] = (erange.split()[1], '') hdu.header['TELESCOP'] = (key, '') hdu.header['INSTITUT'] = ('IKI', 'Affiliation') hdu.header['AUTHOR'] = ('Roman Krivonos', 'Responsible person') hdu.header['EMAIL'] = ('krivonos@cosmos.ru', 'E-mail') #hdu.add_checksum() print(hdu.columns) hdu.writeto(fout, overwrite=True) with fits.open(fout, mode='update') as hdus: hdus[1].add_checksum()