Skip to content

Commit c2aba8d

Browse files
Fix FP and DC statuses to not longer skip output
Yes, that was a real bug in run_validation_benchmark.py. Cause: FP and DC were set here: run_validation_benchmark.py (line 241) run_validation_benchmark.py (line 249) but they immediately hit continue, which skipped the CSV append at: run_validation_benchmark.py (line 339) So DC entries were being omitted from benchmark_results.csv, which would absolutely distort the status percentages. The corrected guard is now: run_validation_benchmark.py (line 253)
1 parent 6bfec26 commit c2aba8d

File tree

1 file changed

+58
-59
lines changed

1 file changed

+58
-59
lines changed

benchmark/run_validation_benchmark.py

Lines changed: 58 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -241,81 +241,80 @@ def main():
241241
if chains_count < 2:
242242
status = "FP"
243243
print(" -> Too few protein chains remain after coarse-graining; marking as FP.")
244-
continue
245-
244+
246245
disconnected_design_message = get_disconnected_design_message(
247246
system,
248247
prefix="Validation preflight warning",
249248
)
250249
if disconnected_design_message is not None:
251250
status = "DC"
252251
print(f" -> {disconnected_design_message}")
253-
continue
254252

255-
# Create a range of titration rates, scaled for each molecular species
256-
base_rate = 0.0 # 0.25e-3
257-
titration_rates = {}
258-
for idx, mol_name in enumerate(rep_instances.keys()):
259-
# Linearly increment the rate by 50% for each unique species
260-
titration_rates[mol_name] = base_rate * (1.0 + (idx * 0.5))
261-
262-
artifacts = None
263-
sim_result = None
264-
265-
# 2. Run a short validation simulation first.
266-
artifacts, sim_result = _run_validation_attempt(
267-
system=system,
268-
workspace_manager=builder.workspace_manager,
269-
titration_rates=titration_rates,
270-
box_size=args.box_size,
271-
iterations=FAST_VALIDATION_ITERATIONS,
272-
nerdss_dir=args.nerdss_dir,
273-
sim_dir_name="validation_output_fast",
274-
)
275-
276-
# 3. If the target never appears in the histogram, rerun longer.
277-
if not sim_result.full_assembly_found:
278-
print(
279-
" -> Target composition did not appear within "
280-
f"{FAST_VALIDATION_ITERATIONS} iterations; rerunning with {args.iterations} iterations."
281-
)
253+
if status not in {"FP", "DC"}:
254+
# Create a range of titration rates, scaled for each molecular species
255+
base_rate = 0.0 # 0.25e-3
256+
titration_rates = {}
257+
for idx, mol_name in enumerate(rep_instances.keys()):
258+
# Linearly increment the rate by 50% for each unique species
259+
titration_rates[mol_name] = base_rate * (1.0 + (idx * 0.5))
260+
261+
artifacts = None
262+
sim_result = None
263+
264+
# 2. Run a short validation simulation first.
282265
artifacts, sim_result = _run_validation_attempt(
283266
system=system,
284267
workspace_manager=builder.workspace_manager,
285268
titration_rates=titration_rates,
286269
box_size=args.box_size,
287-
iterations=args.iterations,
270+
iterations=FAST_VALIDATION_ITERATIONS,
288271
nerdss_dir=args.nerdss_dir,
289-
sim_dir_name="validation_output_full",
272+
sim_dir_name="validation_output_fast",
290273
)
291-
292-
# 4. Check results and compute RMSD if successful
293-
if sim_result.full_assembly_found and sim_result.observed_coordinates:
294-
print(" -> Full assembly found! Aligning structure...")
295-
alignment = pdb.validation.align_structure(
296-
artifacts.designed_coordinates,
297-
sim_result.observed_coordinates,
298-
backend='kabsch',
299-
)
300-
rmsd = alignment.rmsd
301-
status = "Success"
302-
print(f" -> Validation Complete! RMSD: {rmsd:.4f} nm")
303-
else:
304-
print(" -> Simulation ran but did not yield a full matching assembly.")
305-
target_assembly_size = sum(artifacts.target_counts.values())
306-
status = _status_for_failed_validation(sim_result, target_assembly_size)
307-
if sim_result.warning_message:
308-
print(f" Warning: {sim_result.warning_message}")
309-
if "[Errno 2] No such file" in sim_result.warning_message or "invalid literal format" in sim_result.warning_message or "invalid literal for int" in sim_result.warning_message:
310-
status = "Crashed"
311-
elif status in {"UA", "OA"}:
312-
print(
313-
" Error: target assembly was not found after both validation runs. "
314-
f"Largest observed assembly size was {sim_result.largest_observed_assembly_size} "
315-
f"vs target size {target_assembly_size}."
316-
)
274+
275+
# 3. If the target never appears in the histogram, rerun longer.
276+
if not sim_result.full_assembly_found:
277+
print(
278+
" -> Target composition did not appear within "
279+
f"{FAST_VALIDATION_ITERATIONS} iterations; rerunning with {args.iterations} iterations."
280+
)
281+
artifacts, sim_result = _run_validation_attempt(
282+
system=system,
283+
workspace_manager=builder.workspace_manager,
284+
titration_rates=titration_rates,
285+
box_size=args.box_size,
286+
iterations=args.iterations,
287+
nerdss_dir=args.nerdss_dir,
288+
sim_dir_name="validation_output_full",
289+
)
317290

318-
_dump_nerdss_log(Path(sim_result.simulation_dir), pdb_id)
291+
# 4. Check results and compute RMSD if successful
292+
if sim_result.full_assembly_found and sim_result.observed_coordinates:
293+
print(" -> Full assembly found! Aligning structure...")
294+
alignment = pdb.validation.align_structure(
295+
artifacts.designed_coordinates,
296+
sim_result.observed_coordinates,
297+
backend='kabsch',
298+
)
299+
rmsd = alignment.rmsd
300+
status = "Success"
301+
print(f" -> Validation Complete! RMSD: {rmsd:.4f} nm")
302+
else:
303+
print(" -> Simulation ran but did not yield a full matching assembly.")
304+
target_assembly_size = sum(artifacts.target_counts.values())
305+
status = _status_for_failed_validation(sim_result, target_assembly_size)
306+
if sim_result.warning_message:
307+
print(f" Warning: {sim_result.warning_message}")
308+
if "[Errno 2] No such file" in sim_result.warning_message or "invalid literal format" in sim_result.warning_message or "invalid literal for int" in sim_result.warning_message:
309+
status = "Crashed"
310+
elif status in {"UA", "OA"}:
311+
print(
312+
" Error: target assembly was not found after both validation runs. "
313+
f"Largest observed assembly size was {sim_result.largest_observed_assembly_size} "
314+
f"vs target size {target_assembly_size}."
315+
)
316+
317+
_dump_nerdss_log(Path(sim_result.simulation_dir), pdb_id)
319318

320319
except Exception as e:
321320
if builder is not None:

0 commit comments

Comments
 (0)