{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":87793,"databundleVersionId":12024591,"sourceType":"competition"},{"sourceId":11605223,"sourceType":"datasetVersion","datasetId":7251241}],"dockerImageVersionId":30918,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"from datetime import datetime\nimport pytz\nprint('LOGGING TIME OF START:',  datetime.strftime(datetime.now(pytz.timezone('Asia/Singapore')), \"%Y-%m-%d %H:%M:%S\"))\n\n\ntry:\n    import Bio\nexcept:\n    pass\n    #for drfold2 --------\n    #!pip install biopython\n    #!pip install /kaggle/input/biopython/biopython-1.85-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\n\nprint('PIP INSTALL OK !!!!')","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2025-04-28T10:28:15.861993Z","iopub.execute_input":"2025-04-28T10:28:15.862215Z","iopub.status.idle":"2025-04-28T10:28:15.907634Z","shell.execute_reply.started":"2025-04-28T10:28:15.862193Z","shell.execute_reply":"2025-04-28T10:28:15.90664Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**FILE**: ***vfold-baseline-offline-pdb-adapted.ipynb***","metadata":{}},{"cell_type":"code","source":"# --- Notebook Setup ---\nimport pandas as pd\nimport numpy as np\nfrom pathlib import Path\nimport os,sys\npd.set_option('display.max_columns', 20)\npd.set_option('display.expand_frame_repr', False)\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom timeit import default_timer as timer\nimport re\n\nimport matplotlib \nimport matplotlib.pyplot as plt\n\nprint('IMPORT OK!!!')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-28T10:28:20.410093Z","iopub.execute_input":"2025-04-28T10:28:20.410366Z","iopub.status.idle":"2025-04-28T10:28:20.427876Z","shell.execute_reply.started":"2025-04-28T10:28:20.410335Z","shell.execute_reply":"2025-04-28T10:28:20.426937Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# --- Constants ---\nPDB_DIR = Path(\"/kaggle/input/rna-folding-top-data\")  # Directory where all .pdb files are stored","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-28T10:28:20.428873Z","iopub.execute_input":"2025-04-28T10:28:20.429164Z","iopub.status.idle":"2025-04-28T10:28:20.443995Z","shell.execute_reply.started":"2025-04-28T10:28:20.429141Z","shell.execute_reply":"2025-04-28T10:28:20.443103Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**FILE**: ***vfold-baseline-offline-pdb-adapted-fixed.ipynb***","metadata":{}},{"cell_type":"code","source":"PDB_FILES = [\n    \"/kaggle/input/rna-folding-top-data/lddt/casp16-vfold-5.pdb\",\n    \"/kaggle/input/rna-folding-top-data/lddt/casp16-vfold-4.pdb\",\n    \"/kaggle/input/rna-folding-top-data/lddt/casp16-vfold-1.pdb\",\n    \"/kaggle/input/rna-folding-top-data/lddt/casp16-vfold-2.pdb\",\n    \"/kaggle/input/rna-folding-top-data/lddt/casp16-vfold-3.pdb\"\n]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-04-28T10:32:49.803757Z","iopub.execute_input":"2025-04-28T10:32:49.804122Z","iopub.status.idle":"2025-04-28T10:32:50.463265Z","shell.execute_reply.started":"2025-04-28T10:32:49.804098Z","shell.execute_reply":"2025-04-28T10:32:50.462448Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"TEST_SEQ_FILE = \"/kaggle/input/stanford-rna-3d-folding/test_sequences.csv\"\nSUBMISSION_FILE = \"/kaggle/working/submission.csv\"\n\n# --- Load Test Sequences ---\ntest_seqs = pd.read_csv(TEST_SEQ_FILE)\n\n# --- Expand Test Sequences to per-residue Rows ---\nexpanded_rows = []\nfor idx, row in test_seqs.iterrows():\n    target_id = row['target_id']\n    sequence = row['sequence']\n    for i, base in enumerate(sequence):\n        expanded_rows.append({\n            'ID': f\"{target_id}_{i+1}\",\n            'target_id': target_id,\n            'resname': base,\n            'resid': i+1\n        })\n\ntest_df = pd.DataFrame(expanded_rows)\n\n# --- PDB Parsing Functions ---\ndef extract_c1prime_coords_with_resid(pdb_path):\n    coords = {}\n    with open(pdb_path, 'r') as f:\n        for line in f:\n            if line.startswith(\"ATOM\") and line[12:16].strip() == \"C1'\":\n                resid = int(line[22:26])\n                x = float(line[30:38])\n                y = float(line[38:46])\n                z = float(line[46:54])\n                coords[resid] = [x, y, z]\n    return coords\n\n# --- Load Coordinates from PDB Models ---\nmodel_coords = []\nfor pdb_file in PDB_FILES:\n    coords = extract_c1prime_coords_with_resid(pdb_file)\n    model_coords.append(coords)\n\n# --- Align Models to Expanded Test Data ---\nnum_residues = len(test_df)\nsubmission = pd.DataFrame({\n    'ID': test_df['ID'],\n    'resname': test_df['resname'],\n    'resid': test_df['resid']\n})\n\nfor model_idx, coords_dict in enumerate(model_coords):\n    x_list, y_list, z_list = [], [], []\n    for _, row in test_df.iterrows():\n        resid = row['resid']\n        coord = coords_dict.get(resid)\n        if coord is None:\n            # Padding if missing\n            if len(x_list) > 0:\n                coord = [x_list[-1], y_list[-1], z_list[-1]]\n            else:\n                coord = [0.0, 0.0, 0.0]\n        x_list.append(coord[0])\n        y_list.append(coord[1])\n        z_list.append(coord[2])\n\n    submission[f'x_{model_idx+1}'] = x_list\n    submission[f'y_{model_idx+1}'] = y_list\n    submission[f'z_{model_idx+1}'] = z_list\n\n# --- Save Submission ---\nsubmission.to_csv(SUBMISSION_FILE, index=False)\n\nprint(f\"✅ Final Submission file generated: {SUBMISSION_FILE}\")","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}