varkeys = ['temperature', 'windDir', 'windSpeed', 'dewpoint', 'altimeter'] vardds = [k + 'DD' for k in varkeys] if args.verbose > 1: print('Subset variables') getvarkeys = varkeys + vardds + \ ['stationName', 'timeObs', 'timeNominal', 'elevation', 'latitude', 'longitude'] if args.verbose > 1: print('Slicing files') p2p = Pseudo2NetCDF(verbose=0) outfile = PseudoNetCDFFile() p2p.addDimensions(ncff, outfile) outfile.createDimension('recNum', len(found_point_ids)) p2p.addGlobalProperties(ncff, outfile) for vark in getvarkeys: p2p.addVariable(ncff, outfile, vark, data=False) for vark in getvarkeys: invar = ncff.variables[vark] outvar = outfile.variables[vark] recid = list(invar.dimensions).index('recNum') outvar[:] = invar[:].take(found_point_ids, recid) if args.humidity: varkeys.append('specificHumidity') if args.verbose > 1:
def mrgidx(ipr_paths, irr_paths, idx): if isinstance(irr_paths,str): irrf = NetCDFFile(irr_paths) else: irrf = file_master([NetCDFFile(irr_path) for irr_path in irr_paths]) if isinstance(ipr_paths,str): iprf = NetCDFFile(ipr_paths) else: iprf = file_master([NetCDFFile(ipr_path) for ipr_path in ipr_paths]) # Process and Reaction keys should exclude TFLAG pr_keys = [pr for pr in iprf.variables.keys() if pr not in ('TFLAG',)] rr_keys = [rr for rr in irrf.variables.keys() if rr not in ('TFLAG',)] # Attempt to order reactions by number # this is not necessary, but is nice and clean try: rr_keys = [(int(rr.split('_')[1]), rr) for rr in rr_keys] rr_keys.sort() rr_keys = [rr[1] for rr in rr_keys] except: warn("Cannot sort reaction keys") # Processes are predicated by a delimiter prcs = list(set(['_'.join(pr.split('_')[:-1]) for pr in pr_keys])) # Species are preceded by a delimiter spcs = list(set(['_'.join(pr.split('_')[-1:]) for pr in pr_keys])) # Select a dummy variable for extracting properties pr_tmp = iprf.variables[pr_keys[0]] # Create an empty file and decorate # it as necessary outf = PseudoNetCDFFile() outf.Species = "".join([spc.ljust(16) for spc in spcs]) outf.Process = "".join([prc.ljust(16) for prc in prcs]) outf.Reactions = "".join([rr_key.ljust(16) for rr_key in rr_keys]) outf.createDimension("PROCESS", len(prcs)) outf.createDimension("SPECIES", len(spcs)) outf.createDimension("RXN", len(rr_keys)) outf.createDimension("TSTEP", pr_tmp[:,0,0,0].shape[0]) outf.createDimension("TSTEP_STAG", len(outf.dimensions["TSTEP"])+1) outf.createDimension("ROW", 1) outf.createDimension("LAY", 1) outf.createDimension("COL", 1) outf.createDimension("VAR", 3) outf.createDimension("DATE-TIME", 2) tflag = outf.createVariable("TFLAG", "i", ('TSTEP', 'VAR', 'DATE-TIME')) tflag.__dict__.update(dict(units = "<YYYYJJJ,HHDDMM>", var_desc = 'TFLAG'.ljust(16), long_name = 'TFLAG'.ljust(16))) tflag[:,:,:] = iprf.variables['TFLAG'][:][:,[0],:] shape = outf.createVariable("SHAPE", "i", ("TSTEP", "LAY", "ROW", "COL")) shape.__dict__.update(dict(units = "ON/OFF", var_desc = "SHAPE".ljust(16), long_name = "SHAPE".ljust(16))) shape[:] = 1 irr = outf.createVariable("IRR", "f", ("TSTEP", "RXN")) irr.__dict__.update(dict(units = pr_tmp.units, var_desc = "IRR".ljust(16), long_name = "IRR".ljust(16))) ipr = outf.createVariable("IPR", "f", ("TSTEP", "SPECIES", "PROCESS")) irr.__dict__.update(dict(units = pr_tmp.units, var_desc = "IPR".ljust(16), long_name = "IPR".ljust(16))) for rr, var in zip(rr_keys,irr.swapaxes(0,1)): var[:] = irrf.variables[rr][:][idx] for prc, prcvar in zip(prcs,ipr.swapaxes(0,2)): for spc, spcvar in zip(spcs,prcvar): try: spcvar[:] = iprf.variables['_'.join([prc,spc])][:][idx] except KeyError as es: warn(str(es)) return outf
def mrgidx(ipr_paths, irr_paths, idx): if isinstance(irr_paths, str): irrf = NetCDFFile(irr_paths) else: irrf = file_master([NetCDFFile(irr_path) for irr_path in irr_paths]) if isinstance(ipr_paths, str): iprf = NetCDFFile(ipr_paths) else: iprf = file_master([NetCDFFile(ipr_path) for ipr_path in ipr_paths]) # Process and Reaction keys should exclude TFLAG pr_keys = [pr for pr in iprf.variables.keys() if pr not in ('TFLAG', )] rr_keys = [rr for rr in irrf.variables.keys() if rr not in ('TFLAG', )] # Attempt to order reactions by number # this is not necessary, but is nice and clean try: rr_keys = [(int(rr.split('_')[1]), rr) for rr in rr_keys] rr_keys.sort() rr_keys = [rr[1] for rr in rr_keys] except: warn("Cannot sort reaction keys") # Processes are predicated by a delimiter prcs = list(set(['_'.join(pr.split('_')[:-1]) for pr in pr_keys])) # Species are preceded by a delimiter spcs = list(set(['_'.join(pr.split('_')[-1:]) for pr in pr_keys])) # Select a dummy variable for extracting properties pr_tmp = iprf.variables[pr_keys[0]] # Create an empty file and decorate # it as necessary outf = PseudoNetCDFFile() outf.Species = "".join([spc.ljust(16) for spc in spcs]) outf.Process = "".join([prc.ljust(16) for prc in prcs]) outf.Reactions = "".join([rr_key.ljust(16) for rr_key in rr_keys]) outf.createDimension("PROCESS", len(prcs)) outf.createDimension("SPECIES", len(spcs)) outf.createDimension("RXN", len(rr_keys)) outf.createDimension("TSTEP", pr_tmp[:, 0, 0, 0].shape[0]) outf.createDimension("TSTEP_STAG", len(outf.dimensions["TSTEP"]) + 1) outf.createDimension("ROW", 1) outf.createDimension("LAY", 1) outf.createDimension("COL", 1) outf.createDimension("VAR", 3) outf.createDimension("DATE-TIME", 2) tflag = outf.createVariable("TFLAG", "i", ('TSTEP', 'VAR', 'DATE-TIME')) tflag.__dict__.update( dict(units="<YYYYJJJ,HHDDMM>", var_desc='TFLAG'.ljust(16), long_name='TFLAG'.ljust(16))) tflag[:, :, :] = iprf.variables['TFLAG'][:][:, [0], :] shape = outf.createVariable("SHAPE", "i", ("TSTEP", "LAY", "ROW", "COL")) shape.__dict__.update( dict(units="ON/OFF", var_desc="SHAPE".ljust(16), long_name="SHAPE".ljust(16))) shape[:] = 1 irr = outf.createVariable("IRR", "f", ("TSTEP", "RXN")) irr.__dict__.update( dict(units=pr_tmp.units, var_desc="IRR".ljust(16), long_name="IRR".ljust(16))) ipr = outf.createVariable("IPR", "f", ("TSTEP", "SPECIES", "PROCESS")) irr.__dict__.update( dict(units=pr_tmp.units, var_desc="IPR".ljust(16), long_name="IPR".ljust(16))) for rr, var in zip(rr_keys, irr.swapaxes(0, 1)): var[:] = irrf.variables[rr][:][idx] for prc, prcvar in zip(prcs, ipr.swapaxes(0, 2)): for spc, spcvar in zip(spcs, prcvar): try: spcvar[:] = iprf.variables['_'.join([prc, spc])][:][idx] except KeyError as es: warn(str(es)) return outf