Debris Cover Tools

West Fork Robertson Glacier, Alaska Range.

Development of Debris Cover Tools (DCT) started in May 2018. The intent was an open-source suite of Python based tools that any climate modeler could easily run to add the effects of debris cover to their work in a modular form. At the time, and still today, many global glacier models neglect debris cover entirely.

While it’s not a top development priority for me, all of the small scripts I write will eventually be packaged into a cohesive DCT Jupyter notebook for either community use or just to sit and accumulate dust on github. Several of the tools I have developed have been published in peer-reviewed articles and they are linked below.

While it’s annoying and not open-source, I use the package arcpy (I pay $100USD/year to have a licence). Being something of an indusrty standard makes it slightly okay, I think, but I would one day like for these tool to run exclusivly with open-source Python packages.

The preamble to DCT version 1 – defining source data and variables:

## Debris Cover Tools 
## Version 1.0
##
## By Sam Herreid (samherreid@gmail.com)
## 
## A suite of automated tools to:
##      Map supraglacial debris cover (DebisMap.py)
##      Locate ice cliffs (DebrisAreaSegmentation.py, IceCliffLocation.py)
##      Locate supraglacial lakes/ponds [in prep., not in v1.0]
##      Measure changes in debris cover [in prep., not in v1.0]
##      Calculate debris map and area change omission and commission errors [in prep., not in v1.0]
##      Identify glacier flow instabilities (optional: in near real time) [in prep., not in v1.0]
##      
## For use of Debris Cover Tools v1.0, required input data are:
##      Glacier outline(s) (.shp)
##      Landsat TM, ETM+, or OLI images (.tif, do not change default file names)
##      Digital Elevation Model roughly coincident in time with Landsat imagery (.tif, aprox. 5m resolution)
##
## Required software are:
##      ArcGIS/arcpy (advanced licence, proprietary)
##      Python (2.x to be compatible with arcpy)
##      numpy (Python package)
##      scipy (Python package)
##      matplotlib (Python package)
##
## Please cite the following article(s) if using this code to
## 
## map ice cliffs:
##      Herreid, Sam, and Francesca Pellicciotti. "Automated detection of ice cliffs within supraglacial debris cover." The Cryosphere, 2018.
##
## derive debris area changes [code in prep., not in v1.0]:
##      Herreid, Sam, et al. "Satellite observations show no net change in the percentage of supraglacial debris-covered area in northern Pakistan from 1977 to 2014." Journal of Glaciology 61.227 (2015): 524-536.
##
## detect glacier flow instabilities [code in prep., not in v1.0]:
##      Herreid, Sam, and Martin Truffer. "Automated detection of unstable glacier flow and a spectrum of speedup behavior in the Alaska Range." Journal of Geophysical Research: Earth Surface 121.1 (2016): 64-81.
##
##--------------------------------------------------------------------------------------------------------------------------------
##
## To use Debris Cover Tools, follow the directions in comments and boxes like this:
###-------------------------------------------###
###                Directions                 ###
###-------------------------------------------###            

##--------------------------------------------------------------------------------------------------------------------------------

###-------------------------------------------###
###             What do you want?             ###
###-------------------------------------------###

Want_DebrisMap = 'True'                  # DEFINE: workspace, data_dir, shp_dir, mask_dir (mask_dir currently does nothing in v1.0) 
Want_CloudRemoval = 'False'              # in prep., not in v1.0, 'True' will not currently work 
Want_SupraglacialPondLocation = 'False'  # in prep., not in v1.0, 'True' will not currently work 
Want_IceCliff = 'True'                   # DEFINE: workspace, data_dir, shp_dir and dem (that is relatively coincident in time with Landsat (ETM+ or OLI) image). if Want_DebrisMap = 'False', also define: debarea;    
Want_dDebris = 'False'                   # in prep., not in v1.0, 'True' will not currently work
Want_LocateUnstableFlow = 'False'        # in prep., not in v1.0, 'True' will not currently work

