In [3]:
# Notebook to use for testing filters and extract data relevant for going forward

In [33]:
import schedulingbazaar

import pickle
import datetime
import collections
import intervaltree as iv

from itertools import product

In [7]:
passes = pickle.load(open('passes_new.pkl', 'rb'))

In [36]:
# All sats for one gs filter
def passes_per_gs(passes, gs):
    """Returns Interval Tree containing all pass intervals over specified ground station
    
    Arguments:
    passes - initial dictionary of all passes for all gs/sat combos
    gs - specific ground station name string
    """
    passtree = iv.IntervalTree()
    Names = collections.namedtuple('Names', ['gs','sat','pass_data'])
    for (t1, t2), value in passes.items():
        for satpass in value:
            if t1 == gs:
                begin = datetime.datetime.timestamp(satpass['start'])
                end = datetime.datetime.timestamp(satpass['end'])
                data = Names(gs, t2, satpass)
                passtree.addi(begin, end, data)
    return passtree

In [37]:
fact = passes_per_gs(passes, 'FACT')

In [31]:
datetime.datetime.timestamp(datetime.datetime.utcnow())


Out[31]:
1499789151.60831

In [39]:
print(len(fact))
fact.search(1499789151.60831)


126983
Out[39]:
{Interval(1499788667.80871, 1499789193.545675, Names(gs='FACT', sat='GOMX 1', pass_data={'duration': 525.736965, 'set_az': 357.8121365022175, 'start': datetime.datetime(2017, 7, 11, 15, 57, 47, 808710), 'rise_az': 131.00698979056318, 'end': datetime.datetime(2017, 7, 11, 16, 6, 33, 545675)})),
 Interval(1499788917.918042, 1499789572.242653, Names(gs='FACT', sat='PCSAT (NO-44)', pass_data={'duration': 654.32461, 'set_az': 131.96989619937324, 'start': datetime.datetime(2017, 7, 11, 16, 1, 57, 918042), 'rise_az': 322.1499976379101, 'end': datetime.datetime(2017, 7, 11, 16, 12, 52, 242653)})),
 Interval(1499789040.572726, 1499789384.210776, Names(gs='FACT', sat='TISAT 1', pass_data={'duration': 343.63805, 'set_az': 261.42947931271334, 'start': datetime.datetime(2017, 7, 11, 16, 4, 0, 572726), 'rise_az': 345.9812106710016, 'end': datetime.datetime(2017, 7, 11, 16, 9, 44, 210776)})),
 Interval(1499789050.484437, 1499789451.925811, Names(gs='FACT', sat='SOMP', pass_data={'duration': 401.441374, 'set_az': 63.300690586060774, 'start': datetime.datetime(2017, 7, 11, 16, 4, 10, 484437), 'rise_az': 175.1748042094225, 'end': datetime.datetime(2017, 7, 11, 16, 10, 51, 925811)})),
 Interval(1499789091.259459, 1499789428.747639, Names(gs='FACT', sat='2015-049G', pass_data={'duration': 337.48818, 'set_az': 13.545007907207523, 'start': datetime.datetime(2017, 7, 11, 16, 4, 51, 259459), 'rise_az': 108.21652683225237, 'end': datetime.datetime(2017, 7, 11, 16, 10, 28, 747639)}))}

In [40]:
# All gs for one sat filter
def passes_per_sat(passes, sat):
    """Returns Interval Tree containing all pass intervals for specified satellite
    
    Arguments:
    passes - initial dictionary of all passes for all gs/sat combos
    sat - specific satellite name string
    """
    passtree = iv.IntervalTree()
    Names = collections.namedtuple('Names', ['gs','sat','pass_data'])
    for (t1, t2), value in passes.items():
        for satpass in value:
            if t2 == sat:
                begin = datetime.datetime.timestamp(satpass['start'])
                end = datetime.datetime.timestamp(satpass['end'])
                data = Names(t1, sat, satpass)
                passtree.addi(begin, end, data)
    return passtree

In [43]:
oscar = passes_per_sat(passes, 'OSCAR 7 (AO-7)')

In [45]:
print(len(oscar))
oscar.search(1499789151.60831)


29592
Out[45]:
set()

In [46]:
# Passes for one gs and one sat filter
def passes_gs_sat(passes, gs, sat):
    """Returns Interval Tree containing all pass intervals for one gs/sat combo
    
    Arguments:
    passes - initial dictionary of all passes for all gs/sat combos
    gs - specific ground station name string
    sat - specific satellite name string
    """
    passtree = iv.IntervalTree()
    Names = collections.namedtuple('Names', ['gs','sat','pass_data'])
    for (t1, t2), value in passes.items():
        for satpass in value:
            if t1 == gs and t2 == sat:
                begin = datetime.datetime.timestamp(satpass['start'])
                end = datetime.datetime.timestamp(satpass['end'])
                data = Names(gs, sat, satpass)
                passtree.addi(begin, end, data)
    return passtree

In [47]:
both = passes_gs_sat(passes, 'FACT', 'OSCAR 7 (AO-7)')

In [48]:
print(len(both))
both.search(1499789151.60831)


3102
Out[48]:
set()