def __init__(self, trace, data, dataquality): """ The init function requires a ObsPy Trace object which will be used to fill self.mstg. """ self.mst = clibmseed.mst_init(None) # Figure out the datatypes. sampletype = SAMPLETYPE[data.dtype.type] # Set the header values. self.mst.contents.network = trace.stats.network self.mst.contents.station = trace.stats.station self.mst.contents.location = trace.stats.location self.mst.contents.channel = trace.stats.channel self.mst.contents.dataquality = dataquality self.mst.contents.type = "\x00" self.mst.contents.starttime = util._convertDatetimeToMSTime(trace.stats.starttime) self.mst.contents.endtime = util._convertDatetimeToMSTime(trace.stats.endtime) self.mst.contents.samprate = trace.stats.sampling_rate self.mst.contents.samplecnt = trace.stats.npts self.mst.contents.numsamples = trace.stats.npts self.mst.contents.sampletype = sampletype # libmseed expects data in the native byteorder. if data.dtype.byteorder != "=": data = data.byteswap() # Copy the data. The copy appears to be necessary so that Python's # garbage collection does not interfere it. bytecount = data.itemsize * data.size self.mst.contents.datasamples = clibmseed.allocate_bytes(bytecount) C.memmove(self.mst.contents.datasamples, data.ctypes.get_data(), bytecount)
def __init__(self, trace, data, dataquality): """ The init function requires a ObsPy Trace object which will be used to fill self.mstg. """ # Initialize MSTraceGroup mstg = clibmseed.mst_initgroup(None) self.mstg = mstg # Set numtraces. mstg.contents.numtraces = 1 # Initialize MSTrace object and connect with group mstg.contents.traces = clibmseed.mst_init(None) chain = mstg.contents.traces # Figure out the datatypes. sampletype = SAMPLETYPE[data.dtype.type] c_dtype = DATATYPES[sampletype] # Set the header values. chain.contents.network = trace.stats.network chain.contents.station = trace.stats.station chain.contents.location = trace.stats.location chain.contents.channel = trace.stats.channel chain.contents.dataquality = dataquality chain.contents.type = '\x00' chain.contents.starttime = \ util._convertDatetimeToMSTime(trace.stats.starttime) chain.contents.endtime = \ util._convertDatetimeToMSTime(trace.stats.endtime) chain.contents.samprate = trace.stats.sampling_rate chain.contents.samplecnt = trace.stats.npts chain.contents.numsamples = trace.stats.npts chain.contents.sampletype = sampletype # Create a single datapoint and resize its memory to be able to # hold all datapoints. tempdatpoint = c_dtype() datasize = SAMPLESIZES[sampletype] * trace.stats.npts # XXX: Ugly workaround for traces with less than 17 data points if datasize < 17: datasize = 17 C.resize(tempdatpoint, datasize) # The datapoints in the MSTG structure are a pointer to the memory # area reserved for tempdatpoint. chain.contents.datasamples = C.cast(C.pointer(tempdatpoint), C.c_void_p) # Swap if wrong byte order because libmseed expects native byteorder. if data.dtype.byteorder != "=": data = data.byteswap() # Pointer to the NumPy data buffer. datptr = data.ctypes.get_data() # Manually move the contents of the NumPy data buffer to the # address of the previously created memory area. C.memmove(chain.contents.datasamples, datptr, datasize)
def __init__(self, trace, data, dataquality): """ The init function requires a ObsPy Trace object which will be used to fill self.mstg. """ self.mst = clibmseed.mst_init(None) # Figure out the datatypes. sampletype = SAMPLETYPE[data.dtype.type] # Set the header values. self.mst.contents.network = trace.stats.network self.mst.contents.station = trace.stats.station self.mst.contents.location = trace.stats.location self.mst.contents.channel = trace.stats.channel self.mst.contents.dataquality = dataquality self.mst.contents.type = '\x00' self.mst.contents.starttime = \ util._convertDatetimeToMSTime(trace.stats.starttime) self.mst.contents.endtime = \ util._convertDatetimeToMSTime(trace.stats.endtime) self.mst.contents.samprate = trace.stats.sampling_rate self.mst.contents.samplecnt = trace.stats.npts self.mst.contents.numsamples = trace.stats.npts self.mst.contents.sampletype = sampletype # libmseed expects data in the native byteorder. if data.dtype.byteorder != "=": data = data.byteswap() # Copy the data. The copy appears to be necessary so that Python's # garbage collection does not interfere it. bytecount = data.itemsize * data.size self.mst.contents.datasamples = clibmseed.allocate_bytes(bytecount) C.memmove(self.mst.contents.datasamples, data.ctypes.get_data(), bytecount)