Skip to content

Commit 4a4e475

Browse files
Add VF options to Protocol (OpenwaterHealth#165)
1 parent d0c57b7 commit 4a4e475

3 files changed

Lines changed: 32 additions & 1 deletion

File tree

src/openlifu/plan/protocol.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from openlifu.sim import run_simulation
2323
from openlifu.util.checkgpu import gpu_available
2424
from openlifu.util.json import PYFUSEncoder
25+
from openlifu.virtual_fit import VirtualFitOptions
2526
from openlifu.xdc import Transducer
2627

2728
OnPulseMismatchAction = Enum("OnPulseMismatchAction", ["ERROR", "ROUND", "ROUNDUP", "ROUNDDOWN"])
@@ -68,6 +69,8 @@ class Protocol:
6869
analysis_options: SolutionAnalysisOptions = field(default_factory=SolutionAnalysisOptions)
6970
""" Options to adjust solution analysis. By default, the analysis is configured with default options """
7071

72+
virtual_fit_options : VirtualFitOptions = field(default_factory=VirtualFitOptions)
73+
7174
def __post_init__(self):
7275
self.logger = logging.getLogger(__name__)
7376

@@ -86,6 +89,8 @@ def from_dict(d : Dict[str,Any]) -> Protocol:
8689
d['param_constraints'] = d.get("param_constraints", {})
8790
if "target_constraints" in d:
8891
d['target_constraints'] = [TargetConstraints.from_dict(d_tc) for d_tc in d.get("target_constraints", {})]
92+
if "virtual_fit_options" in d:
93+
d['virtual_fit_options'] = VirtualFitOptions.from_dict(d['virtual_fit_options'])
8994
if "analysis_options" in d:
9095
if "mainlobe_aspect_ratio" in d["analysis_options"]:
9196
d["analysis_options"]["mainlobe_aspect_ratio"] = tuple(d["analysis_options"]["mainlobe_aspect_ratio"])
@@ -106,6 +111,7 @@ def to_dict(self):
106111
"seg_method": self.seg_method.to_dict(),
107112
"param_constraints": self.param_constraints,
108113
"target_constraints": self.target_constraints,
114+
"virtual_fit_options": self.virtual_fit_options.to_dict(),
109115
"analysis_options": self.analysis_options,
110116
}
111117

src/openlifu/virtual_fit.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import logging
44
from dataclasses import dataclass
5-
from typing import List, Sequence, Tuple
5+
from typing import Any, Dict, List, Sequence, Tuple
66

77
import numpy as np
88

@@ -95,6 +95,14 @@ def to_units(self, target_units:str) -> VirtualFitOptions:
9595
planefit_dpitch_step = conversion_factor * self.planefit_dpitch_step,
9696
)
9797

98+
@staticmethod
99+
def from_dict(parameter_dict:Dict[str,Any]) -> VirtualFitOptions: # Override DictMixin here
100+
parameter_dict["pitch_range"] = tuple(parameter_dict["pitch_range"])
101+
parameter_dict["yaw_range"] = tuple(parameter_dict["yaw_range"])
102+
parameter_dict["steering_limits"] = tuple(map(tuple,parameter_dict["steering_limits"]))
103+
return VirtualFitOptions(**parameter_dict)
104+
105+
98106
# (Currently we disable pylint E1121 because it is a temporary issue
99107
# which should be resolved by #165 and #166)
100108
def virtual_fit( # pylint: disable=E1121

tests/resources/example_db/protocols/example_protocol/example_protocol.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,23 @@
9090
},
9191
"param_constraints": [],
9292
"target_constraints": [],
93+
"virtual_fit_options": {
94+
"units": "mm",
95+
"transducer_steering_center_distance": 50.0,
96+
"steering_limits": [
97+
[-49, 47.5],
98+
[-51.2, 53],
99+
[-55, 58]
100+
],
101+
"pitch_range": [-1, 120],
102+
"pitch_step": 3,
103+
"yaw_range": [-60, 66],
104+
"yaw_step": 2,
105+
"planefit_dyaw_extent": 14,
106+
"planefit_dyaw_step": 2,
107+
"planefit_dpitch_extent": 16,
108+
"planefit_dpitch_step": 7
109+
},
93110
"analysis_options": {
94111
"standoff_sound_speed": 1500.0,
95112
"standoff_density": 1000.0,

0 commit comments

Comments
 (0)