Add a Yagi designer wizard, completing the five-wizard set - #7
Merged
Conversation
The fifth design wizard, now that per-element Yagi control exists. The user
picks a band, the number of elements, and the boom height; the wizard lays out
a tapered beam — reflector + driven + directors that shorten progressively and
sit at a widening spacing — and turns on per-element control with those
elements.
* results/yagi_design.py — the tapered layout (a stronger starting point
than the uniform rules-of-thumb auto-design, though still not optimized).
* ui/yagi_wizard.py — band + element count (2-10) + boom height.
* MainWindow.apply_yagi_design — sets the Yagi, promotes to Advanced, fills
the per-element editor, and checks the "Customise Yagi elements" box so the
build uses the designed elements.
Tests cover the layout and taper, the two-element case, the rejections, an
end-to-end NEC solve with forward gain, the apply hook, and the dialog flow.
Suite 504 -> 512. The design-wizard suite (trapped dipole, inverted-L,
multiband vertical, fan dipole, Yagi) is now complete.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
The fifth and final design wizard, now that per-element Yagi control exists (PR #6). Pick a band, the number of elements, and the boom height; the wizard lays out a tapered beam — reflector + driven + directors that shorten progressively and sit at a widening spacing — and turns on per-element control with those elements.
This completes the design-wizard suite: trapped dipole, inverted-L, multiband vertical, fan dipole, and now Yagi.
How
results/yagi_design.py— the tapered layout: reflector (1.05×, 0.15 λ behind), driven, then directors stepping out (first at 0.10 λ, then 0.20 λ apart) and shortening ~1%/director to a floor. A stronger starting point than the uniform rules-of-thumb auto-design — still a starting design, not numerically optimized (§16).ui/yagi_wizard.py— band combo + element count (2–10) + boom height.MainWindow.apply_yagi_design— switches to a Yagi, sets frequency + boom height, promotes to Advanced, fills the per-element editor, and checks "Customise Yagi elements" so the build uses the designed elements (set before the toggle so the auto-seed doesn't overwrite).Verified end to end: a designed 4-element beam solves at ~12.8 dBi / 16 dB F-B.
Tests
tests/test_yagi_wizard.py(+8): layout + taper ordering, the two-element case, input rejections, an end-to-end NEC solve with forward gain, the apply hook (custom box on, editor populated, build uses the elements), and the dialog flow. Suite 504 → 512, green locally and in a clean CI-equivalent venv.🤖 Generated with Claude Code