As part of my master’s thesis, I needed stream-reach scale fish presence information as part of estimating environmental benefit within an evolutionary algorithm. I designed a simple, species-specific downscaling algorithm that translated a species presence within a watershed, based on the PISCES database, into probabilities on stream segments based on the stream reach’s Strahler stream order, then implemented that in ArcGIS with arcpy.

One of the assumptions made was that the species involved were wide ranging, so if the PISCES database indicated they were in a given watershed, they should have at *least* been in the stream reach that exits that watershed. The algorithm examines the species’ entire range to determine the lowest stream order that exits the watersheds the species lives in, then scales the probabilities for species presence in all streams in the watershed based on that information. It runs separately for each species and produces a set of per-species, per stream-reach probabilities as an output. The information didn’t need to be accurate or verifiable for the modeling we were running, but did need to be reasonable, which is why we could use stream-order based methods.

See the repository for more documentation and code.