###-------------------------------------------###
###          Define directories here:         ###
###-------------------------------------------###

# Example format for directories: "C:\\Users\\Sam\\Desktop\\CanwellGlacier\\" or r"C:\Users\Sam\Desktop\CanwellGlacier\" or "C:/Users/Sam/Desktop/CanwellGlacier/"
# Replace the example paths below to your local data. Note "\\" at end.

workspace = "C:\\Users\\Sam\\Desktop\\CanwellGlacier\\" # Existing location where new files will be created

data_dir = "C:\\Users\\Sam\\Desktop\\Landsat\\" # Location of uncompressed landsat images. Do not change NASA file names.

shp_dir  = "C:\\Users\\Sam\\Desktop\\Glacier\\" # Location of glacier outlines as shapefiles

mask_dir = "" # Location of cloud and error masks [in prep., not in v1.0]

dem = "C:\\Users\\Sam\\Desktop\\dem\\CanwellGlacier_072016.tif" # Location of DEM. NOTICE: rename the .tif file such that the ending is _mmyyyy.tif where mmyyyy = the month and year of DEM data aquisition

debarea = "" # Location of debris map .shp, only requred if Want_DebrisMap = 'False'

###-------------------------------------------###
###         Define parameters here:           ###
###-------------------------------------------###

##----------------------------------------------
## DebrisMap:
##----------------------------------------------

A_remove = 2700             # Area (m2) to be filtered out of result
A_fill = 2700               # Area (m2) to be filled and considered debris cover
landsat = 8                 # Number of data acquiring Landsat satellite number. Accepted valueds are 5,7 or 8

                            # Threshold values from Herreid et al., 2015. Go into DebisMap.py to change these values 
                            # File name convention: (glacier name)_---y(year)---d(day of year)_---t(integer threshold *100)----r(area removed in m2)----f(area filled in m2)
                            # e.g.: CanwellGlacier_2015y249d_145t2700r2700f

##----------------------------------------------
## DebrisAreaSegmentation:
##----------------------------------------------

L_t = 1500                  # Edge length (meters) of approximate square area for which cliffs will be solved for. This might be necessary due to memory limitations in ArcGIS
n_c = 1                     # Coefficient to L_t (fishnetRes) that will look for tiles to merge area with if none share a boundary

##----------------------------------------------
## IceCliffLocation:
##----------------------------------------------

skinny = 'false'            # If 'true' the ice cliff end extension portion of the method is skipped to speed up computation time
pixel = 'auto'              # If 'auto': working and final resolution is set to DEM resolution. If not 'auto' define an integer spatial resolution (m) outside of quotes
n_iterations = 36           # Number of iterations; fewer for faster computation 
L_e = 10                    # m on ice cliff ends 
alpha = 2                   # Centerline buffer distance (n_pixels*root2 over 2) 
beta_e = 3                  # Degrees by which beta*_i is reduced to define {A_e}_i (see Herreid and Pellicciotti, 2018)
A_min = 10                  # Minimum ice cliff area threshold in n pixels 
phi = 0.5                   # Ice cliff probability, p(x=ice cliff given surface slope and omega), not affirmed by the code will be multiplied (reduced) by this factor (omega defined in Herreid and Pellicciotti, 2018)
gamma = 0.0001              # Tolerance to asymptote, defines line used to find optimized value
                            # File name convention: mmyyyy(demDate)_beta_e-(beta_e)_alpha--(10*alpha)_lineExt--(L_e)m_minPixs--(A_min)_res-(pixel)m
                            # e.g.: 072016_beta_e3_alpha20_lineExt10m_minPixs10_res5m
Sam Herreid
Sam Herreid
glaciologist, runner, musician, writer

My research interests include rock debris on glaciers, advancing regional to global scale glacier modeling and restructuring the financing of climate science.