def get_metadata(self, file_path): self.__metadata_files = MseedUtil.get_dataless_files(self.__root_path) #self.__metadata_files = MseedUtil.get_xml_files(self.__root_path) mseed_stats = ObspyUtil.get_stats(file_path) metadata = self.check_metadata(self.__metadata_files, mseed_stats) return metadata
def __init__(self, data, **kwargs): """ Class to apply wavelet convolution to a mseed file. The bank of atoms is computed at the class initialisation. :param data: Either the mseed file path or an obspy Tracer. :keyword kwargs: :keyword wmin: Minimum number of cycles. Default = 6. :keyword wmax: Maximum number of cycles. Default = 6. :keyword tt: Period of the Morlet Wavelet. Default = 2. :keyword fmin: Minimum Central frequency (in Hz). Default = 2. :keyword fmax: Maximum Central frequency (in Hz). Default = 12. :keyword m: Parameter for Paul Wavelet. Default = 30. :keyword nf: Number of logarithmically spaced frequencies between fmin and fmax. Default = 20. :keyword use_wavelet: Default = Complex Morlet :keyword use_rfft: True if it should use rfft instead of fft. Default = True. :keyword decimate: True if it should try to decimate the trace. Default = False. The decimation factor is equal to q = 0.4*SR/fmax. For SR=200Hz and fmax=40Hz, q=2. This will downsize the sample rate to 100 Hz. :raise InvalidFile: If file is not a valid mseed. :example: >>> cw = ConvolveWavelet(data) >>> cw.setup_wavelet() >>> sc = cw.scalogram_in_dbs >>> cf = cw.cf_lowpass() """ if isinstance(data, Trace): self.stats = TracerStats.from_dict(data.stats) self.trace: Trace = data else: if not MseedUtil.is_valid_mseed(data): raise InvalidFile("The file: {} is not a valid mseed.".format(data)) self.trace: Trace = read(data)[0] self.stats = ObspyUtil.get_stats(data) self._wmin = float(kwargs.get("wmin", 6.)) self._wmax = float(kwargs.get("wmax", 6.)) self._tt = float(kwargs.get("tt", 2.)) self._fmin = float(kwargs.get("fmin", 2.)) self._fmax = float(kwargs.get("fmax", 12.)) self._nf = int(kwargs.get("nf", 20)) self._use_wavelet = kwargs.get("use_wavelet", "Complex Morlet") self._m = int(kwargs.get("m", 30)) self._use_rfft = kwargs.get("use_rfft", False) self._decimate = kwargs.get("decimate", False) self._validate_kwargs() # print(self.stats) self._data = None self._npts = 0 self._tf = None self._start_time = self.stats.StartTime self._end_time = self.stats.EndTime self._sample_rate = self.stats.Sampling_rate self._frex = None self._n_cycles = None self._wtime = None self._half_wave = None
def get_station_stats_by_mseed_file(self, file_path: str): mseed_stats = ObspyUtil.get_stats(file_path) return mseed_stats
def plot_egfs(self): if self.st: del self.st self.canvas.clear() ## self.nums_clicks = 0 all_traces = [] if self.sortCB.isChecked(): if self.comboBox_sort.currentText() == "Distance": self.files_path.sort(key=self.sort_by_distance_advance) elif self.comboBox_sort.currentText() == "Back Azimuth": self.files_path.sort(key=self.sort_by_baz_advance) self.set_pagination_files(self.files_path) files_at_page = self.get_files_at_page() ## if len(self.canvas.axes) != len(files_at_page): self.canvas.set_new_subplot(nrows=len(files_at_page), ncols=1) last_index = 0 min_starttime = [] max_endtime = [] parameters = self.parameters.getParameters() for index, file_path in enumerate(files_at_page): if os.path.basename(file_path) != ".DS_Store": sd = SeismogramDataAdvanced(file_path) tr = sd.get_waveform_advanced( parameters, self.inventory, filter_error_callback=self.filter_error_message, trace_number=index) print(tr.data) if len(tr) > 0: t = tr.times("matplotlib") s = tr.data self.canvas.plot_date(t, s, index, color="black", fmt='-', linewidth=0.5) if self.pagination.items_per_page >= 16: ax = self.canvas.get_axe(index) ax.spines["top"].set_visible(False) ax.spines["bottom"].set_visible(False) ax.tick_params(top=False) ax.tick_params(labeltop=False) if index != (self.pagination.items_per_page - 1): ax.tick_params(bottom=False) last_index = index st_stats = ObspyUtil.get_stats(file_path) if st_stats and self.sortCB.isChecked() == False: info = "{}.{}.{}".format(st_stats.Network, st_stats.Station, st_stats.Channel) self.canvas.set_plot_label(index, info) elif st_stats and self.sortCB.isChecked( ) and self.comboBox_sort.currentText() == "Distance": dist = self.sort_by_distance_advance(file_path) dist = "{:.1f}".format(dist / 1000.0) info = "{}.{}.{} Distance {} km".format( st_stats.Network, st_stats.Station, st_stats.Channel, str(dist)) self.canvas.set_plot_label(index, info) elif st_stats and self.sortCB.isChecked( ) and self.comboBox_sort.currentText() == "Back Azimuth": back = self.sort_by_baz_advance(file_path) back = "{:.1f}".format(back) info = "{}.{}.{} Back Azimuth {}".format( st_stats.Network, st_stats.Station, st_stats.Channel, str(back)) self.canvas.set_plot_label(index, info) try: min_starttime.append(min(t)) max_endtime.append(max(t)) except: print("Empty traces") all_traces.append(tr) self.st = Stream(traces=all_traces) try: if min_starttime and max_endtime is not None: auto_start = min(min_starttime) auto_end = max(max_endtime) self.auto_start = auto_start self.auto_end = auto_end ax = self.canvas.get_axe(last_index) ax.set_xlim(mdt.num2date(auto_start), mdt.num2date(auto_end)) formatter = mdt.DateFormatter('%y/%m/%d/%H:%M:%S.%f') ax.xaxis.set_major_formatter(formatter) self.canvas.set_xlabel(last_index, "Date") except: pass
def tracer_stats(self): return ObspyUtil.get_stats(self.file_selector.file_path)