From a28ca7de23dfd44ac0c9a469d312298947a79252 Mon Sep 17 00:00:00 2001
From: Stefan Bienert <stefan.bienert@unibas.ch>
Date: Wed, 4 Oct 2023 16:18:04 +0200
Subject: [PATCH] Get first protocol step

---
 convert_to_modelcif.py | 37 ++++++++++++++++++++++++++++++++-----
 1 file changed, 32 insertions(+), 5 deletions(-)

diff --git a/convert_to_modelcif.py b/convert_to_modelcif.py
index 3a01fc9..e90516d 100755
--- a/convert_to_modelcif.py
+++ b/convert_to_modelcif.py
@@ -246,17 +246,36 @@ def _get_modelcif_protocol_input(
     return input_data
 
 
+def _get_modelcif_protocol_output(output_data_group, model):
+    """Assemble output data for a ModelCIF protocol step."""
+    if output_data_group == "model":
+        output_data = model
+    elif output_data_group == "monomer_pickle_files":
+        output_data = modelcif.data.DataGroup(
+            [
+                modelcif.data.Data(
+                    "Pickle files", details="Monomer feature/ MSA pickle files"
+                )
+            ]
+        )
+    else:
+        raise RuntimeError(f"Unknown protocol output: '{output_data_group}'")
+    return output_data
+
+
 def _get_modelcif_protocol(
     protocol_steps, target_entities, model, sw_dict, ref_dbs
 ):
     """Create the protocol for the ModelCIF file."""
     protocol = modelcif.protocol.Protocol()
     for js_step in protocol_steps:
-        # assemble input data
+        # assemble input & output data
         input_data = _get_modelcif_protocol_input(
             js_step["input_data_group"], target_entities, ref_dbs, model
         )
-
+        output_data = _get_modelcif_protocol_output(
+            js_step["output_data_group"], model
+        )
         # loop over software group and assemble software group from that
         sw_grp = modelcif.SoftwareGroup()
         for pss in js_step["software_group"]:  # protocol step software
@@ -277,7 +296,7 @@ def _get_modelcif_protocol(
         protocol.steps.append(
             modelcif.protocol.Step(
                 input_data=input_data,
-                output_data=None,  # output_data,
+                output_data=output_data,
                 name=js_step["step_name"],
                 details=js_step["details"],
                 software=sw_grp,
@@ -285,7 +304,7 @@ def _get_modelcif_protocol(
         )
         print("modelcif.protocol.Step(")
         print(f"            input_data={input_data},")
-        #        output_data=output_data,
+        print(f"            output_data={output_data},")
         print(f"            name={js_step['step_name']},")
         print(f"            details=\"{js_step['details']}\",")
         print(f"            software={sw_grp},")
@@ -697,7 +716,15 @@ def _get_software_data(meta_json: dict) -> list:
             None,
             cite_hhsuite,
         ),
-        "hmmbuild": None,
+        "hmmbuild": modelcif.Software(
+            "hmmbuild",
+            "data collection",
+            "Building HMM search profiles",
+            "http://hmmer.org/",
+            "program",
+            None,
+            None,
+        ),
         "hmmsearch": None,
         "jackhmmer": None,
         "kalign": None,
-- 
GitLab