def write_subset(self,data,mnemonics,rep=False,seq=False,events=False,end=False): """ write data to message subset using the specified mnemonics (a 'mnemonic' is simply a descriptive, alphanumeric name for a data value, like a key in a python dictionary). The mnemonics string may contain multiple space delimited mnemonics (e.g. `mnemonics='MNEMONIC1 MNEMONIC2 MNEMONIC3'`). By default, the mnemonics are assumed to be part of a delayed replication sequence, or have no replication at all, and `ufbint` is used to write the data. if `rep = True`, `ufbrep` is used to write data represented a regular replication sequence. See the comments in `src/ufbrep.f` for more details. Used for radiance data. if `seq=True`, `ufbseq` is used to write data represented by a sequence mnemonic. Used for gps data. if `events=True`, `ufbevn` is used to write prepbufr "events" (a 3-d data array is required) Only one of seq, rep and events can be True. If `end=True`, the message subset is closed and written to the bufr file (default `False`). """ # make a fortran contiguous copy of input data. if len(data.shape) in [2,3]: dataf = np.empty(data.shape, np.float, order='F') dataf[:] = data[:] elif len(data.shape) == 1: # make 1d array into 2d array with 1 level dataf = np.empty((data.shape[0],1), np.float, order='F') dataf[:,0] = data[:] else: msg = 'data in write_subset must be 1,2 or 3d' raise ValueError(msg) if np.array([rep,seq,events]).sum() > 1: raise ValueError('only one of rep, seq and events cannot be True') if seq: levs = _bufrlib.ufbseq(self.lunit,dataf,mnemonics,dataf.shape[0],\ dataf.shape[1]) elif rep: levs = _bufrlib.ufbrep(self.lunit,dataf,mnemonics,dataf.shape[0],\ dataf.shape[1]) elif events: levs = _bufrlib.ufbevn(self.lunit,dataf,mnemonics,dataf.shape[0],\ dataf.shape[1],dataf.shape[2]) else: levs = _bufrlib.ufbint(self.lunit,dataf,mnemonics,dataf.shape[0],\ dataf.shape[1]) # end subset if desired. if end: _bufrlib.writsb(self.lunit)
def copy_subset(self, bufrin): """ copy the currently loaded subset from the specified bufr file object and write to the current bufr message""" _bufrlib.ufbcpy(bufrin.lunit, self.lunit) _bufrlib.writsb(self.lunit)
def copy_subset(self,bufrin): """ copy the currently loaded subset from the specified bufr file object and write to the current grib message""" _bufrlib.ufbcpy(bufrin.lunit, self.lunit) _bufrlib.writsb(self.lunit)