Agent skill

cloning-hms-components

Clones HEC-HMS components (basins, met models, control specs, runs) using the CLB Engineering LLM Forward approach. Creates non-destructive, traceable, GUI-verifiable copies for QAQC comparison, scenario analysis, and parameter sensitivity testing. Use when creating alternative scenarios, setting up QAQC workflows, comparing baseline vs updated models, or preserving original while testing modifications. All clones appear in HEC-HMS GUI with separate DSS outputs for side-by-side comparison. Trigger keywords: clone, duplicate, copy, QAQC, scenario, alternative, baseline, comparison, side-by-side, non-destructive, traceable.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/testing/cloning-hms-components

SKILL.md

Cloning HMS Components

Quick Start

python
from hms_commander import init_hms_project, hms
from hms_commander import HmsBasin, HmsMet, HmsControl, HmsRun

init_hms_project("project")

# Clone components
HmsBasin.clone_basin("Baseline", "Updated_Basin", hms_object=hms)
HmsMet.clone_met("Baseline_Met", "Atlas14_Met", hms_object=hms)
HmsControl.clone_control("Jan2020", "Jun2020", hms_object=hms)
HmsRun.clone_run("Run_Baseline", "Run_Updated", hms_object=hms)

Primary Sources

Code:

  • hms_commander/HmsBasin.py#clone_basin()
  • hms_commander/HmsMet.py#clone_met()
  • hms_commander/HmsControl.py#clone_control()
  • hms_commander/HmsRun.py#clone_run()

Rules: .claude/rules/hec-hms/clone-workflows.md - CLB Engineering approach

Examples: examples/clone_workflow.ipynb - Complete QAQC workflow

When to Use This Skill

  • Setting up QAQC comparison workflows (baseline vs updated)
  • Creating scenario alternatives without modifying originals
  • Parameter sensitivity testing (multiple variations)
  • Preserving working models before experiments
  • Atlas 14 precipitation updates (keep TP40 baseline)
  • Model calibration (test different parameter sets)

CLB Engineering LLM Forward Approach

Three Principles:

  1. Non-Destructive: Preserves original components
  2. Traceable: Updates description with clone metadata
  3. GUI-Verifiable: Clones appear in HEC-HMS GUI immediately

Why This Matters:

QAQC workflows require side-by-side comparison in the HMS GUI:

  • Baseline run → Baseline DSS file
  • Updated run → Updated DSS file
  • Compare hydrographs visually in HMS
  • Verify changes are intentional

See: .claude/rules/hec-hms/clone-workflows.md for complete pattern

Core Capabilities

1. Basin Cloning

python
HmsBasin.clone_basin(
    template="Baseline",
    new_name="Updated_Basin",
    description="Updated with Atlas 14 precip",
    hms_object=hms
)

Result:

  • New .basin file created
  • Description includes clone metadata
  • Appears in HMS GUI's Basin Manager
  • All parameters copied from template

2. Met Model Cloning

python
HmsMet.clone_met(
    template="TP40_Met",
    new_name="Atlas14_Met",
    description="Updated to Atlas 14 depths",
    hms_object=hms
)

Result:

  • New .met file created
  • Gage assignments preserved
  • Ready for precipitation updates

3. Control Specification Cloning

python
HmsControl.clone_control(
    template="Jan2020",
    new_name="Jun2020",
    hms_object=hms
)

Use case: Same model, different time periods

4. Run Cloning (Critical for QAQC)

python
HmsRun.clone_run(
    source_run="Baseline",
    new_run_name="Updated",
    new_basin="Updated_Basin",
    new_met="Atlas14_Met",
    output_dss="results_updated.dss",
    description="Atlas 14 update QAQC",
    hms_object=hms
)

Result:

  • New run configuration
  • Points to cloned basin/met
  • Separate DSS file (critical for comparison!)
  • Appears in HMS Compute menu

Common Workflows

Workflow 1: Atlas 14 Update QAQC

python
init_hms_project("project")

# 1. Clone met model
HmsMet.clone_met("Baseline_Met", "Atlas14_Met", hms_object=hms)

# 2. Update Atlas 14 depths
new_depths = [2.8, 3.5, 4.2, 4.9, 5.7, 6.5]
HmsMet.set_precipitation_depths("project/Atlas14_Met.met", new_depths)

# 3. Clone run with new met
HmsRun.clone_run(
    source_run="Baseline",
    new_run_name="Atlas14_Update",
    new_met="Atlas14_Met",
    output_dss="results_atlas14.dss",
    hms_object=hms
)

# 4. Execute both runs
HmsCmdr.compute_parallel(["Baseline", "Atlas14_Update"])

# 5. Compare in HMS GUI
# Open both DSS files side-by-side

Workflow 2: Parameter Sensitivity

python
# Test multiple curve numbers
for cn in [70, 75, 80, 85, 90]:
    # Clone basin
    HmsBasin.clone_basin("Baseline", f"CN{cn}", hms_object=hms)

    # Update curve number
    HmsBasin.set_loss_parameters(f"project/CN{cn}.basin", "Sub1", curve_number=cn)

    # Clone run
    HmsRun.clone_run(
        "Baseline_Run",
        f"Run_CN{cn}",
        new_basin=f"CN{cn}",
        output_dss=f"results_cn{cn}.dss",
        hms_object=hms
    )

# Execute all runs in parallel
HmsCmdr.compute_parallel([f"Run_CN{cn}" for cn in [70, 75, 80, 85, 90]])

Workflow 3: Scenario Comparison

python
scenarios = ["Baseline", "Alternative_1", "Alternative_2"]

for scenario in scenarios[1:]:  # Skip baseline
    # Clone all components
    HmsBasin.clone_basin("Baseline", f"{scenario}_Basin", hms_object=hms)
    HmsMet.clone_met("Baseline_Met", f"{scenario}_Met", hms_object=hms)
    HmsRun.clone_run(
        "Baseline_Run",
        f"Run_{scenario}",
        new_basin=f"{scenario}_Basin",
        new_met=f"{scenario}_Met",
        output_dss=f"results_{scenario}.dss",
        hms_object=hms
    )

    # Modify scenario-specific parameters
    # ...

Reference Files

  • reference/clone_basin.md - Complete HmsBasin.clone_basin() API
  • reference/clone_met.md - Complete HmsMet.clone_met() API
  • reference/clone_run.md - Complete HmsRun.clone_run() API
  • examples/qaqc_workflow.md - Complete QAQC setup

Related Skills

  • parsing-basin-models - Modify cloned basins
  • updating-met-models - Modify cloned met models
  • executing-hms-runs - Run cloned scenarios
  • extracting-dss-results - Compare results from clones

Didn't find tool you were looking for?

Be as detailed as possible for better results