Project File Format (.hms)¶
Overview¶
The .hms file is the root configuration file for an HEC-HMS project. It serves as a registry that references all other project files and defines project-level settings. This file is created automatically when you create a new project in the HEC-HMS GUI and must be present for the project to open.
File Purpose¶
The project file serves several critical functions:
- File Registry: Lists all basin models, meteorologic models, control specifications, and simulation runs
- Version Tracking: Records the HMS version used to create/modify the project
- Project Metadata: Stores project name and basic configuration
- File Paths: References related files (.basin, .met, .control, .gage, .run)
Basic Structure¶
Project: ProjectName
Version: 4.9
BasinFile: ProjectName.basin
MetFile: ProjectName.met
ControlFile: ProjectName.control
GageFile: ProjectName.gage
Required Elements¶
- Project: Project name (must match)
- Version: HMS version number (e.g., "4.9", "4.13", "3.5")
- BasinFile: Path to basin model file (typically same as project name)
- MetFile: Path to meteorologic model file
- ControlFile: Path to control specifications file
- GageFile: Path to gage data file
Complete Example¶
Project: MyWatershed
Version: 4.13
Description: Watershed hydrologic model for flood analysis
BasinFile: MyWatershed.basin
MetFile: MyWatershed.met
ControlFile: MyWatershed.control
GageFile: MyWatershed.gage
RunFile: MyWatershed.run
Basin Model: Existing Conditions
Last Modified Date: 15 November 2024
Last Modified Time: 14:30
End:
Basin Model: Proposed Conditions
Last Modified Date: 20 November 2024
Last Modified Time: 09:15
Description: Updated with new development
End:
Meteorologic Model: 100-Year Storm
Last Modified Date: 10 November 2024
Last Modified Time: 11:00
End:
Control Specifications: 24-Hour
Last Modified Date: 05 November 2024
Last Modified Time: 08:45
End:
Simulation Run: Baseline
Basin Model: Existing Conditions
Meteorologic Model: 100-Year Storm
Control Specifications: 24-Hour
End:
File Components¶
Project Header¶
The header section defines basic project information:
- Project: Name must match directory name (best practice)
- Version: HMS version (affects file format compatibility)
- Description: Optional free-text description
File References¶
File references point to associated model files:
BasinFile: MyWatershed.basin
MetFile: MyWatershed.met
ControlFile: MyWatershed.control
GageFile: MyWatershed.gage
RunFile: MyWatershed.run
These paths are typically relative to the project directory. Absolute paths are possible but not recommended.
Component Registry¶
The project file maintains a registry of all models and configurations:
Basin Models¶
Basin Model: ModelName
Last Modified Date: 15 November 2024
Last Modified Time: 14:30
Description: Optional description
End:
Each basin model defined in the .basin file is registered here.
Meteorologic Models¶
Meteorologic Model: ModelName
Last Modified Date: 10 November 2024
Last Modified Time: 11:00
Description: Optional description
End:
Each meteorologic model from the .met file is listed.
Control Specifications¶
Control Specifications: ControlName
Last Modified Date: 05 November 2024
Last Modified Time: 08:45
Description: Optional description
End:
Each control specification from the .control file is registered.
Simulation Runs¶
Simulation Run: RunName
Basin Model: ExistingConditions
Meteorologic Model: 100-Year
Control Specifications: 24-Hour
Description: Optional run description
End:
Each simulation run connects a basin model, meteorologic model, and control specification.
Working with Project Files¶
Reading Project Information¶
Use the HmsPrj class to work with project files:
from hms_commander import init_hms_project, hms
# Initialize project
init_hms_project(r"C:\Projects\MyWatershed")
# Access project data
print(f"Project: {hms.project_name}")
print(f"Basin models: {hms.basin_df}")
print(f"Met models: {hms.met_df}")
print(f"Runs: {hms.run_df}")
Project Data Access¶
After initialization, the project data is available as DataFrames:
hms.basin_df- All basin modelshms.met_df- All meteorologic modelshms.control_df- All control specificationshms.run_df- All simulation runshms.gage_df- All gages
Updating Project Registry¶
When cloning models or creating new components, the project file must be updated:
from hms_commander import HmsBasin, HmsUtils
# Clone a basin model
HmsBasin.clone_basin(
template="existing.basin",
new_name="proposed.basin",
description="New development scenario"
)
# The project file is automatically updated to register the new basin
The HmsUtils.update_project_file() method handles registry updates:
from hms_commander import HmsUtils
# Manually update project registry
HmsUtils.update_project_file(
hms_file="MyWatershed.hms",
entry_type="Basin Model",
entry_name="Proposed Conditions"
)
For Basin, Met/Meteorology/Precipitation, and Control registrations, HMS
Commander writes canonical HMS component blocks rather than the older flat
* File: lines. The canonical blocks preserve GUI visibility for cloned
components and make project dataframes refresh consistently after an initialized
project is reloaded.
Basin: Proposed Conditions
Filename: Proposed Conditions.basin
Description:
Last Modified Date: 28 April 2026
Last Modified Time: 14:30
End:
Precipitation: Atlas14 Conditions
Filename: Atlas14 Conditions.met
Description:
Last Modified Date: 28 April 2026
Last Modified Time: 14:30
End:
Control: QAQC Window
FileName: QAQC Window.control
Description:
End:
The registration update is idempotent. If a project already contains the
canonical block for the component, or contains a legacy flat line such as
Basin File: Proposed Conditions.basin, HMS Commander treats the component as
registered and does not append a duplicate block.
Version Compatibility¶
HMS 4.x Projects¶
Modern HMS 4.x projects (4.4.1+) use this format:
Project: ProjectName
Version: 4.13
BasinFile: ProjectName.basin
MetFile: ProjectName.met
ControlFile: ProjectName.control
GageFile: ProjectName.gage
HMS 3.x Projects¶
Legacy HMS 3.x projects have a similar format but may use older version numbers:
Project: ProjectName
Version: 3.5
BasinFile: ProjectName.basin
MetFile: ProjectName.met
ControlFile: ProjectName.control
GageFile: ProjectName.gage
Version differences: - HMS 3.x uses 32-bit architecture - HMS 4.x uses 64-bit architecture - File format is largely compatible between versions
Common Patterns¶
Multi-Scenario Projects¶
Complex projects often have multiple basin models and meteorologic conditions:
Project: UrbanWatershed
Version: 4.13
Basin Model: Existing Conditions
End:
Basin Model: 5-Year Development
End:
Basin Model: 10-Year Development
End:
Meteorologic Model: 10-Year Storm
End:
Meteorologic Model: 100-Year Storm
End:
Control Specifications: 24-Hour Event
End:
Simulation Run: Existing_100yr
Basin Model: Existing Conditions
Meteorologic Model: 100-Year Storm
Control Specifications: 24-Hour Event
End:
Simulation Run: Future_100yr
Basin Model: 10-Year Development
Meteorologic Model: 100-Year Storm
Control Specifications: 24-Hour Event
End:
This structure enables systematic comparison of different scenarios.
Best Practices¶
- Keep project name consistent: Project name should match directory name
- Use relative file paths: Avoid absolute paths for portability
- Document modifications: Use description fields to track changes
- Version appropriately: Update version number when sharing across HMS versions
- Don't edit manually: Use HMS GUI or hms-commander APIs to modify
Project Validation¶
Validate project file integrity:
from hms_commander import HmsUtils
# Validate project structure
validation = HmsUtils.validate_project(r"C:\Projects\MyWatershed")
if validation['valid']:
print("Project structure is valid")
else:
print(f"Validation errors: {validation['errors']}")
File Location¶
The .hms file must be located in the project root directory:
MyWatershed/
├── MyWatershed.hms ← Project file (required)
├── MyWatershed.basin ← Basin model file
├── MyWatershed.met ← Meteorologic model file
├── MyWatershed.control ← Control specifications
├── MyWatershed.gage ← Gage data
└── MyWatershed.run ← Run configurations
Related Documentation¶
- Basin File Format - Basin model structure
- Met File Format - Meteorologic model structure
- Control File Format - Control specifications
- Run File Format - Simulation run configuration
API Reference¶
Primary Class: HmsPrj
Initialization:
from hms_commander import init_hms_project, HmsPrj, hms
# Single project
init_hms_project(r"C:\Projects\MyWatershed")
# Multiple projects
project1 = HmsPrj()
init_hms_project(r"C:\Projects\Project1", hms_object=project1)
Utility Functions:
- HmsUtils.validate_project() - Validate project structure
- HmsUtils.update_project_file() - Update project registry
- HmsUtils.copy_project() - Copy entire project