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'))
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')
''' 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)
#!/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)
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, ),
====================================== ''' 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)
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, ),
#!/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)
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}
#!/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)
#!/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])
#!/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 = []