-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtime_to_wsclean_interval.py
More file actions
executable file
·86 lines (69 loc) · 2.75 KB
/
time_to_wsclean_interval.py
File metadata and controls
executable file
·86 lines (69 loc) · 2.75 KB
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/env python
import argparse
import warnings
import astropy.units as u
import numpy as np
import pandas as pd
from astropy.time import Time, TimeDelta
from casacore import tables
from sunpy.time import TimeRange
warnings.filterwarnings("ignore")
def nbaselines(nants):
# calculate number of baselines including self correlations
# given a number of antennas
return nants * (nants + 1) / 2
# mjd0 = Time(0, format='mjd')
def get_interval(msin, trange):
"""
Convert sunpy.time.Timerange to interval for WSClean
Inputs:
msin: input Measurement Set (MS)
trange: time as sunpy.time.Timerange
"""
with tables.table(msin, ack=False) as t:
dt = TimeDelta(t.col('INTERVAL')[0], format='sec')
t0 = t.getcol('TIME')[0] # seconds from 1858/11/17 MJD reference
t0 = Time(t0 / 24 / 3600, format='mjd') # convert to days
if trange.start < t0:
print("trange start is before observation start, interval will start at 0")
int0 = 0
else:
t1 = trange.start - t0
int0 = t1 / dt
# int0 = trange.start-obs_start
# int0 = int(np.floor(int0/dt))
int0 = int(np.round(int0))
int_len = trange.dt / dt
int_len = int(np.round(int_len))
int1 = int0 + int_len
print("interval: {} {}".format(int0, int1))
return int0, int1
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Convert a time range to data interval for wsclean')
# should probably get obs_start from the file but that probably needs casacore and stuff
parser.add_argument('msin', help='input measurement set', metavar='MSIN')
parser.add_argument('--trange', dest='trange', nargs='+',
help='time range for observation.\
2 arguments START and END in format YYYY-MM-DDTHH:MM:SS\
if only START given then assume END is 1 second later.',
metavar=('START', 'END'))
parser.add_argument('-p', '--pickle', help='pickled pandas dataframe with times of burst', default=None)
args = parser.parse_args()
msin = args.msin
trange = args.trange
pickle = args.pickle
if pickle is None:
if len(trange) == 2:
trange = TimeRange(trange[0], trange[1]) # ("2019-04-04T14:08:00", "2019-04-04T14:17:00")
elif len(trange) == 1:
tstart = Time(trange[0])
trange = TimeRange(tstart, tstart + 1 * u.s)
else:
print("Invalid number of trange arguments, 1 or 2")
get_interval(msin, trange)
else:
df = pd.read_pickle(pickle)
for t in df[df.columns[0]]:
tstart = Time(t)
trange = TimeRange(tstart, tstart + 0.1 * u.s)
get_interval(msin, trange)