Reads HEC-DSS files (V6 and V7) for boundary condition extraction using RasDss class. Handles JVM configuration, HEC Monolith download, catalog reading, and time series extraction...
Primary Source Navigator -- Use this skill as a concise entry point to DSS file operations. Read authoritative sources for complete documentation.
from ras_commander import init_ras_project, RasDss
# Initialize project
ras = init_ras_project("path/to/project", "7.0")
# Read DSS catalog
catalog = RasDss.get_catalog("file.dss")
# Extract single time series
df = RasDss.read_timeseries("file.dss", pathname)
# Extract ALL boundary DSS data (recommended)
enhanced = RasDss.extract_boundary_timeseries(
ras.boundaries_df,
ras_object=ras
)
Location: ras_commander/dss/AGENTS.md
Read this for:
df.attrs)Why authoritative: Written by maintainers, updated with code changes, read by developers working on the module.
Location: examples/310_dss_boundary_extraction.ipynb
Read this for:
extract_boundary_timeseries()Why this is authoritative: Tested with real HEC-RAS projects, serves as functional test, maintained alongside library.
Location: ras_commander/dss/RasDss.py
Read this for:
Why this is authoritative: Source code is always correct, docstrings updated with each release.
/A/B/C/D/E/F/
Example:
//BALD EAGLE 40/FLOW/01JAN1999/15MIN/RUN:PMF-EVENT/
See ras_commander/dss/AGENTS.md for complete details.
Three-level lazy loading:
Package Import: Lightweight, no Java loaded
from ras_commander import RasDss # Fast, no JVM
First Method Call: Configures JVM, downloads Monolith (~20 MB, one-time)
catalog = RasDss.get_catalog("file.dss") # Triggers setup
Subsequent Calls: Uses cached JVM and libraries
df = RasDss.read_timeseries(...) # Fast, reuses JVM
Required (must install manually):
pip install pyjnius
Required (system):
Auto-downloaded:
~/.ras-commander/dss/See ras_commander/dss/AGENTS.md for complete API reference table.
get_catalog(dss_file) - List all paths in DSS file
List[str] of DSS pathnamesread_timeseries(dss_file, pathname) - Extract single time series
DataFrame with DatetimeIndex and 'value' columndf.attrs (pathname, units, type, interval, dss_file)extract_boundary_timeseries(boundaries_df, ras_object) - Extract ALL DSS boundaries
get_info(dss_file) - Quick file summary
Dict with filename, size, total_paths, sample_pathsread_multiple_timeseries(dss_file, pathnames) - Batch extract
Dict[str, DataFrame] mapping pathname to data# List available data
catalog = RasDss.get_catalog("file.dss")
flow_paths = [p for p in catalog if '/FLOW/' in p]
# Extract specific path
df = RasDss.read_timeseries("file.dss", flow_paths[0])
print(f"Units: {df.attrs['units']}")
print(f"Points: {len(df)}")
from ras_commander import init_ras_project, RasDss
# Initialize project
ras = init_ras_project("project_path", "7.0")
# Extract all DSS boundary data
enhanced = RasDss.extract_boundary_timeseries(
ras.boundaries_df,
ras_object=ras
)
# Access extracted data
for idx, row in enhanced.iterrows():
if row['Use DSS'] and row['dss_timeseries'] is not None:
df = row['dss_timeseries']
print(f"{row['bc_type']}: {len(df)} points")
import matplotlib.pyplot as plt
# Get DSS boundary
dss_boundaries = enhanced[enhanced['Use DSS'] == True]
first_dss = dss_boundaries.iloc[0]
# Plot
df = first_dss['dss_timeseries']
df['value'].plot(figsize=(12, 4))
plt.title(f"{first_dss['bc_type']} - {first_dss['river_reach_name']}")
plt.ylabel(f"Flow ({df.attrs['units']})")
plt.grid(True)
plt.show()
See ras_commander/dss/AGENTS.md for complete troubleshooting guide.
1. pyjnius Not Installed
ImportError: pyjnius is required for DSS file operations.
Fix: pip install pyjnius
2. Java Not Found
RuntimeError: JAVA_HOME not set and Java not found automatically.
Fix: Install Java JRE/JDK 8+ and set JAVA_HOME
3. JVM Already Started
RuntimeError: JVM configuration already done.
Fix: Restart Python process or notebook kernel
4. DSS File Not Found
FileNotFoundError: DSS file not found: ...
Fix: Use absolute paths or resolve relative to project directory
from pathlib import Path
try:
dss_file = Path("file.dss").resolve()
if not dss_file.exists():
raise FileNotFoundError(f"DSS file not found: {dss_file}")
catalog = RasDss.get_catalog(dss_file)
print(f"Success: {len(catalog)} paths")
except ImportError as e:
print(f"Missing dependency: {e}")
print("Install: pip install pyjnius")
except RuntimeError as e:
print(f"Java/JVM error: {e}")
print("Check JAVA_HOME and Java installation")
DO NOT read the reference/ or examples/ folders in this skill directory - they contain outdated duplicated content.
Always prefer primary sources:
ras_commander/dss/AGENTS.mdexamples/310_dss_boundary_extraction.ipynbras_commander/dss/RasDss.py docstringsextract_boundary_timeseries() handles all DSS datadf.attrsRules (follow these):
.claude/rules/hec-ras/dss-files.md -- DSS domain overview, pathname format, lazy loading.claude/rules/validation/validation-patterns.md -- Validation patterns for DSS pathnamesSkills (related workflows):
usgs_integrate_gauges -- Use when USGS gauge data feeds DSS boundarieshecras_compute_plans -- Use downstream after validating boundary conditionsprecip_analyze_aorc -- Use when working with precipitation DSS dataPrimary sources:
ras_commander/dss/AGENTS.md -- Complete DSS documentationexamples/310_dss_boundary_extraction.ipynb -- DSS extraction workflow