Spaces:
Running on Zero
Running on Zero
File size: 1,561 Bytes
3beba17 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | """Input validation and position constraint building."""
import pandas as pd
def _validate_design_inputs(pdb_files: list | None, ensemble_mode: str) -> str | None:
if not pdb_files:
return "Upload at least one PDB or CIF file."
if ensemble_mode == "user" and len(pdb_files) < 2:
return "User ensemble mode requires at least two files."
single_file_mode_messages = {
"none": "Single structure mode requires exactly one file.",
"synthetic": "Protpardelle mode requires exactly one file.",
}
message = single_file_mode_messages.get(ensemble_mode)
if message and len(pdb_files) != 1:
return message
return None
def _build_pos_constraint_df(
pdb_key: str,
fixed_pos_seq: str,
fixed_pos_scn: str,
fixed_pos_override_seq: str,
pos_restrict_aatype: str,
symmetry_pos: str,
) -> pd.DataFrame | None:
row = {}
if fixed_pos_seq and fixed_pos_seq.strip():
row["fixed_pos_seq"] = fixed_pos_seq.strip()
if fixed_pos_scn and fixed_pos_scn.strip():
row["fixed_pos_scn"] = fixed_pos_scn.strip()
if fixed_pos_override_seq and fixed_pos_override_seq.strip():
row["fixed_pos_override_seq"] = fixed_pos_override_seq.strip()
if pos_restrict_aatype and pos_restrict_aatype.strip():
row["pos_restrict_aatype"] = pos_restrict_aatype.strip()
if symmetry_pos and symmetry_pos.strip():
row["symmetry_pos"] = symmetry_pos.strip()
if not row:
return None
row["pdb_key"] = pdb_key
return pd.DataFrame([row])
|