def dict2h5(fn, dictin): """A function that will save a dictionary to a h5 file. Inputs filename - The file name in a string. dictin - A dictionary that will be saved out. """ fn = Path(fn).expanduser() if fn.is_file(): fn.unlink() with tables.open_file(str(fn), mode="w", title="RadarDataFile out.") as f: try: # XXX only allow 1 level of dictionaries, do not allow for dictionary of dictionaries. # Make group for each dictionary for cvar in dictin.keys(): # pdb.set_trace() if type(dictin[cvar]) is list: f.create_group('/', cvar) lenzeros = len(str(len(dictin[cvar]))) - 1 for inum, datapnts in enumerate(dictin[cvar]): f.create_array( '/' + cvar, 'Inst{0:0{1:d}d}'.format(inum, lenzeros), datapnts, 'Static array') elif type(dictin[cvar]) is sp.ndarray: f.create_array('/', cvar, dictin[cvar], 'Static array') else: raise ValueError( 'Values in list must be lists or numpy arrays') f.close() except Exception as inst: print(type(inst)) print(inst.args) print(inst) raise NameError('Failed to write to h5 file.')
def dict2h5(fn,dictin): """A function that will save a dictionary to a h5 file. Inputs filename - The file name in a string. dictin - A dictionary that will be saved out. """ fn = Path(fn).expanduser() if fn.is_file(): fn.unlink() with tables.open_file(str(fn), mode = "w", title = "RadarDataFile out.") as f: try: # XXX only allow 1 level of dictionaries, do not allow for dictionary of dictionaries. # Make group for each dictionary for cvar in dictin.keys(): # pdb.set_trace() if type(dictin[cvar]) is list: f.create_group('/',cvar) lenzeros= len(str(len(dictin[cvar])))-1 for inum, datapnts in enumerate(dictin[cvar]): f.create_array('/'+cvar,'Inst{0:0{1:d}d}'.format(inum,lenzeros),datapnts,'Static array') elif type(dictin[cvar]) is sp.ndarray: f.create_array('/',cvar,dictin[cvar],'Static array') else: raise ValueError('Values in list must be lists or numpy arrays') f.close() except Exception as inst: print(type(inst)) print(inst.args) print(inst) raise NameError('Failed to write to h5 file.')
def readconfigfile(fname): """ This funciton will read in the pickle files that are used for configuration. Args: fname - A string containing the file name and location. Returns: sensdict - A dictionary that holds the sensor parameters. simparams - A dictionary that holds the simulation parameters. """ fname = Path(fname).expanduser() if not fname.is_file(): raise IOError('{} not found'.format(fname)) ftype = fname.suffix curpath = fname.parent if ftype == '.pickle': with fname.open('r') as f: dictlist = pickle.load(f) angles = getangles(dictlist[0]['beamlist'], dictlist[0]['radarname']) beamlist = [float(i) for i in dictlist[0]['beamlist']] ang_data = sp.array([[iout[0], iout[1]] for iout in angles]) sensdict = sensconst.getConst(dictlist[0]['radarname'], ang_data) simparams = dictlist[1] elif ftype == '.yml': with fname.open('r') as f: dictlist = yaml.load(f) angles = getangles(dictlist[0]['beamlist'], dictlist[0]['radarname']) beamlist = [float(i) for i in dictlist[0]['beamlist']] ang_data = sp.array([[iout[0], iout[1]] for iout in angles]) sensdict = sensconst.getConst(dictlist[0]['radarname'], ang_data) simparams = dictlist[1] if ftype == '.ini': config = ConfigParser() config.read(str(fname)) beamlist = config.get('section 1', 'beamlist').split() beamlist = [float(i) for i in beamlist] angles = getangles(beamlist, config.get('section 1', 'radarname')) ang_data = sp.array([[iout[0], iout[1]] for iout in angles]) sensdict = sensconst.getConst(config.get('section 1', 'radarname'), ang_data) simparams = {} for param in config.options('simparams'): rname = config.get('simparamsnames', param) simparams[rname] = config.get('simparams', param) for param in simparams: if simparams[param] == "<type 'numpy.complex128'>": simparams[param] = sp.complex128 elif simparams[param] == "<type 'numpy.complex64'>": simparams[param] = sp.complex64 elif param == 'outangles': outlist1 = simparams[param].split(',') simparams[param] = [[ float(j) for j in i.lstrip().rstrip().split(' ') ] for i in outlist1] else: simparams[param] = simparams[param].split(" ") if len(simparams[param]) == 1: simparams[param] = simparams[param][0] try: simparams[param] = float(simparams[param]) except: pass else: for a in range(len(simparams[param])): try: simparams[param][a] = float(simparams[param][a]) except: pass if 't_s' in simparams.keys(): sensdict['t_s'] = simparams['t_s'] sensdict['fs'] = 1.0 / simparams['t_s'] sensdict[ 'BandWidth'] = sensdict['fs'] * 0.5 #used for the noise bandwidth for ikey in sensdict.keys(): if ikey in simparams.keys(): sensdict[ikey] = simparams[ikey] # del simparams[ikey] simparams['Beamlist'] = beamlist time_lim = simparams['TimeLim'] (pulse, simparams['Pulselength']) = makepulse(simparams['Pulsetype'], simparams['Pulselength'], sensdict['t_s']) simparams['Pulse'] = pulse simparams['amb_dict'] = make_amb(sensdict['fs'], int(simparams['ambupsamp']), sensdict['t_s'] * len(pulse), pulse, simparams['numpoints']) simparams['angles'] = angles rng_lims = simparams['RangeLims'] rng_gates = sp.arange(rng_lims[0], rng_lims[1], sensdict['t_s'] * v_C_0 * 1e-3 / 2.) simparams['Timevec'] = sp.arange(0, time_lim, simparams['Fitinter']) simparams['Rangegates'] = rng_gates if not 'lagtype' in simparams.keys(): simparams['lagtype'] = 'centered' sumrule = makesumrule(simparams['Pulsetype'], simparams['Pulselength'], sensdict['t_s'], simparams['lagtype']) simparams['SUMRULE'] = sumrule minrg = -sumrule[0].min() maxrg = len(rng_gates) - sumrule[1].max() simparams['Rangegatesfinal'] = sp.array([ sp.mean(rng_gates[irng + sumrule[0, 0]:irng + sumrule[1, 0] + 1]) for irng in range(minrg, maxrg) ]) if ('startfile' in simparams.keys() and len(simparams['startfile']) > 0 ) and simparams['Pulsetype'].lower() != 'barker': relpath = Path(simparams['startfile']) if not relpath.is_absolute(): # Some times the ini files may split the strings of the start file because of white space in file names. if type(simparams['startfile']) is list: startfile = " ".join(simparams['startfile']) else: startfile = simparams['startfile'] fullfilepath = curpath.joinpath(startfile) simparams['startfile'] = str(fullfilepath) else: fullfilepath = simparams['startfile'] stext = Path(fullfilepath).is_file() if not stext: warnings.warn('The given start file does not exist', UserWarning) elif simparams['Pulsetype'].lower() != 'barker': warnings.warn('No start file given', UserWarning) return (sensdict, simparams)
def readconfigfile(fname): """ This funciton will read in the pickle files that are used for configuration. Args: fname - A string containing the file name and location. Returns: sensdict - A dictionary that holds the sensor parameters. simparams - A dictionary that holds the simulation parameters. """ fname = Path(fname).expanduser() if not fname.is_file(): raise IOError('{} not found'.format(fname)) ftype = fname.suffix curpath = fname.parent if ftype=='.yml': with fname.open('r') as f: dictlist = yaml.load(f) angles = sensconst.getangles(dictlist[0]['beamlist'], dictlist[0]['radarname']) beamlist = [float(i) for i in dictlist[0]['beamlist']] ang_data = sp.array([[iout[0],iout[1]] for iout in angles]) sensdict = sensconst.getConst(dictlist[0]['radarname'],ang_data) simparams = dictlist[1] elif ftype=='.ini': config = ConfigParser() config.read(str(fname)) beamlist = config.get('section 1','beamlist').split() beamlist = [float(i) for i in beamlist] radarname = config.get('section 1','radarname').split()[0] angles = sensconst.getangles(beamlist, radarname) ang_data = sp.array([[iout[0],iout[1]] for iout in angles]) sensdict = sensconst.getConst(config.get('section 1','radarname'),ang_data) simparams = {} for param in config.options('simparams'): rname = config.get('simparamsnames',param) simparams[rname] = config.get('simparams',param) for param in simparams: if simparams[param] == "<type 'numpy.complex128'>": simparams[param] = sp.complex128 elif simparams[param] == "<type 'numpy.complex64'>": simparams[param] = sp.complex64 elif param == 'outangles': outlist1 = simparams[param].split(',') simparams[param] = [[float(j) for j in i.lstrip().rstrip().split(' ')] for i in outlist1] else: simparams[param] = simparams[param].split(" ") if len(simparams[param]) == 1: simparams[param] = simparams[param][0] try: simparams[param] = float(simparams[param]) except: pass else: for a in range(len(simparams[param])): try: simparams[param][a] = float(simparams[param][a]) except: pass if 't_s' in simparams.keys(): sensdict['t_s'] = simparams['t_s'] sensdict['fs'] = 1.0/simparams['t_s'] sensdict['BandWidth'] = sensdict['fs']*0.5 #used for the noise bandwidth for ikey in sensdict.keys(): if ikey in simparams.keys(): sensdict[ikey] = simparams[ikey] # del simparams[ikey] simparams['Beamlist'] = beamlist time_lim = simparams['TimeLim'] (pulse, _) = makepulse(simparams['Pulsetype'], simparams['Pulselength'], sensdict['t_s']) simparams['Pulse'] = pulse psamps = len(pulse) simparams['amb_dict'] = make_amb(sensdict['fs'], int(simparams['ambupsamp']), sensdict['t_s']*len(pulse), pulse, simparams['numpoints']) simparams['angles'] = angles simparams['Timevec'] = sp.arange(0, time_lim, simparams['Fitinter']) rng_samp = simparams['t_s']*v_C_0*1e-3/2. ipp_samps = sp.floor(simparams['IPP']*sensdict['fs']) ipp_rng = sp.arange(0, ipp_samps, dtype=float)*rng_samp rng_lims = simparams['RangeLims'] # XXX Set up range gates differently min_rng = sp.where(ipp_rng >= rng_lims[0])[0][0] max_rng = sp.where(ipp_rng <= rng_lims[1])[0][-1] rng_all = sp.arange(min_rng-(psamps-1), max_rng+(psamps-1), dtype=float)*rng_samp rng_all[rng_all <= 0] = rng_samp simparams['Rangegates'] = rng_all simparams['Rangegatesfinal'] = sp.arange(min_rng,max_rng,dtype=float)*rng_samp if not 'lagtype' in simparams.keys(): simparams['lagtype'] = 'centered' sumrule = makesumrule(simparams['Pulsetype'], simparams['Pulselength'], sensdict['t_s'], simparams['lagtype']) simparams['SUMRULE'] = sumrule # minrg = -sumrule[0].min() # maxrg = len(rng_gates)-sumrule[1].max()-1 # n_pulse = len(pulse) # arback = -sp.floor(sp.arange(0, n_pulse/2.0, 0.5)).astype(int) # arfor = sp.ceil(sp.arange(0, n_pulse/2.0, 0.5)).astype(int) # rnglist = [sp.mean(rng_gates[irng+arback]**2+ rng_gates[irng+arfor]**2) # for irng in range(minrg, maxrg)] if ('startfile' in simparams.keys() and len(simparams['startfile']) > 0 ) and simparams['Pulsetype'].lower() !=' barker': relpath = Path(simparams['startfile']) if not relpath.is_absolute(): # Some times the ini files may split the strings of the start file # because of white space in file names. if type(simparams['startfile']) is list: startfile = " ".join(simparams['startfile']) else: startfile = simparams['startfile'] fullfilepath = curpath.joinpath(startfile) simparams['startfile'] = str(fullfilepath) else: fullfilepath = simparams['startfile'] stext = Path(fullfilepath).is_file() if not stext: warnings.warn('The given start file does not exist', UserWarning) elif simparams['Pulsetype'].lower() != 'barker': warnings.warn('No start file given', UserWarning) return(sensdict, simparams)