コード例 #1
0
def run_scanning_simulation(radar_ctrl):

    p = Profiler()
    radar_ctrl.profiler = p

    p.start('total')
    scheduler = ObservedScanning(
        radar=eiscat3d,
        controllers=[radar_ctrl],
        logger=logger,
        profiler=p,
    )

    p.start('equidistant_sampling')
    t = sorts.equidistant_sampling(
        orbit=obj.state,
        start_t=0,
        end_t=end_t,
        max_dpos=1e3,
    )
    p.stop('equidistant_sampling')

    print(f'Temporal points obj: {len(t)}')

    p.start('get_state')
    states = obj.get_state(t)
    p.stop('get_state')

    p.start('find_passes')
    #rename cache_data to something more descriptive
    passes = eiscat3d.find_passes(t, states, cache_data=True)
    p.stop('find_passes')

    p.start('observe_passes')
    data = scheduler.observe_passes(passes, space_object=obj, snr_limit=False)
    p.stop('observe_passes')

    for psi in data:
        for txps in psi:
            for rxtxps in txps:
                print(f'Max SNR={10*np.log10(rxtxps["snr"].max())} dB')

    p.stop('total')
    print(f'\n {radar_ctrl.__class__}: len(t) = {len(radar_ctrl.t)} \n')
    print(p.fmt(normalize='total'))
コード例 #2
0
ファイル: observing_passes.py プロジェクト: danielk333/SORTS
        data[:, 0] = t
        names = []
        targets = []
        for ind, mrad in enumerate(generator):
            radar, meta = mrad
            names.append(meta['controller_type'].__name__)
            targets.append(meta['target'])
            for ri, rx in enumerate(radar.rx):
                data[ind, 1 + ri * 2] = rx.beam.azimuth
                data[ind, 2 + ri * 2] = rx.beam.elevation
        data = data.T.tolist() + [names, targets]
        data = list(map(list, zip(*data)))
        return data


p = Profiler()

scheduler = MyStaticList(radar=eiscat3d, controllers=[e3d_tracker], profiler=p)

sched_data = scheduler.schedule()

rx_head = [
    f'rx{i} {co}' for i in range(len(scheduler.radar.rx))
    for co in ['az', 'el']
]
sched_tab = tabulate(sched_data,
                     headers=["t [s]"] + rx_head + ['Controller', 'Target'])

print(sched_tab)

p.start('total')
コード例 #3
0
'''

import numpy as np
import matplotlib.pyplot as plt
import pyorb

import sorts
eiscat3d = sorts.radars.eiscat3d
from sorts.profiling import Profiler

from sorts.propagator import SGP4
Prop_cls = SGP4
Prop_opts = dict(settings=dict(out_frame='ITRF', ), )
prop = Prop_cls(**Prop_opts)

p = Profiler()
p.start('total')

orb = pyorb.Orbit(M0=pyorb.M_earth,
                  direct_update=True,
                  auto_update=True,
                  degrees=True,
                  a=7200e3,
                  e=0.1,
                  i=75,
                  omega=0,
                  Omega=79,
                  anom=72,
                  epoch=53005.0)
print(orb)
コード例 #4
0
#!/usr/bin/env python
'''
Interpolation
======================

'''
import numpy as np
import matplotlib.pyplot as plt

from sorts.profiling import Profiler
from sorts.propagator import SGP4
from sorts import interpolation

p = Profiler()

prop = SGP4(
    settings=dict(out_frame='TEME', ),
    profiler=p,
)

state0 = np.array(
    [-7100297.113, -3897715.442, 18568433.707, 86.771, -3407.231, 2961.571])
t = np.arange(0.0, 360.0, 30.0)
mjd0 = 53005

states = prop.propagate(t, state0, mjd0, A=1.0, C_R=1.0, C_D=1.0)

interpolator = interpolation.Legendre8(states, t)

t_f = np.arange(0.0, 360.0, 1.0)
finer_states = interpolator.get_state(t_f)
コード例 #5
0
orekit_data = '/home/danielk/IRF/IRF_GITLAB/orekit_build/orekit-data-master.zip'

Prop_cls = Orekit
Prop_opts = dict(
    orekit_data=orekit_data,
    settings=dict(
        in_frame='GCRS',
        out_frame='ITRS',
    ),
)

end_t = 12 * 3600.0
scan = Fence(azimuth=90, num=40, dwell=0.1, min_elevation=30)

p = Profiler()

logger = sorts.profiling.get_logger('scanning')

objs = [
    SpaceObject(
        Prop_cls,
        propagator_options=Prop_opts,
        a=7200e3,
        e=0.02,
        i=75,
        raan=86,
        aop=0,
        mu0=60,
        epoch=53005.0,
        parameters=dict(d=0.1, ),
コード例 #6
0
======================================

'''

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import pyorb

import sorts
eiscat3d = sorts.radars.eiscat3d
from sorts.controller import Tracker
from sorts.propagator import SGP4
from sorts.profiling import Profiler

