diff --git a/analysis_mut.ipynb b/analysis_mut.ipynb new file mode 100644 index 0000000..e4ea359 --- /dev/null +++ b/analysis_mut.ipynb @@ -0,0 +1,556 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "将多聚体提取为单聚体之后在进行修复建模" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " pdb_id MHC_class TCR_alpha TCR_beta peptide MHC_alpha MHC_beta Beta2m \\\n", + "0 1d9k 2 A B P C D NaN \n", + "1 1g6r 1 A B P H NaN L \n", + "2 1kj2 1 A B P H NaN L \n", + "3 1mwa 1 A B P H NaN L \n", + "4 1u3h 2 E F I G H NaN \n", + "5 1zgl 2 M P C A B NaN \n", + "6 2nx5 1 D E C A NaN B \n", + "7 2vlr 1 D E C A NaN B \n", + "8 3dxa 1 D E C A NaN B \n", + "9 3ffc 1 D E C A NaN G \n", + "10 3kpr 1 D E C A NaN B \n", + "11 3mbe 2 C D P A B NaN \n", + "12 3pqy 1 D E C A NaN B \n", + "13 3sjv 1 D E C A NaN B \n", + "14 3utt 1 D E C A NaN B \n", + "15 4e41 2 D E C A B NaN \n", + "16 4eup 1 I J C A NaN B \n", + "17 4gg6 2 G H J A B NaN \n", + "18 4h1l 2 I J C A B NaN \n", + "19 4mji 1 D E C A NaN B \n", + "20 4ozi 2 G H J A B NaN \n", + "21 4p2q 2 D E C A B NaN \n", + "22 4p2r 2 I J H F G NaN \n", + "23 4qrp 1 D E C A NaN B \n", + "24 4z7u 2 E F I A B NaN \n", + "25 4z7v 2 E F I A B NaN \n", + "26 4z7w 2 E F I C D NaN \n", + "27 5c0a 1 D E C A NaN B \n", + "28 5c0b 1 D E C A NaN B \n", + "29 5c0c 1 I J C A NaN B \n", + "30 5c07 1 D E C A NaN B \n", + "31 5c08 1 D E C A NaN B \n", + "32 5c09 1 D E C A NaN B \n", + "33 5d2l 1 E F R C NaN D \n", + "34 5d2n 1 C F G H NaN L \n", + "35 5e6i 1 A B E C NaN D \n", + "36 5e9d 1 D E C A NaN B \n", + "37 5euo 1 G H I C NaN D \n", + "38 5jhd 1 D E C A NaN B \n", + "39 5ks9 2 E F I C D NaN \n", + "40 5ksb 2 E F I C D NaN \n", + "41 5nme 1 D E C A NaN B \n", + "42 5nmg 1 D E C A NaN B \n", + "43 5wkh 1 D E C A NaN B \n", + "44 5wlg 1 D E C A NaN B \n", + "45 6avg 1 B E Q F NaN A \n", + "46 6rp9 1 D E C A NaN B \n", + "47 6rpb 1 D E C A NaN B \n", + "48 6rsy 1 D E C A NaN B \n", + "49 6u3o 2 G H I E F NaN \n", + "50 6uon 1 I J C A NaN B \n", + "51 6vmx 1 D E C A NaN B \n", + "52 6vqo 1 D E P A NaN B \n", + "53 7n6e 1 I J C A NaN B \n", + "54 7sg1 2 D E C A B NaN \n", + "55 7t2b 2 N O M K L NaN \n", + "56 7z50 2 H E T A B NaN \n", + "\n", + " protein_type DOI ... \\\n", + "0 m 10.7554/eLife.82934 ... \n", + "1 m 10.7554/eLife.82916 ... \n", + "2 m 10.7554/eLife.82914 ... \n", + "3 m 10.7554/eLife.82912 ... \n", + "4 m 10.7554/eLife.82935 ... \n", + "5 m 10.7554/eLife.82905 ... \n", + "6 m 10.1101/2023.03.29.533764 ... \n", + "7 m 10.1101/2023.03.29.533767 ... \n", + "8 m 10.7554/eLife.82875 ... \n", + "9 m 10.7554/eLife.82867 ... \n", + "10 m 10.7554/eLife.82876 ... \n", + "11 m 10.7554/eLife.82933 ... \n", + "12 m 10.7554/eLife.82910 ... \n", + "13 m 10.7554/eLife.82868 ... \n", + "14 m 10.7554/eLife.82816 ... \n", + "15 m 10.7554/eLife.82900 ... \n", + "16 m 10.7554/eLife.82815 ... \n", + "17 m 10.7554/eLife.82889 ... \n", + "18 m 10.7554/eLife.82904 ... \n", + "19 m 10.7554/eLife.82878|10.1101/2023.03.29.533776 ... \n", + "20 NaN 10.7554/eLife.82895 ... \n", + "21 m 10.7554/eLife.82937 ... \n", + "22 m 10.7554/eLife.82938 ... \n", + "23 NaN 10.7554/eLife.82869 ... \n", + "24 NaN 10.7554/eLife.82890 ... \n", + "25 NaN 10.7554/eLife.82891 ... \n", + "26 NaN 10.7554/eLife.82892 ... \n", + "27 NaN 10.7554/eLife.82839 ... \n", + "28 NaN 10.7554/eLife.82845 ... \n", + "29 NaN 10.7554/eLife.82846 ... \n", + "30 NaN 10.7554/eLife.82859 ... \n", + "31 NaN 10.7554/eLife.82847 ... \n", + "32 NaN 10.7554/eLife.82856 ... \n", + "33 NaN 10.7554/eLife.82842|10.1101/2023.03.29.533778 ... \n", + "34 NaN 10.7554/eLife.82840|10.1101/2023.03.29.533779 ... \n", + "35 NaN 10.7554/eLife.82822|10.1101/2023.03.29.533780 ... \n", + "36 NaN 10.7554/eLife.82820 ... \n", + "37 NaN 10.1101/2023.03.29.533781 ... \n", + "38 NaN 10.7554/eLife.82826|10.1101/2023.03.29.533784 ... \n", + "39 I链peptide需要手动修复 10.7554/eLife.82888 ... \n", + "40 I链peptide需要手动修复 10.7554/eLife.82897 ... \n", + "41 NaN 10.7554/eLife.82853 ... \n", + "42 NaN 10.7554/eLife.82848 ... \n", + "43 NaN 10.7554/eLife.82860 ... \n", + "44 NaN 10.7554/eLife.82909 ... \n", + "45 NaN 10.7554/eLife.82863 ... \n", + "46 NaN 10.7554/eLife.82852|10.1093/nar/gkad368 ... \n", + "47 NaN 10.7554/eLife.82844|10.1093/nar/gkad359 ... \n", + "48 NaN 10.7554/eLife.82828|10.1093/nar/gkad360 ... \n", + "49 NaN 10.7554/eLife.82896 ... \n", + "50 NaN 10.7554/eLife.82880 ... \n", + "51 NaN 10.1093/nar/gkad369|10.7554/eLife.82865 ... \n", + "52 NaN 10.7554/eLife.82831 ... \n", + "53 NaN 10.7554/eLife.82858|10.1101/2023.03.29.533788|... ... \n", + "54 NaN 10.1093/nar/gkad399 ... \n", + "55 NaN 10.1093/nar/gkad402 ... \n", + "56 NaN 10.1093/nar/gkad400 ... \n", + "\n", + " Exact Mass No. of atoms No. of bonds Polar Surface Area XLOGP3 \\\n", + "0 NaN NaN NaN NaN NaN \n", + "1 NaN NaN NaN NaN NaN \n", + "2 NaN NaN NaN NaN NaN \n", + "3 NaN NaN NaN NaN NaN \n", + "4 NaN NaN NaN NaN NaN \n", + "5 NaN NaN NaN NaN NaN \n", + "6 NaN NaN NaN NaN NaN \n", + "7 NaN NaN NaN NaN NaN \n", + "8 NaN NaN NaN NaN NaN \n", + "9 NaN NaN NaN NaN NaN \n", + "10 NaN NaN NaN NaN NaN \n", + "11 NaN NaN NaN NaN NaN \n", + "12 NaN NaN NaN NaN NaN \n", + "13 NaN NaN NaN NaN NaN \n", + "14 NaN NaN NaN NaN NaN \n", + "15 NaN NaN NaN NaN NaN \n", + "16 NaN NaN NaN NaN NaN \n", + "17 NaN NaN NaN NaN NaN \n", + "18 NaN NaN NaN NaN NaN \n", + "19 NaN NaN NaN NaN NaN \n", + "20 NaN NaN NaN NaN NaN \n", + "21 NaN NaN NaN NaN NaN \n", + "22 NaN NaN NaN NaN NaN \n", + "23 NaN NaN NaN NaN NaN \n", + "24 NaN NaN NaN NaN NaN \n", + "25 NaN NaN NaN NaN NaN \n", + "26 NaN NaN NaN NaN NaN \n", + "27 NaN NaN NaN NaN NaN \n", + "28 NaN NaN NaN NaN NaN \n", + "29 NaN NaN NaN NaN NaN \n", + "30 NaN NaN NaN NaN NaN \n", + "31 NaN NaN NaN NaN NaN \n", + "32 NaN NaN NaN NaN NaN \n", + "33 NaN NaN NaN NaN NaN \n", + "34 NaN NaN NaN NaN NaN \n", + "35 NaN NaN NaN NaN NaN \n", + "36 NaN NaN NaN NaN NaN \n", + "37 NaN NaN NaN NaN NaN \n", + "38 NaN NaN NaN NaN NaN \n", + "39 NaN NaN NaN NaN NaN \n", + "40 NaN NaN NaN NaN NaN \n", + "41 NaN NaN NaN NaN NaN \n", + "42 NaN NaN NaN NaN NaN \n", + "43 NaN NaN NaN NaN NaN \n", + "44 NaN NaN NaN NaN NaN \n", + "45 NaN NaN NaN NaN NaN \n", + "46 NaN NaN NaN NaN NaN \n", + "47 NaN NaN NaN NaN NaN \n", + "48 NaN NaN NaN NaN NaN \n", + "49 NaN NaN NaN NaN NaN \n", + "50 NaN NaN NaN NaN NaN \n", + "51 NaN NaN NaN NaN NaN \n", + "52 NaN NaN NaN NaN NaN \n", + "53 NaN NaN NaN NaN NaN \n", + "54 NaN NaN NaN NaN NaN \n", + "55 NaN NaN NaN NaN NaN \n", + "56 NaN NaN NaN NaN NaN \n", + "\n", + " open banel LogP HB donor HB acceptor Rotatable bonds Canonical SMILES \n", + "0 NaN NaN NaN NaN NaN \n", + "1 NaN NaN NaN NaN NaN \n", + "2 NaN NaN NaN NaN NaN \n", + "3 NaN NaN NaN NaN NaN \n", + "4 NaN NaN NaN NaN NaN \n", + "5 NaN NaN NaN NaN NaN \n", + "6 NaN NaN NaN NaN NaN \n", + "7 NaN NaN NaN NaN NaN \n", + "8 NaN NaN NaN NaN NaN \n", + "9 NaN NaN NaN NaN NaN \n", + "10 NaN NaN NaN NaN NaN \n", + "11 NaN NaN NaN NaN NaN \n", + "12 NaN NaN NaN NaN NaN \n", + "13 NaN NaN NaN NaN NaN \n", + "14 NaN NaN NaN NaN NaN \n", + "15 NaN NaN NaN NaN NaN \n", + "16 NaN NaN NaN NaN NaN \n", + "17 NaN NaN NaN NaN NaN \n", + "18 NaN NaN NaN NaN NaN \n", + "19 NaN NaN NaN NaN NaN \n", + "20 NaN NaN NaN NaN NaN \n", + "21 NaN NaN NaN NaN NaN \n", + "22 NaN NaN NaN NaN NaN \n", + "23 NaN NaN NaN NaN NaN \n", + "24 NaN NaN NaN NaN NaN \n", + "25 NaN NaN NaN NaN NaN \n", + "26 NaN NaN NaN NaN NaN \n", + "27 NaN NaN NaN NaN NaN \n", + "28 NaN NaN NaN NaN NaN \n", + "29 NaN NaN NaN NaN NaN \n", + "30 NaN NaN NaN NaN NaN \n", + "31 NaN NaN NaN NaN NaN \n", + "32 NaN NaN NaN NaN NaN \n", + "33 NaN NaN NaN NaN NaN \n", + "34 NaN NaN NaN NaN NaN \n", + "35 NaN NaN NaN NaN NaN \n", + "36 NaN NaN NaN NaN NaN \n", + "37 NaN NaN NaN NaN NaN \n", + "38 NaN NaN NaN NaN NaN \n", + "39 NaN NaN NaN NaN NaN \n", + "40 NaN NaN NaN NaN NaN \n", + "41 NaN NaN NaN NaN NaN \n", + "42 NaN NaN NaN NaN NaN \n", + "43 NaN NaN NaN NaN NaN \n", + "44 NaN NaN NaN NaN NaN \n", + "45 NaN NaN NaN NaN NaN \n", + "46 NaN NaN NaN NaN NaN \n", + "47 NaN NaN NaN NaN NaN \n", + "48 NaN NaN NaN NaN NaN \n", + "49 NaN NaN NaN NaN NaN \n", + "50 NaN NaN NaN NaN NaN \n", + "51 NaN NaN NaN NaN NaN \n", + "52 NaN NaN NaN NaN NaN \n", + "53 NaN NaN NaN NaN NaN \n", + "54 NaN NaN NaN NaN NaN \n", + "55 NaN NaN NaN NaN NaN \n", + "56 NaN NaN NaN NaN NaN \n", + "\n", + "[57 rows x 49 columns]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_4083021/2640995437.py:1: DeprecationWarning: \n", + "Pyarrow will become a required dependency of pandas in the next major release of pandas (pandas 3.0),\n", + "(to allow more performant data types, such as the Arrow string type, and better interoperability with other libraries)\n", + "but was not found to be installed on your system.\n", + "If this would cause problems for you,\n", + "please provide us feedback at https://github.com/pandas-dev/pandas/issues/54466\n", + " \n", + " import pandas as pd\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# 假设Excel文件的路径为'path_to_excel_file.xlsx'\n", + "file_path = 'TCR-pHMC4.xlsx'\n", + "\n", + "# 读取名为'sheet1'的工作表,第一行作为列名\n", + "df = pd.read_excel(file_path, sheet_name='Sheet1', header=0, engine='calamine')\n", + "\n", + "# 显示数据帧以确认加载正确\n", + "print(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "!rm -rf ./multi_pdb/*_clean.pdb\n", + "!rm -rf ./multi_pdb/*_extracted.pdb" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "multi_pdb/1d9k.clean.pdb\n", + "Saved extracted chains of 1d9k to multi_pdb/1d9k_extracted.pdb\n", + "multi_pdb/1g6r.clean.pdb\n", + "Saved extracted chains of 1g6r to multi_pdb/1g6r_extracted.pdb\n", + "multi_pdb/1kj2.clean.pdb\n", + "Saved extracted chains of 1kj2 to multi_pdb/1kj2_extracted.pdb\n", + "multi_pdb/1mwa.clean.pdb\n", + "Saved extracted chains of 1mwa to multi_pdb/1mwa_extracted.pdb\n", + "multi_pdb/1u3h.clean.pdb\n", + "Saved extracted chains of 1u3h to multi_pdb/1u3h_extracted.pdb\n", + "multi_pdb/1zgl.clean.pdb\n", + "Saved extracted chains of 1zgl to multi_pdb/1zgl_extracted.pdb\n", + "multi_pdb/2nx5.clean.pdb\n", + "Saved extracted chains of 2nx5 to multi_pdb/2nx5_extracted.pdb\n", + "multi_pdb/2vlr.clean.pdb\n", + "Saved extracted chains of 2vlr to multi_pdb/2vlr_extracted.pdb\n", + "multi_pdb/3dxa.clean.pdb\n", + "Saved extracted chains of 3dxa to multi_pdb/3dxa_extracted.pdb\n", + "multi_pdb/3ffc.clean.pdb\n", + "Saved extracted chains of 3ffc to multi_pdb/3ffc_extracted.pdb\n", + "multi_pdb/3kpr.clean.pdb\n", + "Saved extracted chains of 3kpr to multi_pdb/3kpr_extracted.pdb\n", + "multi_pdb/3mbe.clean.pdb\n", + "Saved extracted chains of 3mbe to multi_pdb/3mbe_extracted.pdb\n", + "multi_pdb/3pqy.clean.pdb\n", + "Saved extracted chains of 3pqy to multi_pdb/3pqy_extracted.pdb\n", + "multi_pdb/3sjv.clean.pdb\n", + "Saved extracted chains of 3sjv to multi_pdb/3sjv_extracted.pdb\n", + "multi_pdb/3utt.clean.pdb\n", + "Saved extracted chains of 3utt to multi_pdb/3utt_extracted.pdb\n", + "multi_pdb/4e41.clean.pdb\n", + "Saved extracted chains of 4e41 to multi_pdb/4e41_extracted.pdb\n", + "multi_pdb/4eup.clean.pdb\n", + "Saved extracted chains of 4eup to multi_pdb/4eup_extracted.pdb\n", + "multi_pdb/4gg6.clean.pdb\n", + "Saved extracted chains of 4gg6 to multi_pdb/4gg6_extracted.pdb\n", + "multi_pdb/4h1l.clean.pdb\n", + "Saved extracted chains of 4h1l to multi_pdb/4h1l_extracted.pdb\n", + "multi_pdb/4mji.clean.pdb\n", + "Saved extracted chains of 4mji to multi_pdb/4mji_extracted.pdb\n", + "multi_pdb/4ozi.clean.pdb\n", + "Saved extracted chains of 4ozi to multi_pdb/4ozi_extracted.pdb\n", + "multi_pdb/4p2q.clean.pdb\n", + "Saved extracted chains of 4p2q to multi_pdb/4p2q_extracted.pdb\n", + "multi_pdb/4p2r.clean.pdb\n", + "Saved extracted chains of 4p2r to multi_pdb/4p2r_extracted.pdb\n", + "multi_pdb/4qrp.clean.pdb\n", + "Saved extracted chains of 4qrp to multi_pdb/4qrp_extracted.pdb\n", + "multi_pdb/4z7u.clean.pdb\n", + "Saved extracted chains of 4z7u to multi_pdb/4z7u_extracted.pdb\n", + "multi_pdb/4z7v.clean.pdb\n", + "Saved extracted chains of 4z7v to multi_pdb/4z7v_extracted.pdb\n", + "multi_pdb/4z7w.clean.pdb\n", + "Saved extracted chains of 4z7w to multi_pdb/4z7w_extracted.pdb\n", + "multi_pdb/5c0a.clean.pdb\n", + "Saved extracted chains of 5c0a to multi_pdb/5c0a_extracted.pdb\n", + "multi_pdb/5c0b.clean.pdb\n", + "Saved extracted chains of 5c0b to multi_pdb/5c0b_extracted.pdb\n", + "multi_pdb/5c0c.clean.pdb\n", + "Saved extracted chains of 5c0c to multi_pdb/5c0c_extracted.pdb\n", + "multi_pdb/5c07.clean.pdb\n", + "Saved extracted chains of 5c07 to multi_pdb/5c07_extracted.pdb\n", + "multi_pdb/5c08.clean.pdb\n", + "Saved extracted chains of 5c08 to multi_pdb/5c08_extracted.pdb\n", + "multi_pdb/5c09.clean.pdb\n", + "Saved extracted chains of 5c09 to multi_pdb/5c09_extracted.pdb\n", + "multi_pdb/5d2l.clean.pdb\n", + "Saved extracted chains of 5d2l to multi_pdb/5d2l_extracted.pdb\n", + "multi_pdb/5d2n.clean.pdb\n", + "Saved extracted chains of 5d2n to multi_pdb/5d2n_extracted.pdb\n", + "multi_pdb/5e6i.clean.pdb\n", + "Saved extracted chains of 5e6i to multi_pdb/5e6i_extracted.pdb\n", + "multi_pdb/5e9d.clean.pdb\n", + "Saved extracted chains of 5e9d to multi_pdb/5e9d_extracted.pdb\n", + "multi_pdb/5euo.clean.pdb\n", + "Saved extracted chains of 5euo to multi_pdb/5euo_extracted.pdb\n", + "multi_pdb/5jhd.clean.pdb\n", + "Saved extracted chains of 5jhd to multi_pdb/5jhd_extracted.pdb\n", + "multi_pdb/5ks9.clean.pdb\n", + "Saved extracted chains of 5ks9 to multi_pdb/5ks9_extracted.pdb\n", + "multi_pdb/5ksb.clean.pdb\n", + "Saved extracted chains of 5ksb to multi_pdb/5ksb_extracted.pdb\n", + "multi_pdb/5nme.clean.pdb\n", + "Saved extracted chains of 5nme to multi_pdb/5nme_extracted.pdb\n", + "multi_pdb/5nmg.clean.pdb\n", + "Saved extracted chains of 5nmg to multi_pdb/5nmg_extracted.pdb\n", + "multi_pdb/5wkh.clean.pdb\n", + "Saved extracted chains of 5wkh to multi_pdb/5wkh_extracted.pdb\n", + "multi_pdb/5wlg.clean.pdb\n", + "Saved extracted chains of 5wlg to multi_pdb/5wlg_extracted.pdb\n", + "multi_pdb/6avg.clean.pdb\n", + "Saved extracted chains of 6avg to multi_pdb/6avg_extracted.pdb\n", + "multi_pdb/6rp9.clean.pdb\n", + "Saved extracted chains of 6rp9 to multi_pdb/6rp9_extracted.pdb\n", + "multi_pdb/6rpb.clean.pdb\n", + "Saved extracted chains of 6rpb to multi_pdb/6rpb_extracted.pdb\n", + "multi_pdb/6rsy.clean.pdb\n", + "Saved extracted chains of 6rsy to multi_pdb/6rsy_extracted.pdb\n", + "multi_pdb/6u3o.clean.pdb\n", + "Saved extracted chains of 6u3o to multi_pdb/6u3o_extracted.pdb\n", + "multi_pdb/6uon.clean.pdb\n", + "Saved extracted chains of 6uon to multi_pdb/6uon_extracted.pdb\n", + "multi_pdb/6vmx.clean.pdb\n", + "Saved extracted chains of 6vmx to multi_pdb/6vmx_extracted.pdb\n", + "multi_pdb/6vqo.clean.pdb\n", + "Saved extracted chains of 6vqo to multi_pdb/6vqo_extracted.pdb\n", + "multi_pdb/7n6e.clean.pdb\n", + "Saved extracted chains of 7n6e to multi_pdb/7n6e_extracted.pdb\n", + "multi_pdb/7sg1.clean.pdb\n", + "Saved extracted chains of 7sg1 to multi_pdb/7sg1_extracted.pdb\n", + "multi_pdb/7t2b.clean.pdb\n", + "Saved extracted chains of 7t2b to multi_pdb/7t2b_extracted.pdb\n", + "multi_pdb/7z50.clean.pdb\n", + "Saved extracted chains of 7z50 to multi_pdb/7z50_extracted.pdb\n" + ] + } + ], + "source": [ + "from analysis_pdb import PDBAnalyzer\n", + "from pathlib import Path\n", + "from biopandas.pdb import PandasPdb\n", + "# 假设multi_pdb目录包含所有的PDB文件\n", + "pdb_directory = Path(\"./multi_pdb\")\n", + "\n", + "for index, row in df.iterrows():\n", + " pdb_id = row['pdb_id']\n", + " pdb_file = pdb_directory / f\"{pdb_id}.pdb\"\n", + " \n", + " # 清理杂原子并初始化PDBAnalyzer\n", + " analyzer = PDBAnalyzer.cleanATOM(pdb_file)\n", + " print(analyzer.pdb_file)\n", + " \n", + " # 根据MHC_class选择需要提取的链\n", + " chains_to_extract = []\n", + " if row['MHC_class'] == 1:\n", + " chains_to_extract = [row['TCR_alpha'], row['TCR_beta'], row['peptide'], row['MHC_alpha'], row.get('Beta2m')]\n", + " elif row['MHC_class'] == 2:\n", + " chains_to_extract = [row['TCR_alpha'], row['TCR_beta'], row['peptide'], row['MHC_alpha'], row['MHC_beta']]\n", + " \n", + " ppdb = PandasPdb().read_pdb(analyzer.pdb_file.as_posix())\n", + "\n", + " # 筛选出指定链的原子\n", + " extracted_atoms = ppdb.df['ATOM'][ppdb.df['ATOM']['chain_id'].isin(chains_to_extract)]\n", + "\n", + " if not extracted_atoms.empty:\n", + " # 创建一个新的PandasPdb对象并填充筛选后的原子数据\n", + " new_ppdb = PandasPdb()\n", + " new_ppdb.df['ATOM'] = extracted_atoms\n", + " new_ppdb.df['HETATM'] = ppdb.df['HETATM'][ppdb.df['HETATM']['chain_id'].isin(chains_to_extract)] # 如果需要,也包括HETATM信息\n", + "\n", + " # 保存为新的PDB文件\n", + " output_file = pdb_directory / f\"{pdb_id}_extracted.pdb\"\n", + " new_ppdb.to_pdb(path=output_file.as_posix())\n", + " print(f\"Saved extracted chains of {pdb_id} to {output_file}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['A', 'B', 'C', 'D', 'P', 'E', 'F', 'G', 'H', 'Q']\n" + ] + } + ], + "source": [ + "from pathlib import Path\n", + "from analysis_pdb import PDBAnalyzer\n", + "f = Path('multi_pdb/1d9k.pdb')\n", + "o = PDBAnalyzer.cleanATOM(f)\n", + "print(o.chain_id_list)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "r = o.extract_chains_to_new_pdb(['A'])" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ATOM': record_name atom_number blank_1 ... element_symbol charge line_idx\n", + " 0 ATOM 1 ... N NaN 0\n", + " 1 ATOM 2 ... C NaN 1\n", + " 2 ATOM 3 ... C NaN 2\n", + " 3 ATOM 4 ... O NaN 3\n", + " 4 ATOM 5 ... C NaN 4\n", + " .. ... ... ... ... ... ... ...\n", + " 872 ATOM 873 ... C NaN 872\n", + " 873 ATOM 874 ... C NaN 873\n", + " 874 ATOM 875 ... C NaN 874\n", + " 875 ATOM 876 ... O NaN 875\n", + " 876 ATOM 877 ... O NaN 876\n", + " \n", + " [877 rows x 21 columns],\n", + " 'HETATM': Empty DataFrame\n", + " Columns: [record_name, atom_number, blank_1, atom_name, alt_loc, residue_name, blank_2, chain_id, residue_number, insertion, blank_3, x_coord, y_coord, z_coord, occupancy, b_factor, blank_4, segment_id, element_symbol, charge, line_idx]\n", + " Index: []}" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "r.df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "analysis", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}