salvus.modules.near_surface.processing.point_to_line_source_conversion
Point to line source conversion in Salvus.
Functions
convert_point_to_line_source()
convert_point_to_line_source()def convert_point_to_line_source(
st: obspy.core.stream.Stream,
source_coordinates: Union[numpy.ndarray, List[float]],
receiver_coordinates: Union[numpy.ndarray, List[float]],
transform_type: str,
velocity_m_s: float,
distance_type: str = "offset",
hybrid_transformation_transition_zone: Optional[Sequence[float]] = None,
) -> obspy.core.stream.Stream:
...Convert data from a point source to a line source.
This is necessary when using 3-D observed data in 2-D inversions.
This function implements some of the algorithms described in
Forbriger et al. (2014), Line-source simulation for shallow-seismic data. Part 1: theoretical background https://doi.org/10.1093/gji/ggu199
The algorithms are described in section 5 of the paper and we largely follow the nomenclature established there. The paper, along with Part 2, furthermore explains the applicability and limitations of the approach taken here, so please have a look.
All convolutions in this function are performed in the frequency domain.
Transformation types:
single_velocity: Assumes a homogeneous full space. Implements the approximation of Forbriger et al. (2014) equation 52. Technically only works in homogeneous full space models but works decently well for wavefields containing many different types of waves.single_velocity_exact: Same assingle_velocitybut uses the exact formulation. It is a bit more accurate in the near-field but also a bit slower. See Forbringer et al. (2014) equation 31 for details.direct_wave: Uses the source-receiver distance as a proxy for the travel time. Useful for shallow seismic data including surface waves. See Forbringer et al. (2014), section 5.2, for details.reflected_wave: Estimates the travelled distance via the given velocity and the actual travel time. Useful for reflected waves. See Forbringer et al. (2014), section 5.1, for details.hybrid: Use thesingle_velocitytransformation up close and thedirect_waveone further away. Interpolate between both in a transition zone. See Forbringer et al. (2014), section 5.3 for more details on the reasoning behind this.
Parameters
stobspy.core.stream.Stream — Waveform data. All traces must have exactly the same samples and are interpreted as different components of a single receiver.source_coordinatesUnion[numpy.ndarray, List[float]] — 2-D source coordinates. The coordinates are assumed to be already projected onto a 2-D plane.receiver_coordinatesUnion[numpy.ndarray, List[float]] — 2-D receiver coordinates. The coordinates are assumed to be already projected onto a 2-D plane.transform_typestr — Which transform type to use. See the docstring for details.velocity_m_sfloat — Assumed velocity of the medium in meter per second.distance_typestr — How the distance between source and receiver is computed. Can be either"offset"or"full"."offset"will ignore the y coordinates, whereas"full"will compute the full 2-D distance between the two points.hybrid_transformation_transition_zoneOptional[Sequence[float]] — The transition zone for thehybridtransformation type. Must only be given when using it. Must be a tuple of two numbers, both denoting two distances in meters. For a source-receiver distance/offset of less than the first number, thesingle_velocitytransform will be used. For a larger distance/offset thedirect_wavetransform will be used. It will linearly interpolate between both in the transition zone.
Returns obspy.core.stream.Stream