p = Profiler()
p.start('total')

prop = SGP4(settings=dict(out_frame='ITRF', ), )

orb = pyorb.Orbit(M0=pyorb.M_earth,
                  direct_update=True,
                  auto_update=True,
                  degrees=True,
                  a=6700e3,
                  e=0,
                  i=75,
                  omega=0,
                  Omega=80,
                  anom=72)
t = np.linspace(0, 120, num=10)
コード例 #7
0
from sorts.scheduler import StaticList, ObservedParameters
from sorts.controller import Scanner
from sorts import SpaceObject
from sorts.profiling import Profiler
from sorts.radar.scans import Fence

from sorts.propagator import SGP4

Prop_cls = SGP4
Prop_opts = dict(settings=dict(out_frame='ITRF', ), )

end_t = 600.0
scan = Fence(azimuth=90, num=40, dwell=0.1, min_elevation=30)

p = Profiler()

logger = sorts.profiling.get_logger('scanning')

objs = [
    SpaceObject(
        Prop_cls,
        propagator_options=Prop_opts,
        a=7200e3,
        e=0.02,
        i=75,
        raan=86,
        aop=0,
        mu0=60,
        epoch=53005.0,
        parameters=dict(d=0.1, ),
コード例 #8
0
#!/usr/bin/env python
'''
Profiling save and load
================================

'''
import pathlib
from sorts.profiling import Profiler

p = Profiler()
p.start('program')

p.start('list init')
lst = list(range(200))
p.stop('list init')

for i in range(1000):
    p.start('list reversal')
    lst = lst[::-1]
    p.stop('list reversal')

p.stop('program')

print(p)

pth = pathlib.Path(__file__).parent / 'data' / 'profiler_data.txt'
print(f'Writing profiler data to: {pth}')
p.to_txt(pth)

new_profiler = Profiler.from_txt(pth)
コード例 #9
0
def observe_objects(objs, controllers, end_t=600.0, dt=10.0, verbose=True):

    p = Profiler()

    class ObservedScanning(StaticList, ObservedParameters):
        pass

    #set radar
    for ctrl in controllers:
        ctrl.radar = eiscat3d
        ctrl.profiler = p
        ctrl.logger = logger

    p.start('total')
    scheduler = ObservedScanning(
        radar=eiscat3d,
        controllers=controllers,
        logger=logger,
        profiler=p,
    )

    t = np.arange(0, end_t, dt)

    if verbose:
        for obj in objs:
            print(obj)

    datas = []
    passes = []
    states = []
    for ind in range(len(objs)):

        p.start('get_state')
        states += [objs[ind].get_state(t)]
        p.stop('get_state')

        p.start('find_passes')
        passes += [eiscat3d.find_passes(t, states[ind], cache_data=True)]
        p.stop('find_passes')

        p.start('observe_passes')
        data = scheduler.observe_passes(passes[ind],
                                        space_object=objs[ind],
                                        snr_limit=False)
        p.stop('observe_passes')

        datas.append(data)

    p.stop('total')
    if verbose:
        print(p.fmt(normalize='total'))

    return {'t': t, 'observations': datas, 'passes': passes, 'states': states}
コード例 #10
0
#!/usr/bin/env python
'''
Profiling
==========

'''
from sorts.profiling import Profiler

p = Profiler()
p.start('program')

p.start('list init')
lst = list(range(200))
p.stop('list init')

for i in range(1000):
    p.start('list reversal')
    lst = lst[::-1]
    p.stop('list reversal')

p.stop('program')

print(p)
コード例 #11
0
ファイル: profiler_orekit.py プロジェクト: danielk333/SORTS
#!/usr/bin/env python
'''
Profiling Orekit
======================

'''
import numpy as np

from sorts.profiling import Profiler
from sorts.propagator import Orekit

p = Profiler()
p.start('total')

orekit_data = '/home/danielk/IRF/IRF_GITLAB/orekit_build/orekit-data-master.zip'

prop = Orekit(
    orekit_data=orekit_data,
    settings=dict(
        in_frame='ITRS',
        out_frame='GCRS',
        drag_force=False,
        radiation_pressure=False,
    ),
    profiler=p,
)

print(prop)

state0 = np.array(
    [-7100297.113, -3897715.442, 18568433.707, 86.771, -3407.231, 2961.571])
コード例 #12
0
#!/usr/bin/env python

'''
Profiling memory leaks
=========================

'''
import matplotlib.pyplot as plt

from sorts.profiling import Profiler

p = Profiler(track_memory=True)

#As the profiler data is also stored in Python tracked memory
# a diff of "nothing" will still result in more allocation of memory
# including initialization for structures and the like
p.snapshot('nothing')
p.memory_diff('nothing')

#this allocates memory
p.snapshot('one list')
lst = list(range(2000))
p.memory_diff('one list')

#and if we take care to delete the variable
#only profiling allocations are left over
del lst
p.memory_diff('one list', save='one list - and clear')

#this iteration changes allocation each iteration and does not clean up
lsts = []