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}
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'))
passes_rx1 = sorts.find_passes(t, states, eiscat3d.rx[1]) print(f'rx-1 passes: {len(passes_rx1)}') p.stop('find_passes') p.start('sim_passes') #finding simultaneous passes chtx0 = np.full((len(t), ), False, dtype=np.bool) chtx0[passes_tx0[0].inds] = True chrx1 = np.full((len(t), ), False, dtype=np.bool) chrx1[passes_rx1[0].inds] = True inds = np.where(np.logical_and(chtx0, chrx1))[0] p.stop('sim_passes') print(f'Pass 0 length tx-0: {len(passes_tx0[0].inds)}') print(f'Pass 0 length rx-1: {len(passes_rx1[0].inds)}') print(f'Full tx-0 to rx-1 pass: {len(inds)}') print('Using the predefined paired passes function') p.start('find_simultaneous_passes') tx0rx1_passes = sorts.find_simultaneous_passes( t, states, [eiscat3d.tx[0], eiscat3d.rx[1]]) p.stop('find_simultaneous_passes') print(f'tx-0 and rx-1 passes: {len(tx0rx1_passes)}') print(f'Full tx-0 to rx-1 pass: {len(tx0rx1_passes[0].inds)}') p.stop('total') print(p.fmt(normalize='total'))
profiler=p, ) print(prop) state0 = np.array( [-7100297.113, -3897715.442, 18568433.707, 86.771, -3407.231, 2961.571]) t = np.linspace(0, 3600 * 24.0 * 2, num=5000) mjd0 = 53005 states = prop.propagate(t, state0, mjd0, A=1.0, C_R=1.0, C_D=1.0) p.stop('total') print(p) print(p.fmt(timedelta=True)) print(p.fmt(normalize='total')) print('\n Enable Drag Force \n') p2 = Profiler() p2.start('total') prop = Orekit( orekit_data=orekit_data, settings=dict( in_frame='ITRS', out_frame='GCRS', drag_force=True, radiation_pressure=False, ),