예제 #1
0
def accumulate_frame(handler, acc_dict, frame):
    '''
    Calculate the correlation products of a data frame and 
    add it to an accumulator. If the accumulator is full, 
    then write the data to disk.
    '''

    if acc_dict['filled'] == 0:
        acc_dict['timestamp'] = frame.packet_timestamps[0]
        acc_dict['index'] = frame.index


#        print frame.index
#        for i in xrange(4):
#            print frame.packet_timestamps[i]

    datum = correlator.convert_frame_multiple_channels(frame.frame_data)

    acc_dict['accumulator'] += correlator.return_triangle_array(
        correlator.correlate(datum))
    acc_dict['frame_indices'][acc_dict['filled']] = frame.index
    acc_dict['frame_numbers'][acc_dict['filled']] = frame.frame_number
    acc_dict['filled'] += 1

    if acc_dict['filled'] == acc_dict['n_acc']:
        write_to_disk(handler, acc_dict)
        acc_dict['write_index'] += 1
        acc_dict['accumulator'] *= 0
        acc_dict['frame_indices'] *= 0
        acc_dict['frame_numbers'] *= 0
        acc_dict['filled'] = 0
예제 #2
0
    def test_correlator(self):

        radar = rlib.eiscat_uhf()

        measurement_folder = './data/uhf_test_data/events'
        tle_file = './data/uhf_test_data/tle-201801.txt'
        measurement_file = measurement_folder + '/det-000000.h5'

        with h5py.File(measurement_file, 'r') as h_det:
            r = h_det['r'].value * 1e3
            t = h_det['t'].value
            v = -h_det['v'].value

            dat = {
                'r': r,
                't': t,
                'v': v,
            }

        pop = population_library.tle_snapshot(tle_file, sgp4_propagation=True)

        pop.filter('oid', lambda oid: n.abs(oid - 43075) < 50)

        cdat = correlator.correlate(
            data=dat,
            station=radar._rx[0],
            population=pop,
            metric=correlator.residual_distribution_metric,
            n_closest=2,
            out_file=None,
            verbose=False,
            MPI_on=False,
        )

        assert int(cdat[0]['sat_id']) == 43075
        self.assertLess(n.abs(cdat[0]['stat'][0]), 1e3)
        self.assertLess(n.abs(cdat[0]['stat'][1]), 500)
        self.assertLess(n.abs(cdat[0]['stat'][2]), 10.0)
        self.assertLess(n.abs(cdat[0]['stat'][3]), 5.0)
예제 #3
0
def calculate(output_file, input_file_0, input_file_1, threshold):
    if threshold > 0:
        correlator.correlate(output_file, input_file_0, input_file_1, spearman="spearman", rho_threshold = threshold)
    else:
        correlator.correlate(output_file, input_file_0, input_file_1, spearman="spearman")
예제 #4
0
def main():
    init()
    download()
    correlate()
    upload()
예제 #5
0
 def test_correlate(self):
     results_dir = os.path.abspath("../result")
     correlate()
     self.assertEqual(len(os.listdir(results_dir)),
                      2,
                      msg="Expected correlate to generate two city files")
예제 #6
0

