Skip to content

GEOPY-1406: Implement arbitrary receiver orientations (u-v-w) for airborne EM surveys#361

Merged
domfournier merged 21 commits intodevelopfrom
GEOPY-1406
Mar 17, 2026
Merged

GEOPY-1406: Implement arbitrary receiver orientations (u-v-w) for airborne EM surveys#361
domfournier merged 21 commits intodevelopfrom
GEOPY-1406

Conversation

@domfournier
Copy link
Collaborator

@domfournier domfournier commented Mar 13, 2026

GEOPY-1406: Implement arbitrary receiver orientations (u-v-w) for airborne EM surveys

Copilot AI review requested due to automatic review settings March 13, 2026 22:36
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds support for specifying receiver orientation (via PropertyGroup) across EM drivers, updates synthetics generation to support rotated surveys and optional plate-based mesh refinement, and introduces new integration tests to validate orientation handling.

Changes:

  • Add receivers_orientation support to FDEM/TDEM/Tipper options and expose it in corresponding UI JSONs (plus additional FDEM component channel UI fields).
  • Update synthetics survey generation to support rotation and improve FDEM transmitter offset computation.
  • Add integration tests for oriented FEM/TEM receivers and add optional octree refinement around a plate model.

Reviewed changes

Copilot reviewed 20 out of 20 changed files in this pull request and generated 15 comments.

Show a summary per file
File Description
tests/run_tests/oriented_fem_receiver_test.py New run-test for FEM forward runs with varying receiver orientations.
tests/run_tests/oriented_airborne_tem_receiver_test.py New run-test for airborne TEM forward runs with varying receiver orientations.
simpeg_drivers/utils/synthetics/surveys/frequency_domain/fdem.py Change transmitter offset computation to follow local line direction.
simpeg_drivers/utils/synthetics/surveys/factory.py Add survey rotation support in synthetic grid generation.
simpeg_drivers/utils/synthetics/options.py Add rotation to SurveyOptions and refine_plate to synthetics options.
simpeg_drivers/utils/synthetics/meshes/octrees.py Add optional octree refinement around a plate model.
simpeg_drivers/utils/synthetics/meshes/factory.py Thread plate refinement option through mesh factory.
simpeg_drivers/utils/synthetics/driver.py Pass plate model into mesh factory when refine_plate is enabled.
simpeg_drivers/natural_sources/tipper/options.py Add receivers_orientation to tipper forward/inversion options.
simpeg_drivers/electromagnetics/time_domain/options.py Add receivers_orientation to TDEM forward/inversion options.
simpeg_drivers/electromagnetics/frequency_domain_1d/options.py Refactor FEM-1D options inheritance and required fields.
simpeg_drivers/electromagnetics/frequency_domain/options.py Add orientation and x/y component toggles/channels to FDEM options.
simpeg_drivers/components/factories/survey_factory.py Plumb local receiver indices into receiver factory builds.
simpeg_drivers/components/factories/receiver_factory.py Compute/override receiver orientations from a provided PropertyGroup.
simpeg_drivers-assets/uijson/tipper_inversion.ui.json Add UI field for receiver orientation selection.
simpeg_drivers-assets/uijson/tipper_forward.ui.json Add UI field for receiver orientation selection.
simpeg_drivers-assets/uijson/tdem_inversion.ui.json Add receiver orientation UI field + explanatory tooltip.
simpeg_drivers-assets/uijson/tdem_forward.ui.json Add receiver orientation UI field + explanatory tooltip.
simpeg_drivers-assets/uijson/fdem_inversion.ui.json Add receiver orientation + x/y channels and updated labels/tooltips.
simpeg_drivers-assets/uijson/fdem_forward.ui.json Add receiver orientation + x/y component toggles and updated labels/tooltips.
Comments suppressed due to low confidence (1)

simpeg_drivers/electromagnetics/frequency_domain_1d/options.py:79

  • directives is defined twice in FDEM1DInversionOptions; this second definition overrides the earlier one (including sens_wts_threshold=100.0). Remove the duplicate and keep the intended defaults in a single directives field.
    directives: DirectiveOptions = DirectiveOptions()


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@sebhmg sebhmg changed the title GEOPY-1406 GEOPY-1406: Implement arbitrary receiver orientations (u-v-w) for airborne EM surveys Mar 16, 2026
Copy link
Contributor

@benk-mira benk-mira left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice addition! couple suggestions to look at.

@codecov
Copy link

codecov bot commented Mar 17, 2026

Codecov Report

❌ Patch coverage is 94.79167% with 5 lines in your changes missing coverage. Please review.
✅ Project coverage is 91.28%. Comparing base (0ae910f) to head (96aa40a).
⚠️ Report is 22 commits behind head on develop.

Files with missing lines Patch % Lines
.../utils/synthetics/surveys/frequency_domain/fdem.py 76.47% 2 Missing and 2 partials ⚠️
...g_drivers/components/factories/receiver_factory.py 95.23% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@             Coverage Diff             @@
##           develop     #361      +/-   ##
===========================================
+ Coverage    91.26%   91.28%   +0.01%     
===========================================
  Files          120      120              
  Lines         6592     6652      +60     
  Branches       799      806       +7     
===========================================
+ Hits          6016     6072      +56     
- Misses         381      383       +2     
- Partials       195      197       +2     
Files with missing lines Coverage Δ
...peg_drivers/components/factories/survey_factory.py 95.04% <ø> (-0.08%) ⬇️
...ivers/electromagnetics/frequency_domain/options.py 94.20% <100.00%> (+1.47%) ⬆️
...rs/electromagnetics/frequency_domain_1d/options.py 100.00% <100.00%> (ø)
...eg_drivers/electromagnetics/time_domain/options.py 100.00% <100.00%> (ø)
simpeg_drivers/natural_sources/tipper/options.py 100.00% <ø> (ø)
simpeg_drivers/utils/synthetics/driver.py 100.00% <ø> (ø)
simpeg_drivers/utils/synthetics/meshes/factory.py 100.00% <100.00%> (ø)
simpeg_drivers/utils/synthetics/meshes/octrees.py 100.00% <100.00%> (ø)
simpeg_drivers/utils/synthetics/options.py 100.00% <100.00%> (ø)
simpeg_drivers/utils/synthetics/surveys/factory.py 100.00% <100.00%> (ø)
... and 2 more
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@domfournier domfournier merged commit a89fbaf into develop Mar 17, 2026
16 checks passed
@domfournier domfournier deleted the GEOPY-1406 branch March 17, 2026 23:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants