def get_waveforms(self, network, station, location=None, channel=None, starttime=None, endtime=None, apply_filter=None, get_paz=False, get_coordinates=False, metadata_timecheck=True, **kwargs): """ Gets a ObsPy Stream object. :type network: str :param network: Network code, e.g. ``'BW'``. :type station: str :param station: Station code, e.g. ``'MANZ'``. :type location: str :param location: Location code, e.g. ``'00'``. :type channel: str :param channel: Channel code, supporting wildcard for component, e.g. ``'EHE'`` or ``'EH*'``. :type starttime: :class:`~obspy.core.utcdatetime.UTCDateTime` :param starttime: Start date and time. :type endtime: :class:`~obspy.core.utcdatetime.UTCDateTime` :param endtime: End date and time. :type apply_filter: bool, optional :param apply_filter: Apply filter (default is ``False``). :type get_paz: bool, optional :param get_paz: Fetch PAZ information and append to :class:`~obspy.core.trace.Stats` of all fetched traces. This considerably slows down the request (default is ``False``). :type get_coordinates: bool, optional :param get_coordinates: Fetch coordinate information and append to :class:`~obspy.core.trace.Stats` of all fetched traces. This considerably slows down the request (default is ``False``). :type metadata_timecheck: bool, optional :param metadata_timecheck: For ``get_paz`` and ``get_coordinates`` check if metadata information is changing from start to end time. Raises an Exception if this is the case. This can be deactivated to save time. :rtype: :class:`~obspy.core.stream.Stream` :return: A ObsPy Stream object. """ # NOTHING goes ABOVE this line! # append all args to kwargs, thus having everything in one dictionary for key, value in locals().items(): if key not in ["self", "kwargs"]: kwargs[key] = value # allow time strings in arguments for time_ in ["starttime", "endtime"]: if isinstance(kwargs[time_], (str, native_str)): kwargs[time_] = UTCDateTime(kwargs[time_]) trim_start = kwargs['starttime'] trim_end = kwargs['endtime'] # we expand the requested time span on both ends by two samples in # order to be able to make use of the nearest_sample option of # stream.trim(). (see trim() and tickets #95 and #105) # only possible if a channel is specified otherwise delta = 0 delta = 2 * guess_delta(kwargs['channel']) kwargs['starttime'] = trim_start - delta kwargs['endtime'] = trim_end + delta # server side obspy < 0.11 try: url = '/seismology/waveform/getWaveform' data = self.client._fetch(url, **kwargs) # server side obspy >= 0.11 except: url = '/seismology/waveform/get_waveforms' data = self.client._fetch(url, **kwargs) if not data: raise Exception("No waveform data available") # unpickle stream = _unpickle(data) if len(stream) == 0: raise Exception("No waveform data available") stream._cleanup() # trimming needs to be done only if we extend the datetime above if channel: stream.trim(trim_start, trim_end) if get_paz: for tr in stream: paz = self.client.station.get_paz(seed_id=tr.id, datetime=starttime) if metadata_timecheck: paz_check = self.client.station.get_paz(seed_id=tr.id, datetime=endtime) if paz != paz_check: msg = "PAZ information changing from start time to" + \ " end time." raise Exception(msg) tr.stats['paz'] = paz if get_coordinates: coords = self.client.station.get_coordinates(network=network, station=station, location=location, datetime=starttime) if metadata_timecheck: coords_check = self.client.station.get_coordinates( network=network, station=station, location=location, datetime=endtime) if coords != coords_check: msg = "Coordinate information changing from start " + \ "time to end time." raise Exception(msg) for tr in stream: tr.stats['coordinates'] = coords.copy() return stream
def get_waveforms(self, network, station, location=None, channel=None, starttime=None, endtime=None, apply_filter=None, getPAZ=False, getCoordinates=False, metadata_timecheck=True, **kwargs): """ Gets a ObsPy Stream object. :type network: str :param network: Network code, e.g. ``'BW'``. :type station: str :param station: Station code, e.g. ``'MANZ'``. :type location: str :param location: Location code, e.g. ``'00'``. :type channel: str :param channel: Channel code, supporting wildcard for component, e.g. ``'EHE'`` or ``'EH*'``. :type starttime: :class:`~obspy.core.utcdatetime.UTCDateTime` :param starttime: Start date and time. :type endtime: :class:`~obspy.core.utcdatetime.UTCDateTime` :param endtime: End date and time. :type apply_filter: bool, optional :param apply_filter: Apply filter (default is ``False``). :type getPAZ: bool, optional :param getPAZ: Fetch PAZ information and append to :class:`~obspy.core.trace.Stats` of all fetched traces. This considerably slows down the request (default is ``False``). :type getCoordinates: bool, optional :param getCoordinates: Fetch coordinate information and append to :class:`~obspy.core.trace.Stats` of all fetched traces. This considerably slows down the request (default is ``False``). :type metadata_timecheck: bool, optional :param metadata_timecheck: For ``get_paz`` and ``get_coordinates`` check if metadata information is changing from start to end time. Raises an Exception if this is the case. This can be deactivated to save time. :rtype: :class:`~obspy.core.stream.Stream` :return: A ObsPy Stream object. """ # NOTHING goes ABOVE this line! # append all args to kwargs, thus having everything in one dictionary for key, value in locals().items(): if key not in ["self", "kwargs"]: kwargs[key] = value # allow time strings in arguments for time_ in ["starttime", "endtime"]: if isinstance(kwargs[time_], (str, native_str)): kwargs[time_] = UTCDateTime(kwargs[time_]) trim_start = kwargs['starttime'] trim_end = kwargs['endtime'] # we expand the requested time span on both ends by two samples in # order to be able to make use of the nearest_sample option of # stream.trim(). (see trim() and tickets #95 and #105) # only possible if a channel is specified otherwise delta = 0 delta = 2 * guess_delta(kwargs['channel']) kwargs['starttime'] = trim_start - delta kwargs['endtime'] = trim_end + delta # server side obspy < 0.11 try: url = '/seismology/waveform/getWaveform' data = self.client._fetch(url, **kwargs) # server side obspy >= 0.11 except: url = '/seismology/waveform/get_waveforms' data = self.client._fetch(url, **kwargs) if not data: raise Exception("No waveform data available") # unpickle stream = _unpickle(data) if len(stream) == 0: raise Exception("No waveform data available") stream._cleanup() # trimming needs to be done only if we extend the datetime above if channel: stream.trim(trim_start, trim_end) if getPAZ: for tr in stream: paz = self.client.station.get_paz(seed_id=tr.id, datetime=starttime) if metadata_timecheck: paz_check = self.client.station.get_paz(seed_id=tr.id, datetime=endtime) if paz != paz_check: msg = "PAZ information changing from start time to" + \ " end time." raise Exception(msg) tr.stats['paz'] = paz if getCoordinates: coords = self.client.station.get_coordinates( network=network, station=station, location=location, datetime=starttime) if metadata_timecheck: coords_check = self.client.station.get_coordinates( network=network, station=station, location=location, datetime=endtime) if coords != coords_check: msg = "Coordinate information changing from start " + \ "time to end time." raise Exception(msg) for tr in stream: tr.stats['coordinates'] = coords.copy() return stream