print('r_obs: ',len(r_obs))
print('r_sim: ',len(r_sim))
'''
dat = {
    't': t_sim,
    'r': r_sim * 1e3,
    'v': v_sim * 1e3,
}

cdat = correlator.correlate(
    data=dat,
    station=radar._rx[0],
    population=pop,
    metric=correlator.residual_distribution_metric,
    n_closest=1,
    out_file=None,
    verbose=False,
    MPI_on=False,
)

correlator.plot_correlation(dat, cdat[0])

fig = plt.figure(figsize=(15, 15))
ax = fig.add_subplot(211)
ax.plot(t_sim - t_sim[0], r_sim - r_obs, 'ob')
ax.set_ylabel('sim vs obs error [km]')
ax.set_xlabel('relative time [s]')
ax.set_title('Real TDM vs simulated TDM')

#print(v_sim)
예제 #7
0
    def test_create_tracklet(self):

        radar = rlib.eiscat_uhf()
        radar.set_FOV(30.0, 25.0)

        #tle files for envisat in 2016-09-05 to 2016-09-07 from space-track.
        TLEs = [
            ('1 27386U 02009A   16249.14961597  .00000004  00000-0  15306-4 0  9994',
             '2 27386  98.2759 299.6736 0001263  83.7600 276.3746 14.37874511760117'
             ),
            ('1 27386U 02009A   16249.42796553  .00000002  00000-0  14411-4 0  9997',
             '2 27386  98.2759 299.9417 0001256  82.8173 277.3156 14.37874515760157'
             ),
            ('1 27386U 02009A   16249.77590267  .00000010  00000-0  17337-4 0  9998',
             '2 27386  98.2757 300.2769 0001253  82.2763 277.8558 14.37874611760201'
             ),
            ('1 27386U 02009A   16250.12384028  .00000006  00000-0  15974-4 0  9995',
             '2 27386  98.2755 300.6121 0001252  82.5872 277.5467 14.37874615760253'
             ),
            ('1 27386U 02009A   16250.75012691  .00000017  00000-0  19645-4 0  9999',
             '2 27386  98.2753 301.2152 0001254  82.1013 278.0311 14.37874790760345'
             ),
        ]

        pop = population_library.tle_snapshot(TLEs, sgp4_propagation=True)

        #it seems to around 25m^2 area
        d = n.sqrt(25.0 * 4 / n.pi)
        pop.add_column('d', space_object_uses=True)
        pop['d'] = d

        ccsds_file = './data/uhf_test_data/events/2002-009A-1473150428.tdm'

        obs_data = ccsds_write.read_ccsds(ccsds_file)
        jd_obs = dpt.mjd_to_jd(dpt.npdt2mjd(obs_data['date']))

        date_obs = obs_data['date']
        sort_obs = n.argsort(date_obs)
        date_obs = date_obs[sort_obs]
        r_obs = obs_data['range'][sort_obs]

        jd_sort = jd_obs.argsort()
        jd_obs = jd_obs[jd_sort]

        jd_det = jd_obs[0]

        jd_pop = dpt.mjd_to_jd(pop['mjd0'])

        pop_id = n.argmin(n.abs(jd_pop - jd_det))
        obj = pop.get_object(pop_id)

        print(obj)

        jd_obj = dpt.mjd_to_jd(obj.mjd0)

        print('Day difference detection - TLE: {}'.format(jd_det - jd_obj))

        t_obs = (jd_obs - jd_obj) * (3600.0 * 24.0)

        meas, fnames, ecef_stdevs = simulate_tracklet.create_tracklet(
            obj,
            radar,
            t_obs,
            hdf5_out=True,
            ccsds_out=True,
            dname="./tests/tmp_test_data",
            noise=False,
        )

        out_h5 = fnames[0] + '.h5'
        out_ccsds = fnames[0] + '.tdm'

        print('FILES: ', fnames)

        with h5py.File(out_h5, 'r') as h_det:
            assert 'm_range' in h_det
            assert 'm_range_rate' in h_det
            assert 'm_time' in h_det

        sim_data = ccsds_write.read_ccsds(out_ccsds)

        date_sim = sim_data['date']
        sort_sim = n.argsort(date_sim)
        date_sim = date_sim[sort_sim]

        r_sim = sim_data['range'][sort_sim]
        v_sim = sim_data['doppler_instantaneous'][sort_sim]

        lt_correction = n.round(r_sim / scipy.constants.c * 1e6).astype(
            n.int64).astype('timedelta64[us]')

        date_sim_cor = date_sim + lt_correction

        t_sim = dpt.jd_to_unix(dpt.mjd_to_jd(dpt.npdt2mjd(date_sim_cor)))

        for ind in range(len(date_sim)):
            time_df = (dpt.npdt2mjd(date_sim_cor[ind]) -
                       dpt.npdt2mjd(date_obs[ind])) * 3600.0 * 24.0
            assert time_df < 0.01

        assert len(r_obs) == len(r_sim)

        dat = {
            't': t_sim,
            'r': r_sim * 1e3,
            'v': v_sim * 1e3,
        }

        cdat = correlator.correlate(
            data=dat,
            station=radar._rx[0],
            population=pop,
            metric=correlator.residual_distribution_metric,
            n_closest=1,
            out_file=None,
            verbose=False,
            MPI_on=False,
        )

        self.assertLess(n.abs(cdat[0]['stat'][0]), 5.0)
        self.assertLess(n.abs(cdat[0]['stat'][1]), 50.0)
        self.assertLess(n.abs(cdat[0]['stat'][2]), 5.0)
        self.assertLess(n.abs(cdat[0]['stat'][3]), 50.0)

        nt.assert_array_less(n.abs(r_sim - r_obs), 1.0)

        os.remove(out_h5)
        print('removed "{}"'.format(out_h5))

        os.remove(out_ccsds)
        print('removed "{}"'.format(out_ccsds))

        sat_folder = os.sep.join(fnames[0].split(os.sep)[:-1])
        os.rmdir(sat_folder)
        print('removed "{}"'.format(sat_folder))
예제 #8
0
__author__ = 'guorongxu'

import sys
import correlator

if __name__ == "__main__":
    row_filename = sys.argv[1]
    col_filename = sys.argv[1]

    print "The input file name: " + row_filename

    outfile = row_filename.replace(".txt", ".cor")
    correlator.correlate(outfile,
                         row_filename,
                         col_filename,
                         spearman=True,
                         pvalue_threshold=None,
                         rho_threshold=0.3)