Skip to content

Commit c7c0e96

Browse files
authored
Merge pull request #14 from sijiaww/fix-vmat-scp-dose-bug
Fix VMAT SCP MU scaling and clinical criteria logic
2 parents fef433d + 6424256 commit c7c0e96

File tree

3 files changed

+29
-24
lines changed

3 files changed

+29
-24
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,3 +56,4 @@ docs/_build/
5656
/results/
5757
/metadata/
5858
/examples/hugging_face_data/
59+
.DS_Store

portpy/photon/clinical_criteria.py

Lines changed: 27 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -140,34 +140,38 @@ def get_criteria(self, type: str = None) -> List[dict]:
140140
return all_criteria
141141

142142
def check_criterion_exists(self, criterion, return_ind:bool = False):
143-
criterion_exist = False
144-
criterion_ind = None
145-
for ind, crit in enumerate(self.clinical_criteria_dict['criteria']):
146-
if (crit['type'] == criterion['type']) and crit['parameters'] == criterion['parameters']:
147-
for constraint in crit['constraints']:
148-
if constraint == criterion['constraints']:
149-
criterion_exist = True
150-
criterion_ind = ind
151-
if return_ind:
152-
return criterion_exist,criterion_ind
153-
else:
154-
return criterion_exist
143+
criterion_exist = False
144+
criterion_ind = None
145+
for ind, crit in enumerate(self.clinical_criteria_dict['criteria']):
146+
if (crit['type'] == criterion['type']) and crit['parameters'] == criterion['parameters']:
147+
for constraint in crit['constraints']:
148+
for key, _ in criterion['constraints'].items():
149+
if constraint == key:
150+
criterion_exist = True
151+
criterion_ind = ind
152+
if return_ind:
153+
return criterion_exist,criterion_ind
154+
else:
155+
return criterion_exist
155156

156157
def modify_criterion(self, criterion):
157158
"""
158-
Modify the criterion the clinical criteria
159-
160-
159+
Update constraints for an existing criterion.
160+
Only updates keys that already exist in the original constraint dict.
161161
"""
162-
criterion_found = False
163162
for ind, crit in enumerate(self.clinical_criteria_dict['criteria']):
164-
if (crit['type'] == criterion['type']) and crit['parameters'] == criterion['parameters']:
165-
for constraint in crit['constraints']:
166-
if constraint == criterion['constraints']:
167-
self.clinical_criteria_dict['criteria'][ind]['constraints'][constraint] = criterion['constraints']
168-
criterion_found = True
169-
if not criterion_found:
170-
raise Warning('No criteria for {}'.format(criterion))
163+
164+
if crit['type'] == criterion['type'] and crit['parameters'] == criterion['parameters']:
165+
existing_keys = crit['constraints']
166+
updated = False
167+
for key, value in criterion.get('constraints', {}).items():
168+
if key in existing_keys:
169+
existing_keys[key] = value
170+
updated = True
171+
if updated:
172+
return
173+
174+
raise Warning(f"No criteria found for {criterion}")
171175

172176

173177
def get_num(self, string: Union[str, float]):

portpy/photon/vmat_scp/vmat_scp_optimization.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1178,7 +1178,7 @@ def create_cvxpy_intermediate_problem_prediction(self, pred_dose_1d, final_dose_
11781178
+ cp.multiply(bound_v_r, card_bound_inds_r)]
11791179
# generic constraints for relation between interior and boundary beamlets
11801180
constraints += [leaf_pos_mu_r - leaf_pos_mu_l >= int_v[map_int_v]]
1181-
constraints += [int_v >= self.vmat_params['mu_min']]
1181+
constraints += [int_v*100 >= self.vmat_params['mu_min']] # multiply it by 100 to match eclipse mu
11821182
constraints += [bound_v_l <= int_v[map_int_v]]
11831183
constraints += [bound_v_r <= int_v[map_int_v]]
11841184
if 'minimum_dynamic_leaf_gap_mm' in self.vmat_params:

0 commit comments

Comments
 (0)