Streams were calculated from the DEM. This was done partly because we were reluctant to digitize the hydrography layer from the quad sheets, and partly because the quad sheet blue lines do not include the entire stream network.
The contributing area to each cell was calculated through the ARC/INFO flowaccumulation command, which assumes that water from a cell all flows on the steepest one of eight possible paths to a neighboring cell. Slope of each cell was calculated through the ARC/INFO slope command, which fits a plane to a 3 × 3 neighborhood. Each cell for which the product of contributing area and slope squared exceded 45000 m² was classified as a stream cell. This left the calculated streams discontinuous in low-slope areas. However, flow was traced downhill to complete a continuous network. This algorithm was implemented in arc macro language, C, and java. The raster representation of streams was converted to lines. The lines received some editing to match the contour lines and to resemble the USGS 100K hydrography in the valley bottom.
The stream network was intersected with the 40-foot contour lines so that elevations could be calculated for the ends of short stream segments. Where mouth or source segments did not end at a contour line, the dangling segment was assigned the same slope as the next connected stream segment, checking that the elevation difference of the dangling segment did not execede 90% of the contour interval. Where tributary junctions appeared, it was assumed that slope was constant from the downstream end up the main stem (assumed to be the path with the highest Shreve order) to the upper contour. Then the junction elevation could be interpolated, and the slope of the other branch determined. Our algorithm accommodated complex branching topologies between contours or with dangling river segments.
The stream network was converted to a grid and back to lines that passed through the centers of every cell. (This was actually a tricky process, involving gridding at higher resolution, and routing the line based on a priority of 10-meter cells that more 2-meter cells, then pruning off extra cells.) Because our stream network had been generated from a grid in the first place, this step affected only those portions that were manually edited.
The flowdirection grid was tweaked so that water flows downstream, and so that water in cells beside the stream would be drawn into the stream. Likewise this step affected only manually edited portions of the streams. A new flowaccumulation grid was generated, in which flowaccumulation (contributing area) increases as one goes downstream.
The cells that represent stream junctions were dropped from consideration, and each river segment was assigned the mean of the contributing areas of the cells which it covered. A small number of short stream segments fell through the cracks, and were assigned the areas of the downstream segments. If this were not available, and upstream area was used.
All subsequent analysis was a straightforward function of slope and contributing area.