landlab.utils.fault_facet_finder module#

This class is designed to provide functions to allow the automated identification of planar facet surfaces above fault traces.

Module is SLOW (e.g., minutes+ per full analysis of a “large” data set). It is only intended for model post-analysis or DEM analysis. Do not loop this class!! This is part of the NSF funded project investigating fault scarp degradation, Tucker, Hobley, McCoy.

cmp(a, b)[source]#
class find_facets(grid, elev_field='topographic__elevation', fault_azimuth=None)[source]#

Bases: object

Note that this class assumes the grid does not change during the model run. Changes to data stored in the grid should (?) update automatically.

If fault_azimuth is supplied, it should be -pi/2 < az <= pi/2 (i.e., we don’t consider fault dip, even if it’s known).

Note that this class assumes the grid does not change during the model run. Changes to data stored in the grid should (?) update automatically.

If fault_azimuth is supplied, it should be -pi/2 < az <= pi/2 (i.e., we don’t consider fault dip, even if it’s known).

__init__(grid, elev_field='topographic__elevation', fault_azimuth=None)[source]#

Note that this class assumes the grid does not change during the model run. Changes to data stored in the grid should (?) update automatically.

If fault_azimuth is supplied, it should be -pi/2 < az <= pi/2 (i.e., we don’t consider fault dip, even if it’s known).

analyse_fault_trace(fault_trace_node_ids)[source]#

This method takes the grid and an array listing the (contiguous) node ids of cells that contain a single fault segment trace of interest.

It sets and returns the azimuth of the fault trace, az, -pi/2 < az <= pi/2. (i.e., smallest angle between north and the trace).

define_aspect_node_subset(angle_tolerance=5.0)[source]#

This method sets and returns a list of all nodes in the landscape which have an aspect within 5 degrees of perpendicular to the fault trace.

It assumes self.az, the angle between north and the fault trace, has already been set, and also that self.slopes and self.aspect are also set. The returned boolean array is num_core_nodes long. angle_tolerance is the angle in degrees that the aspect must be within from the fault trace angle. NB: this version is too discriminating on the aspect restriction, presumably because we use only a single ft angle for what’s really a 2d trace. Need to work with local aspect.

define_aspect_node_subset_local(dist_tolerance=4.0, angle_tolerance=15.0, dip_dir='E')[source]#
define_steep_nodes(threshold_in_degrees=5.0)[source]#

This method sets and returns a list of all nodes in the landscape which are “steep” and could be part of a facet. The critical hillslope angle is set by threshold_in_degrees, and defaults to 5.

This assumes you have already called define_aspect_node_subset, in which self.slope is set. The returned boolean array is num_core_nodes long.

find_coherent_facet_patches(tolerance=3.0, threshold_num_px=12)[source]#

This method searches the (already determined) possible pixels for patches with coherent slope angles, within a tolerance (in degrees). A patch is only recorded if it consists of at least threshold_num_px.

The method records and returns:

  • a ragged array of lists, where each list is the pixels comprising each facet patch, and

  • a (num_patches, 2) array recording the mean slope and and its stdev for each patch.

find_slope_lines(tolerance=1.0)[source]#

This method attempts to find slope-consistent line profiles up facets, perpendicular to the fault.

Assumes you used define_aspect_node_subset_local().

fit_slopes_to_facet_lines(polynomial_degree=4, curvature_threshold=0.0004)[source]#

Fits (linear) lines of best fit to extracted profiles, already stored as class properties.

set_slopes_aspects()[source]#
show_possible_nodes()[source]#

Once the subsets by aspect and slope have been set, call this function to see both the whole elevation map, and the subset of nodes that will be searched.