diff --git a/.github/workflows/property_tools_tests.yml b/.github/workflows/property_tools_tests.yml new file mode 100644 index 0000000000..0179b3af4c --- /dev/null +++ b/.github/workflows/property_tools_tests.yml @@ -0,0 +1,34 @@ +name: DeePMD Property Tools Tests + +on: + push: + paths: + - "deepmd/deepmd_property_tools/**" + - ".github/workflows/property_tools_tests.yml" + pull_request: + paths: + - "deepmd/deepmd_property_tools/**" + - ".github/workflows/property_tools_tests.yml" + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - name: Install lightweight test dependencies + run: | + python -m pip install --upgrade pip + python -m pip install numpy pytest + + - name: Run unit tests + env: + PYTHONPATH: deepmd/deepmd_property_tools + run: | + python -m pytest deepmd/deepmd_property_tools/tests -v diff --git a/deepmd/deepmd_property_tools/DATA/dataset_demo.csv b/deepmd/deepmd_property_tools/DATA/dataset_demo.csv new file mode 100644 index 0000000000..7f46c7ac42 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/dataset_demo.csv @@ -0,0 +1,41 @@ +SMILES,Property +O=[N+](C(COCOCC([N+]([O-])=O)([N+]([O-])=O)[N+]([O-])=O)([N+]([O-])=O)[N+]([O-])=O)[O-],468.15 +N1(C=NN=N1)CCN(CCN2C=NN=N2)CCN3N=NN=C3,472.15 +OCCN1N=C(N(/N=N/C2=NN(CCO)N=N2)/N=N/C3=NN(CCO)N=N3)N=N1,392.15 +C1(N(C2=NN=CN=N2)C3=NN=CN=N3)=NN=CN=N1,504.15 +O=[N+](C(COC(OCC([N+]([O-])=O)([N+]([O-])=O)[N+]([O-])=O)(OCC([N+]([O-])=O)([N+]([O-])=O)[N+]([O-])=O)OCC([N+]([O-])=O)([N+]([O-])=O)[N+]([O-])=O)([N+]([O-])=O)[N+]([O-])=O)[O-],464.15 +O=[N+](C(COC(OCC([N+]([O-])=O)([N+]([O-])=O)[N+]([O-])=O)(OCC([N+]([O-])=O)([N+]([O-])=O)[N+]([O-])=O)OCC([N+]([O-])=O)([N+]([O-])=O)[N+]([O-])=O)([N+]([O-])=O)[N+]([O-])=O)[O-],307.15 +O=C(OCC(OC(N[N+]([O-])=O)=O)COC(N[N+]([O-])=O)=O)N[N+]([O-])=O,425.15 +O=[N+](OCC(CO[N+]([O-])=O)O[N+]([O-])=O)[O-],470.55 +O=[N+](OC(C(C(CO[N+]([O-])=O)O[N+]([O-])=O)O[N+]([O-])=O)CO[N+]([O-])=O)[O-],447.95 +O=C(OCC)N(C1=NON=C1N([N+]([O-])=O)C(OCC)=O)[N+]([O-])=O,397.15 +O=C(OCCOCCOC(CN=[N+]=[N-])=O)CN=[N+]=[N-],504.52 +O=[N+](C1=NON=C1N([N+]([O-])=O)CN([N+]([O-])=O)CN([N+]([O-])=O)C2=NON=C2[N+]([O-])=O)[O-],423.15 +CC1(O[N+]([O-])=O)COC1,414.15 +CN(CC(N[N+]([O-])=O)=O)[N+]([O-])=O,386.15 +CN(CC(O)=O)[N+]([O-])=O,426.15 +CN(N)N=O,394.15 +CN[N+]([O-])=O,359.15 +CN(CC(NNCC([N+]([O-])=O)([N+]([O-])=O)[N+]([O-])=O)=O)[N+]([O-])=O,381.15 +CC1=CN(N2C(N)=NN=N2)N=N1,402.85 +O=[N+](NC1=NN(CCO[N+]([O-])=O)N=N1)[O-],364.07 +CN([N+]([O-])=O)CN1N=C([N+]([O-])=O)C=C1[N+]([O-])=O,483.15 +NC1=C(N(CCCN2N=NN=C2N)N=C1[N+]([O-])=O)[N+]([O-])=O,538.15 +O=[N+](C([N+]([O-])=O)([N+]([O-])=O)CNC1=NN=NN1OC)[O-],421.15 +N/C(NC)=C([N+]([O-])=O)/[N+]([O-])=O,517.61 +N/C(NO)=C([N+]([O-])=O)/[N+]([O-])=O,348.15 +O=[N+](C(CNN1C=NN=C1)([N+]([O-])=O)[N+]([O-])=O)[O-],399.65 +NC1=NN=C2N=NC(NC3=NON=C3[N+]([O-])=O)=NN21,522.65 +NC1=NN=C2N=NC(NC3=NC([N+]([O-])=O)=NO3)=NN21,495.15 +O=[N+](C1=NNC([N+]([O-])=O)=C1C2=NC(C3=NNC(C4=C([N+]([O-])=O)NN=C4[N+]([O-])=O)=N3)=NN2)[O-],645.15 +NC1=NNC(NC2=NN=C(NC3=NC(N)=NN3)N=N2)=N1,630.25 +C1(NC2=NN=C(NC3=NC=NN3)N=N2)=NC=NN1,623.15 +O=[N+](C1=NNC(NC2=NN=C(NC3=NC([N+]([O-])=O)=NN3)N=N2)=N1)[O-],556.75 +O=[N+](C1=NNC(NC2=NN=C(N=N2)NC3=NC([N+]([O-])=O)=NN3)=N1)[O-],575.15 +O=[N+](N(CN([N+]([O-])=O)C1=NON=C1C#N)C2=NON=C2C#N)[O-],405.15 +[N-]=[N+]=NC1=NNC(NC2=NN=C(NC3=NC(N=[N+]=[N-])=NN3)N=N2)=N1,462.95 +CN1N=NC(NC2=NN=C(NC3=NN(C)N=N3)N=N2)=N1,579.15 +C12=NN=CN1N=CN=N2,516.15 +O=[N+](C1=NN(C([N+]([O-])=O)=C1[N+]([O-])=O)CN2C([N+]([O-])=O)=C([N+]([O-])=O)C([N+]([O-])=O)=N2)[O-],478.15 +NC(N=C1N)=NN1C2=NN=C(N3C(N)=NC(N)=N3)N=N2,643.15 +NC1=NC([N+]([O-])=O)=NN1NCC([N+]([O-])=O)([N+]([O-])=O)[N+]([O-])=O,381.15 diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id0.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id0.mol new file mode 100644 index 0000000000..f92524fbb2 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id0.mol @@ -0,0 +1,68 @@ +id_0 + RDKit 3D + + 31 30 0 0 0 0 0 0 0 0999 V2000 + -4.0868 -2.2052 0.2024 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.7794 -1.1379 0.7719 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.5750 0.0975 0.0395 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.1664 0.6026 0.2558 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.1878 -0.2919 -0.1677 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0296 0.3329 0.1059 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1188 -0.4204 -0.2538 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.2495 0.3227 0.0753 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.5404 -0.3978 -0.2717 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.6077 0.5165 0.1368 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.7075 0.9066 1.4645 O 0 0 0 0 0 0 0 0 0 0 0 0 + 5.4450 0.9674 -0.6709 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6406 -1.6072 0.5234 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.7676 -2.3971 0.3350 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.7577 -1.9409 1.3499 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6480 -0.6610 -1.6710 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6392 0.4035 -2.5383 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.7453 -1.8348 -2.0532 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.8054 -0.1104 -1.3649 N 0 0 0 0 0 0 0 0 0 0 0 0 + -5.0305 -0.5411 -1.8063 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.9036 0.0961 -2.1897 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.4563 1.1242 0.5864 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.3995 2.3807 0.0074 O 0 0 0 0 0 0 0 0 0 0 0 0 + -5.2364 0.8918 1.5395 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.6336 -1.1517 2.1410 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0458 1.6118 -0.1858 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.9931 0.7205 1.3611 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0031 0.5823 1.1860 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0190 1.3102 -0.4505 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.2324 0.5226 1.1653 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.1862 1.3075 -0.4292 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 1 0 + 8 9 1 0 + 9 10 1 0 + 10 11 1 0 + 10 12 2 0 + 9 13 1 0 + 13 14 1 0 + 13 15 2 0 + 9 16 1 0 + 16 17 1 0 + 16 18 2 0 + 3 19 1 0 + 19 20 1 0 + 19 21 2 0 + 3 22 1 0 + 22 23 1 0 + 22 24 2 0 + 2 25 1 0 + 4 26 1 0 + 4 27 1 0 + 6 28 1 0 + 6 29 1 0 + 8 30 1 0 + 8 31 1 0 +M CHG 8 2 1 10 1 11 -1 13 1 14 -1 16 1 17 -1 19 1 +M CHG 4 20 -1 22 1 23 -1 25 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id1.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id1.mol new file mode 100644 index 0000000000..1d5f52fa7d --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id1.mol @@ -0,0 +1,81 @@ +id_1 + RDKit 3D + + 37 39 0 0 0 0 0 0 0 0999 V2000 + 3.8222 -0.1814 -0.3417 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.5522 -0.3657 0.7531 C 0 0 0 0 0 0 0 0 0 0 0 0 + 5.7306 0.2803 0.5756 N 0 0 0 0 0 0 0 0 0 0 0 0 + 5.7113 0.8392 -0.6036 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.5579 0.5697 -1.1791 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4597 -0.6831 -0.6040 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.5795 0.4509 -0.1062 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.1709 0.2021 -0.2382 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.5289 1.3503 -0.0115 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.9891 1.4177 0.2362 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.3144 2.8669 0.3392 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.6762 3.6111 -0.7120 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.8832 4.8731 -0.2581 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.6507 4.8934 1.0457 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.3021 3.6409 1.3803 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.1843 -1.1091 0.0202 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.6335 -1.5036 -0.1927 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.8525 -2.9336 0.0557 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.7115 -3.8633 -0.9035 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.9817 -5.0724 -0.4726 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.3172 -4.9296 0.8413 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.2245 -3.6138 1.1112 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.2641 -0.9390 1.6390 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.3462 -1.6067 -0.0661 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.3786 -0.7589 -1.7085 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.8944 1.3712 -0.6355 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.8574 0.6131 0.9733 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0187 1.9592 0.7992 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.3141 2.0454 -0.9260 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.6508 1.0137 -0.4999 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.1934 1.0735 1.2958 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.7735 3.2608 -1.7092 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.1310 -1.4703 1.0524 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.3872 -1.8310 -0.6477 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.2162 -1.0229 0.6248 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.9931 -1.2926 -1.2078 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.4339 -3.1555 2.0821 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 2 0 + 3 4 1 0 + 4 5 2 0 + 1 6 1 0 + 6 7 1 0 + 7 8 1 0 + 8 9 1 0 + 9 10 1 0 + 10 11 1 0 + 11 12 1 0 + 12 13 2 0 + 13 14 1 0 + 14 15 2 0 + 8 16 1 0 + 16 17 1 0 + 17 18 1 0 + 18 19 1 0 + 19 20 2 0 + 20 21 1 0 + 21 22 2 0 + 5 1 1 0 + 15 11 1 0 + 22 18 1 0 + 2 23 1 0 + 6 24 1 0 + 6 25 1 0 + 7 26 1 0 + 7 27 1 0 + 9 28 1 0 + 9 29 1 0 + 10 30 1 0 + 10 31 1 0 + 12 32 1 0 + 16 33 1 0 + 16 34 1 0 + 17 35 1 0 + 17 36 1 0 + 22 37 1 0 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id10.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id10.mol new file mode 100644 index 0000000000..4f08dd5e20 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id10.mol @@ -0,0 +1,67 @@ +id_10 + RDKit 3D + + 31 30 0 0 0 0 0 0 0 0999 V2000 + 2.8426 -1.6192 -0.4119 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.7892 -0.5803 0.3112 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.6274 0.6586 -0.2997 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.5198 0.8167 -1.6862 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.3445 0.0841 -2.2872 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.1663 0.5630 -1.7163 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.8880 -0.1190 -2.2794 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.2452 0.2814 -1.7680 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.3767 0.0761 -0.3741 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.5847 0.3988 0.2661 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.7726 0.2011 1.7312 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.5745 -0.3462 2.3474 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.6755 -0.7662 3.4997 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.7970 -1.1810 4.6516 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.5686 0.8733 -0.3778 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.9042 -0.7628 1.7728 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.8269 0.5056 2.4707 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.8979 1.1083 2.6359 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.9600 1.7005 2.8196 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.3294 1.9098 -1.8628 H 0 0 0 0 0 0 0 0 0 0 0 0 + 3.4532 0.6158 -2.2512 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.3719 0.2700 -3.3808 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.4020 -0.9969 -2.1507 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.8981 0.1227 -3.3791 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.7538 -1.2195 -2.2505 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.9654 -0.4393 -2.2357 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.5204 1.2923 -2.0771 H 0 0 0 0 0 0 0 0 0 0 0 0 + -4.5738 -0.5467 1.8719 H 0 0 0 0 0 0 0 0 0 0 0 0 + -4.0527 1.1368 2.2571 H 0 0 0 0 0 0 0 0 0 0 0 0 + 3.7941 -1.3402 2.0839 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.0174 -1.3957 2.0696 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 1 0 + 8 9 1 0 + 9 10 1 0 + 10 11 1 0 + 11 12 1 0 + 12 13 2 0 + 13 14 2 0 + 10 15 2 0 + 2 16 1 0 + 16 17 1 0 + 17 18 2 0 + 18 19 2 0 + 4 20 1 0 + 4 21 1 0 + 5 22 1 0 + 5 23 1 0 + 7 24 1 0 + 7 25 1 0 + 8 26 1 0 + 8 27 1 0 + 11 28 1 0 + 11 29 1 0 + 16 30 1 0 + 16 31 1 0 +M CHG 4 13 1 14 -1 18 1 19 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id11.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id11.mol new file mode 100644 index 0000000000..13a3f11d3a --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id11.mol @@ -0,0 +1,76 @@ +id_11 + RDKit 3D + + 34 35 0 0 0 0 0 0 0 0999 V2000 + 4.9473 2.1580 0.5415 O 0 0 0 0 0 0 0 0 0 0 0 0 + 4.4820 1.0513 0.1333 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6345 1.0094 -1.0049 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6970 1.9220 -1.9944 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.8050 1.6063 -2.8785 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.1563 0.5231 -2.5132 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.6533 0.1143 -1.3292 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.2114 -1.0051 -0.6059 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4268 -2.2722 -1.2100 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6878 -2.7819 -1.2793 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.4129 -2.8789 -1.6653 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.5690 -0.9931 0.6704 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2847 -0.2866 0.6666 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.3222 1.0573 0.3261 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1881 1.9636 0.8889 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.4976 1.4313 -0.5653 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.8778 -1.0603 0.9899 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0673 -0.2396 1.0549 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.1773 0.6412 2.1189 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.5044 1.8061 2.2984 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.9962 0.3103 3.0304 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.0316 -0.4124 0.0338 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.9600 -1.3665 -0.9429 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.0014 -1.2718 -1.7077 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.7770 -0.3201 -1.3200 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.2052 0.2489 -0.2263 C 0 0 0 0 0 0 0 0 0 0 0 0 + -4.8032 1.3300 0.4498 N 0 0 0 0 0 0 0 0 0 0 0 0 + -6.1981 1.3799 0.4700 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.2250 2.2584 1.0198 O 0 0 0 0 0 0 0 0 0 0 0 0 + 4.8519 -0.0573 0.8533 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.4897 -1.9916 1.1005 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.1983 -0.3952 1.3741 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.9612 -1.8291 0.1645 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.7348 -1.6499 1.9262 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 2 0 + 4 5 1 0 + 5 6 1 0 + 6 7 2 0 + 7 8 1 0 + 8 9 1 0 + 9 10 1 0 + 9 11 2 0 + 8 12 1 0 + 12 13 1 0 + 13 14 1 0 + 14 15 1 0 + 14 16 2 0 + 13 17 1 0 + 17 18 1 0 + 18 19 1 0 + 19 20 1 0 + 19 21 2 0 + 18 22 1 0 + 22 23 2 0 + 23 24 1 0 + 24 25 1 0 + 25 26 2 0 + 26 27 1 0 + 27 28 1 0 + 27 29 2 0 + 2 30 1 0 + 7 3 1 0 + 26 22 1 0 + 12 31 1 0 + 12 32 1 0 + 17 33 1 0 + 17 34 1 0 +M CHG 8 2 1 9 1 10 -1 14 1 15 -1 19 1 20 -1 27 1 +M CHG 2 28 -1 30 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id12.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id12.mol new file mode 100644 index 0000000000..59e07e6c2e --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id12.mol @@ -0,0 +1,38 @@ +id_12 + RDKit 3D + + 16 16 0 0 0 0 0 0 0 0999 V2000 + -0.9935 -0.9926 1.1602 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.1258 -0.2160 0.2031 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.2046 -0.5149 0.3067 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.2866 -0.0538 -0.3516 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.1090 0.9628 0.1334 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.5513 -0.5885 -1.4704 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.3819 1.2783 0.2000 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.4157 1.0930 -0.7402 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.7557 -0.0927 -1.1413 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.1637 -1.9965 0.7173 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.4589 -1.1800 2.1147 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.9695 -0.5135 1.3373 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.4372 1.8272 -0.3069 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.7101 1.6986 1.1793 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.5391 -0.8511 -1.3570 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0749 0.1395 -1.9846 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 4 6 2 0 + 2 7 1 0 + 7 8 1 0 + 8 9 1 0 + 9 2 1 0 + 1 10 1 0 + 1 11 1 0 + 1 12 1 0 + 7 13 1 0 + 7 14 1 0 + 9 15 1 0 + 9 16 1 0 +M CHG 2 4 1 5 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id13.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id13.mol new file mode 100644 index 0000000000..7058606443 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id13.mol @@ -0,0 +1,41 @@ +id_13 + RDKit 3D + + 18 17 0 0 0 0 0 0 0 0999 V2000 + -2.6377 0.4370 -0.9903 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.4189 0.0633 -0.2543 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.1389 0.3208 -0.8850 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.9930 -0.1060 -0.0292 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.3053 0.0953 -0.5404 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.4486 -0.2706 0.1833 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.9844 -1.5435 0.0356 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.9799 0.5508 0.9580 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.8529 -0.6282 1.1068 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.5430 -0.5203 1.0133 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.7344 -1.8874 1.1624 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.4913 0.1343 2.0753 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.4203 1.1233 -1.8062 H 0 0 0 0 0 0 0 0 0 0 0 0 + -3.3594 0.9256 -0.2868 H 0 0 0 0 0 0 0 0 0 0 0 0 + -3.0988 -0.5287 -1.3120 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0541 1.4226 -1.0162 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.1224 -0.1223 -1.8925 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4549 0.5338 -1.4961 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 6 8 2 0 + 4 9 2 0 + 2 10 1 0 + 10 11 1 0 + 10 12 2 0 + 1 13 1 0 + 1 14 1 0 + 1 15 1 0 + 3 16 1 0 + 3 17 1 0 + 5 18 1 0 +M CHG 4 6 1 7 -1 10 1 11 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id14.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id14.mol new file mode 100644 index 0000000000..bc9f99aaf2 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id14.mol @@ -0,0 +1,35 @@ +id_14 + RDKit 3D + + 15 14 0 0 0 0 0 0 0 0999 V2000 + -0.8341 1.3452 0.2208 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.7322 -0.1039 -0.0141 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2897 -0.7847 0.7527 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.6632 -0.4191 0.3261 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.8903 0.3912 -0.7935 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.6199 -0.8791 1.0265 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.5790 -0.7301 -0.9213 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.7348 -2.0902 -0.8643 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.1690 -0.0018 -1.7632 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.5019 1.5867 1.2754 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.2478 1.9262 -0.5176 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.8752 1.6800 0.1531 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.1425 -0.7003 1.8468 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.1847 -1.8695 0.4790 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.8837 0.6493 -0.8959 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 4 6 2 0 + 2 7 1 0 + 7 8 1 0 + 7 9 2 0 + 1 10 1 0 + 1 11 1 0 + 1 12 1 0 + 3 13 1 0 + 3 14 1 0 + 5 15 1 0 +M CHG 2 7 1 8 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id15.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id15.mol new file mode 100644 index 0000000000..9cd1369306 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id15.mol @@ -0,0 +1,24 @@ +id_15 + RDKit 3D + + 10 9 0 0 0 0 0 0 0 0999 V2000 + -0.8813 -0.8071 -0.1347 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2575 0.0532 0.2082 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0917 1.4097 0.0455 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.4441 -0.5095 0.6765 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.2592 -1.0805 -0.1025 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.0713 -0.5749 -1.2054 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.7418 -1.8562 0.1000 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.7350 -0.4141 0.4800 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2716 2.0147 0.8355 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.1053 1.7646 -0.9030 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 1 0 + 2 4 1 0 + 4 5 2 0 + 1 6 1 0 + 1 7 1 0 + 1 8 1 0 + 3 9 1 0 + 3 10 1 0 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id16.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id16.mol new file mode 100644 index 0000000000..9ed2b30ca2 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id16.mol @@ -0,0 +1,23 @@ +id_16 + RDKit 3D + + 9 8 0 0 0 0 0 0 0 0999 V2000 + -1.0791 -0.1581 -0.2330 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.1136 -0.1628 0.5821 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.3149 0.2330 -0.0219 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.6524 1.5608 -0.0514 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.0568 -0.6359 -0.5232 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.1229 0.7367 -0.8897 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.0659 -1.0403 -0.8722 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.9642 -0.0885 0.4370 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0944 -0.4449 1.5724 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 1 0 + 3 4 1 0 + 3 5 2 0 + 1 6 1 0 + 1 7 1 0 + 1 8 1 0 + 2 9 1 0 +M CHG 2 3 1 4 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id17.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id17.mol new file mode 100644 index 0000000000..afc4fedf05 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id17.mol @@ -0,0 +1,65 @@ +id_17 + RDKit 3D + + 30 29 0 0 0 0 0 0 0 0999 V2000 + 4.0604 0.8668 1.3659 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.8891 0.3337 0.0226 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.8048 -0.6213 -0.1596 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.4800 0.0485 -0.0075 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2667 -0.6743 -0.1411 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.9606 0.0248 0.0180 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0739 -0.8785 -0.1505 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.3936 -0.2140 0.0237 C 0 0 0 0 0 0 0 0 0 0 0 0 + -4.4354 -1.2221 -0.1652 N 0 0 0 0 0 0 0 0 0 0 0 0 + -5.7372 -0.7783 -0.0385 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.1572 -2.4136 -0.4291 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.6230 0.8981 -0.8687 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.8535 2.0300 -0.9058 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.5916 0.8520 -1.6824 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.4566 0.3300 1.3865 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.6113 0.9967 1.7812 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.4844 0.1962 2.1801 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.4921 1.3009 0.2475 O 0 0 0 0 0 0 0 0 0 0 0 0 + 4.7254 0.7243 -1.0312 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.3116 0.7377 -2.3491 O 0 0 0 0 0 0 0 0 0 0 0 0 + 5.9018 1.0737 -0.7229 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.5212 1.8359 1.5061 H 0 0 0 0 0 0 0 0 0 0 0 0 + 3.7520 0.1030 2.0937 H 0 0 0 0 0 0 0 0 0 0 0 0 + 5.1249 1.1193 1.5941 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.8483 -1.0234 -1.2087 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.9219 -1.4954 0.4972 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2724 -1.7105 -0.3563 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.9813 0.6687 -0.8269 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0001 -1.6580 0.6575 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0130 -1.4510 -1.0959 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 1 0 + 8 9 1 0 + 9 10 1 0 + 9 11 2 0 + 8 12 1 0 + 12 13 1 0 + 12 14 2 0 + 8 15 1 0 + 15 16 1 0 + 15 17 2 0 + 4 18 2 0 + 2 19 1 0 + 19 20 1 0 + 19 21 2 0 + 1 22 1 0 + 1 23 1 0 + 1 24 1 0 + 3 25 1 0 + 3 26 1 0 + 5 27 1 0 + 6 28 1 0 + 7 29 1 0 + 7 30 1 0 +M CHG 8 9 1 10 -1 12 1 13 -1 15 1 16 -1 19 1 20 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id18.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id18.mol new file mode 100644 index 0000000000..c43f55f03d --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id18.mol @@ -0,0 +1,42 @@ +id_18 + RDKit 3D + + 18 19 0 0 0 0 0 0 0 0999 V2000 + 3.1815 -0.6107 -0.6928 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.9737 -0.1352 0.0335 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.6516 -0.1457 -0.3626 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.1087 0.3849 0.6136 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.4983 0.5533 0.5998 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.3919 0.2402 -0.3547 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0822 -0.3569 -1.6074 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.6310 0.5806 0.0601 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.4872 1.1023 1.2715 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.2012 1.0822 1.5887 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.7320 0.7159 1.5935 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.9630 0.4162 1.2679 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6885 0.2227 -1.2235 H 0 0 0 0 0 0 0 0 0 0 0 0 + 3.9067 -0.9484 0.0687 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.9267 -1.4031 -1.4282 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.3335 -0.5290 -1.3126 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.6788 0.2078 -2.3931 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.2779 -1.3770 -1.6966 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 2 0 + 3 4 1 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 6 8 2 0 + 8 9 1 0 + 9 10 2 0 + 4 11 1 0 + 11 12 2 0 + 12 2 1 0 + 10 5 1 0 + 1 13 1 0 + 1 14 1 0 + 1 15 1 0 + 3 16 1 0 + 7 17 1 0 + 7 18 1 0 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id19.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id19.mol new file mode 100644 index 0000000000..74b0ebd8bb --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id19.mol @@ -0,0 +1,46 @@ +id_19 + RDKit 3D + + 20 20 0 0 0 0 0 0 0 0999 V2000 + 4.0608 1.5510 1.3831 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.9961 0.3644 0.9659 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6418 0.0888 -0.3806 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.3122 -0.3976 -0.5853 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1898 0.3006 -0.8464 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.1948 -0.5829 -0.9554 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.1756 -0.2039 -1.2392 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.9685 0.0682 0.0193 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.2632 0.4268 -0.3814 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.2809 0.7812 0.4865 N 0 0 0 0 0 0 0 0 0 0 0 0 + -5.3028 1.5586 -0.0342 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.2880 0.4222 1.6901 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.6701 -1.8163 -0.7686 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.9802 -1.7145 -0.5388 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.2801 -0.6792 1.8469 O 0 0 0 0 0 0 0 0 0 0 0 0 + 4.3164 0.2358 -1.1647 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.7069 -1.0404 -1.7477 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.1564 0.6726 -1.8872 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0778 -0.8599 0.6397 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.4221 0.8242 0.5942 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 1 0 + 4 5 2 0 + 5 6 1 0 + 6 7 1 0 + 7 8 1 0 + 8 9 1 0 + 9 10 1 0 + 10 11 1 0 + 10 12 2 0 + 6 13 1 0 + 13 14 2 0 + 2 15 1 0 + 14 4 1 0 + 3 16 1 0 + 7 17 1 0 + 7 18 1 0 + 8 19 1 0 + 8 20 1 0 +M CHG 4 2 1 10 1 11 -1 15 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id2.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id2.mol new file mode 100644 index 0000000000..1b93d06d95 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id2.mol @@ -0,0 +1,95 @@ +id_2 + RDKit 3D + + 44 46 0 0 0 0 0 0 0 0999 V2000 + -2.7584 5.6277 -2.0172 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.5893 6.0496 -1.4280 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.4542 5.4130 -0.0636 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.4299 3.9692 -0.1866 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.3727 3.1672 -0.3486 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.8264 1.9111 -0.4129 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0726 0.7163 -0.5805 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.3187 0.7908 -0.6992 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.0203 0.5251 0.3327 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.4423 0.5600 0.3596 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.2019 -0.5014 0.6873 N 0 0 0 0 0 0 0 0 0 0 0 0 + 5.4936 -0.1668 0.6238 N 0 0 0 0 0 0 0 0 0 0 0 0 + 6.6356 -1.0188 0.9006 C 0 0 0 0 0 0 0 0 0 0 0 0 + 7.1181 -1.7463 -0.3485 C 0 0 0 0 0 0 0 0 0 0 0 0 + 6.1353 -2.5499 -0.8814 O 0 0 0 0 0 0 0 0 0 0 0 0 + 5.5030 1.1050 0.2550 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.2834 1.5728 0.0876 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.7343 -0.5150 -0.6241 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.3186 -0.8460 0.4642 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0443 -2.0492 0.6357 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.3952 -2.1063 0.5194 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.7064 -3.3751 0.7431 N 0 0 0 0 0 0 0 0 0 0 0 0 + -5.0168 -4.0030 0.7446 C 0 0 0 0 0 0 0 0 0 0 0 0 + -5.2938 -4.4801 -0.6613 C 0 0 0 0 0 0 0 0 0 0 0 0 + -6.5163 -5.1010 -0.8028 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.5983 -4.0616 0.9848 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.5446 -3.2567 0.9239 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.1636 2.0019 -0.2853 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.5420 3.2402 -0.1478 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.4258 5.4355 -1.3212 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.5765 7.1651 -1.2698 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.6788 5.8034 -2.0052 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.2949 5.7435 0.5840 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.5347 5.7170 0.4525 H 0 0 0 0 0 0 0 0 0 0 0 0 + 7.4679 -0.5027 1.4049 H 0 0 0 0 0 0 0 0 0 0 0 0 + 6.3312 -1.8427 1.6085 H 0 0 0 0 0 0 0 0 0 0 0 0 + 7.9598 -2.3858 -0.0274 H 0 0 0 0 0 0 0 0 0 0 0 0 + 7.4369 -1.0343 -1.1378 H 0 0 0 0 0 0 0 0 0 0 0 0 + 6.3090 -3.5116 -0.7333 H 0 0 0 0 0 0 0 0 0 0 0 0 + -5.7734 -3.2713 1.0922 H 0 0 0 0 0 0 0 0 0 0 0 0 + -5.0347 -4.8539 1.4525 H 0 0 0 0 0 0 0 0 0 0 0 0 + -4.5080 -5.2238 -0.9095 H 0 0 0 0 0 0 0 0 0 0 0 0 + -5.1762 -3.6230 -1.3568 H 0 0 0 0 0 0 0 0 0 0 0 0 + -7.2766 -4.4877 -0.7075 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 5 6 2 0 + 6 7 1 0 + 7 8 1 0 + 8 9 2 0 + 9 10 1 0 + 10 11 2 0 + 11 12 1 0 + 12 13 1 0 + 13 14 1 0 + 14 15 1 0 + 12 16 1 0 + 16 17 2 0 + 7 18 1 0 + 18 19 2 0 + 19 20 1 0 + 20 21 2 0 + 21 22 1 0 + 22 23 1 0 + 23 24 1 0 + 24 25 1 0 + 22 26 1 0 + 26 27 2 0 + 6 28 1 0 + 28 29 2 0 + 29 4 1 0 + 17 10 1 0 + 27 20 1 0 + 1 30 1 0 + 2 31 1 0 + 2 32 1 0 + 3 33 1 0 + 3 34 1 0 + 13 35 1 0 + 13 36 1 0 + 14 37 1 0 + 14 38 1 0 + 15 39 1 0 + 23 40 1 0 + 23 41 1 0 + 24 42 1 0 + 24 43 1 0 + 25 44 1 0 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id20.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id20.mol new file mode 100644 index 0000000000..740ee8b8b3 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id20.mol @@ -0,0 +1,52 @@ +id_20 + RDKit 3D + + 23 23 0 0 0 0 0 0 0 0999 V2000 + -3.1634 -0.7799 -0.7744 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.8181 -0.5204 -0.2545 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.6354 -0.6391 1.1327 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.4843 0.1316 1.9171 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.7697 -1.3855 1.6378 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.7581 -0.1614 -1.1662 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.5025 0.0586 -0.4805 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.3739 -0.9390 -0.2787 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4430 -0.4857 0.3659 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.5769 -1.2522 0.7543 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.6363 -0.6825 1.4216 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6368 -2.4619 0.4980 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.2495 0.8619 0.5878 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.0132 1.1828 0.0424 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.3790 2.4563 0.0252 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.8631 2.6622 -0.5503 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.9347 3.4479 0.5394 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.9277 -0.7464 0.0117 H 0 0 0 0 0 0 0 0 0 0 0 0 + -3.1620 -1.8289 -1.1785 H 0 0 0 0 0 0 0 0 0 0 0 0 + -3.3932 -0.1225 -1.6431 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.6683 -1.0191 -1.8823 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.0382 0.7037 -1.8138 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.9357 1.5194 1.0883 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 1 0 + 3 4 1 0 + 3 5 2 0 + 2 6 1 0 + 6 7 1 0 + 7 8 1 0 + 8 9 2 0 + 9 10 1 0 + 10 11 1 0 + 10 12 2 0 + 9 13 1 0 + 13 14 2 0 + 14 15 1 0 + 15 16 1 0 + 15 17 2 0 + 14 7 1 0 + 1 18 1 0 + 1 19 1 0 + 1 20 1 0 + 6 21 1 0 + 6 22 1 0 + 13 23 1 0 +M CHG 6 3 1 4 -1 10 1 11 -1 15 1 16 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id21.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id21.mol new file mode 100644 index 0000000000..22a7555a07 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id21.mol @@ -0,0 +1,69 @@ +id_21 + RDKit 3D + + 31 32 0 0 0 0 0 0 0 0999 V2000 + -3.9771 -0.1476 -1.3480 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.9682 0.1094 -0.3667 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.8784 -0.6485 -0.0149 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2101 -0.0084 0.9553 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0105 -0.3640 1.6474 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.2525 0.1991 1.0599 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.5490 -0.2031 -0.3609 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.7927 0.4371 -0.8261 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.8996 1.6152 -1.4318 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.1798 1.8302 -1.6871 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.9037 0.8121 -1.2575 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.0436 -0.0664 -0.7163 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.2974 -1.3296 -0.1088 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.8646 1.1128 1.2007 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.9485 1.2567 0.4340 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.9088 2.3057 0.3849 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.5737 3.6260 0.6595 O 0 0 0 0 0 0 0 0 0 0 0 0 + -5.1074 2.0962 0.0913 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.5697 -1.8955 -0.6031 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.4091 -2.3563 -1.5873 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.6088 -2.6162 -0.2977 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.8304 -0.6557 -1.0288 H 0 0 0 0 0 0 0 0 0 0 0 0 + -3.8331 0.1750 -2.3364 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.1119 -1.4684 1.6394 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0513 -0.0711 2.7135 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.3366 1.3019 1.2081 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.1010 -0.2190 1.6809 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.7568 -1.3135 -0.3831 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.7258 0.0529 -1.0270 H 0 0 0 0 0 0 0 0 0 0 0 0 + 4.4865 -2.1459 -0.7601 H 0 0 0 0 0 0 0 0 0 0 0 0 + 4.2918 -1.4214 0.9264 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 2 0 + 3 4 1 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 1 0 + 8 9 1 0 + 9 10 2 0 + 10 11 1 0 + 11 12 2 0 + 12 13 1 0 + 4 14 1 0 + 14 15 2 0 + 15 16 1 0 + 16 17 1 0 + 16 18 2 0 + 3 19 1 0 + 19 20 1 0 + 19 21 2 0 + 15 2 1 0 + 12 8 1 0 + 1 22 1 0 + 1 23 1 0 + 5 24 1 0 + 5 25 1 0 + 6 26 1 0 + 6 27 1 0 + 7 28 1 0 + 7 29 1 0 + 13 30 1 0 + 13 31 1 0 +M CHG 4 16 1 17 -1 19 1 20 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id22.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id22.mol new file mode 100644 index 0000000000..96b75d3a32 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id22.mol @@ -0,0 +1,56 @@ +id_22 + RDKit 3D + + 25 25 0 0 0 0 0 0 0 0999 V2000 + -3.3243 -1.1791 -1.6275 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.2994 -1.1637 -0.8849 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.3192 -0.4374 0.3653 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0627 -1.3909 1.4097 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0286 -0.9519 2.7012 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.8672 -2.6062 1.2089 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.5958 0.2187 0.5116 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.9628 1.1326 -0.4419 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.3205 -0.0631 1.4930 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2812 0.6798 0.3553 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0627 0.1749 0.1701 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1249 1.1341 0.1364 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.9661 2.4516 0.2626 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.1547 2.9974 0.1813 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.0597 2.0318 0.0048 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4556 0.8706 -0.0271 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.9305 -0.3918 -0.1823 O 0 0 0 0 0 0 0 0 0 0 0 0 + 4.2425 -0.7390 -0.4913 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2200 -1.8640 -1.3500 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2698 1.2240 1.3197 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.5341 1.3941 -0.4570 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.3071 -0.8184 0.0625 H 0 0 0 0 0 0 0 0 0 0 0 0 + 4.1722 -1.5735 -1.2499 H 0 0 0 0 0 0 0 0 0 0 0 0 + 4.8211 0.0859 -0.9249 H 0 0 0 0 0 0 0 0 0 0 0 0 + 4.7887 -1.2165 0.3714 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 4 6 2 0 + 3 7 1 0 + 7 8 1 0 + 7 9 2 0 + 3 10 1 0 + 10 11 1 0 + 11 12 1 0 + 12 13 2 0 + 13 14 1 0 + 14 15 2 0 + 15 16 1 0 + 16 17 1 0 + 17 18 1 0 + 2 19 1 0 + 16 12 1 0 + 10 20 1 0 + 10 21 1 0 + 11 22 1 0 + 18 23 1 0 + 18 24 1 0 + 18 25 1 0 +M CHG 6 2 1 4 1 5 -1 7 1 8 -1 19 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id23.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id23.mol new file mode 100644 index 0000000000..d4845bba47 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id23.mol @@ -0,0 +1,39 @@ +id_23 + RDKit 3D + + 17 16 0 0 0 0 0 0 0 0999 V2000 + -0.0264 -1.9045 -0.2483 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2151 -0.5054 -0.0826 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.2847 0.1618 -0.7438 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1161 0.7887 -2.0342 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.6205 0.1363 0.7274 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.6540 -0.6663 1.3263 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.1561 -0.2763 2.5418 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0750 -1.6952 0.7382 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.5057 1.5325 0.9905 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2394 1.9712 2.0707 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.0960 2.3123 0.2169 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.5921 -2.2800 -1.0487 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.3497 -2.6193 0.4210 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.2114 0.1900 -0.2693 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.6633 1.8007 -1.9817 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.5464 0.1203 -2.7288 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.0996 0.9331 -2.5268 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 1 0 + 3 4 1 0 + 2 5 2 3 + 5 6 1 0 + 6 7 1 0 + 6 8 2 0 + 5 9 1 0 + 9 10 1 0 + 9 11 2 0 + 1 12 1 0 + 1 13 1 0 + 3 14 1 0 + 4 15 1 0 + 4 16 1 0 + 4 17 1 0 +M CHG 4 6 1 7 -1 9 1 10 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id24.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id24.mol new file mode 100644 index 0000000000..3bc7e6e0de --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id24.mol @@ -0,0 +1,35 @@ +id_24 + RDKit 3D + + 15 14 0 0 0 0 0 0 0 0999 V2000 + 0.5720 -1.1533 -1.3005 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.3815 -0.3852 -0.0959 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.4715 -0.3305 0.7940 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.3230 0.7016 0.8995 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.7523 0.2107 0.1201 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.0210 0.9960 1.2978 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.8533 2.3510 1.2078 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.3934 0.4625 2.3628 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.8152 0.1164 -0.8193 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.4822 -1.0756 -0.9801 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.1082 1.1351 -1.4735 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.0455 -0.6372 -2.0915 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2624 -2.1440 -1.3762 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.6154 -1.1777 1.4207 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.7544 0.9303 0.0342 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 1 0 + 3 4 1 0 + 2 5 2 3 + 5 6 1 0 + 6 7 1 0 + 6 8 2 0 + 5 9 1 0 + 9 10 1 0 + 9 11 2 0 + 1 12 1 0 + 1 13 1 0 + 3 14 1 0 + 4 15 1 0 +M CHG 4 6 1 7 -1 9 1 10 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id25.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id25.mol new file mode 100644 index 0000000000..5812e65b09 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id25.mol @@ -0,0 +1,50 @@ +id_25 + RDKit 3D + + 22 22 0 0 0 0 0 0 0 0999 V2000 + -2.3980 -1.7465 1.1666 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.9983 -0.5623 1.1163 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.6580 0.0725 -0.1640 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.2114 0.5082 -0.1554 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.7107 -0.5681 0.0388 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.0867 -0.2522 0.0584 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.6291 0.9833 -0.0899 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.9721 0.8780 -0.0126 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.2702 -0.3834 0.1786 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.1329 -1.0857 0.2243 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.9535 -0.8566 -1.2333 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.3184 -2.0712 -1.2604 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.7770 -0.5716 -2.1322 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.4840 1.2748 -0.2966 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.3556 2.2469 0.6601 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.2832 1.4284 -1.2402 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.8544 0.2146 2.2611 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0158 1.1065 -1.0568 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.1239 1.1866 0.7436 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.4591 -1.5720 0.1684 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.0985 1.9296 -0.2476 H 0 0 0 0 0 0 0 0 0 0 0 0 + 3.0723 -2.1599 0.3725 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 2 0 + 8 9 1 0 + 9 10 2 0 + 3 11 1 0 + 11 12 1 0 + 11 13 2 0 + 3 14 1 0 + 14 15 1 0 + 14 16 2 0 + 2 17 1 0 + 10 6 1 0 + 4 18 1 0 + 4 19 1 0 + 5 20 1 0 + 7 21 1 0 + 10 22 1 0 +M CHG 6 2 1 11 1 12 -1 14 1 15 -1 17 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id26.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id26.mol new file mode 100644 index 0000000000..dba75acd80 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id26.mol @@ -0,0 +1,52 @@ +id_26 + RDKit 3D + + 22 24 0 0 0 0 0 0 0 0999 V2000 + 4.2103 0.0425 1.1267 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6150 0.5070 -0.0983 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.2342 1.0586 -1.1549 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.3703 1.3663 -2.1075 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.1567 1.0010 -1.6488 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.9289 1.0936 -2.2259 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0882 0.6406 -1.5107 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0654 0.1113 -0.2724 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.0918 -0.3466 0.4120 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.3696 -0.2426 -0.2057 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.6380 0.2661 -1.4327 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.9310 0.1890 -1.6470 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.5476 -0.3348 -0.6515 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.6092 -0.6290 0.2933 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.8355 -1.2292 1.5783 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.0071 -1.0086 2.6498 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.8463 -1.9750 1.6635 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.2778 0.0214 0.2941 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.3093 0.4758 -0.4201 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.2842 0.6984 1.9344 H 0 0 0 0 0 0 0 0 0 0 0 0 + 4.5485 -0.9438 1.1589 H 0 0 0 0 0 0 0 0 0 0 0 0 + -1.0363 -0.7618 1.3641 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 2 0 + 3 4 1 0 + 4 5 2 0 + 5 6 1 0 + 6 7 2 0 + 7 8 1 0 + 8 9 1 0 + 9 10 1 0 + 10 11 2 0 + 11 12 1 0 + 12 13 1 0 + 13 14 2 0 + 14 15 1 0 + 15 16 1 0 + 15 17 2 0 + 8 18 2 0 + 18 19 1 0 + 19 2 1 0 + 19 5 1 0 + 14 10 1 0 + 1 20 1 0 + 1 21 1 0 + 9 22 1 0 +M CHG 2 15 1 16 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id27.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id27.mol new file mode 100644 index 0000000000..c62372dac1 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id27.mol @@ -0,0 +1,52 @@ +id_27 + RDKit 3D + + 22 24 0 0 0 0 0 0 0 0999 V2000 + -3.8091 1.6854 0.6307 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.6431 0.3035 0.3478 C 0 0 0 0 0 0 0 0 0 0 0 0 + -4.5704 -0.6776 0.5217 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.0492 -1.8533 0.1489 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.7823 -1.6089 -0.2635 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.8220 -2.4327 -0.7348 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.6242 -1.9457 -1.0821 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.3674 -0.6137 -0.9616 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.9212 -0.1880 -1.3446 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.9761 -0.0290 -0.3854 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.2600 0.3576 -0.6406 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.9297 0.3843 0.5232 C 0 0 0 0 0 0 0 0 0 0 0 0 + 5.2957 0.7383 0.6873 N 0 0 0 0 0 0 0 0 0 0 0 0 + 5.7943 0.7050 1.9892 O 0 0 0 0 0 0 0 0 0 0 0 0 + 5.9995 1.0541 -0.2848 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.0375 0.0142 1.4564 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.8832 -0.2293 0.9137 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.3276 0.2042 -0.4916 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.5296 -0.2897 -0.1436 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.0194 2.3378 0.4552 H 0 0 0 0 0 0 0 0 0 0 0 0 + -4.6835 2.0659 1.0052 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1306 0.0177 -2.3467 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 2 0 + 3 4 1 0 + 4 5 2 0 + 5 6 1 0 + 6 7 2 0 + 7 8 1 0 + 8 9 1 0 + 9 10 1 0 + 10 11 2 0 + 11 12 1 0 + 12 13 1 0 + 13 14 1 0 + 13 15 2 0 + 12 16 2 0 + 16 17 1 0 + 8 18 2 0 + 18 19 1 0 + 19 2 1 0 + 19 5 1 0 + 17 10 1 0 + 1 20 1 0 + 1 21 1 0 + 9 22 1 0 +M CHG 2 13 1 14 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id28.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id28.mol new file mode 100644 index 0000000000..c24f92a13a --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id28.mol @@ -0,0 +1,81 @@ +id_28 + RDKit 3D + + 36 39 0 0 0 0 0 0 0 0999 V2000 + -7.0951 -1.7844 0.6734 O 0 0 0 0 0 0 0 0 0 0 0 0 + -5.9106 -1.7949 0.2038 N 0 0 0 0 0 0 0 0 0 0 0 0 + -5.3729 -0.6073 -0.3367 C 0 0 0 0 0 0 0 0 0 0 0 0 + -6.2053 0.3067 -0.9307 N 0 0 0 0 0 0 0 0 0 0 0 0 + -5.4661 1.3005 -1.3699 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.1528 1.0744 -1.0826 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.1531 1.9940 -1.4427 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.5447 3.1598 -2.1169 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.9449 1.9071 -1.2326 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.0688 -0.1518 -0.4133 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.8514 -0.7203 0.1461 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.6212 -0.4044 -0.2877 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.7067 -1.1074 0.3489 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.7407 -1.0863 0.1872 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.4378 -2.1285 -0.2856 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.7391 -1.7846 -0.3129 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.8971 -0.5320 0.1379 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.0810 0.2771 0.3587 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.0830 1.6533 0.5403 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.0341 2.6051 0.5245 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.2908 3.9620 0.7477 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.8356 2.3519 0.3135 O 0 0 0 0 0 0 0 0 0 0 0 0 + 5.3750 2.0543 0.7442 N 0 0 0 0 0 0 0 0 0 0 0 0 + 6.1744 1.0221 0.7023 N 0 0 0 0 0 0 0 0 0 0 0 0 + 5.4027 -0.0940 0.4672 C 0 0 0 0 0 0 0 0 0 0 0 0 + 6.0319 -1.3597 0.3951 N 0 0 0 0 0 0 0 0 0 0 0 0 + 5.4836 -2.5556 0.7527 O 0 0 0 0 0 0 0 0 0 0 0 0 + 7.2166 -1.4255 -0.0467 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.6371 -0.1316 0.4374 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.3488 -1.9018 1.2202 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.6630 -1.6509 1.0831 N 0 0 0 0 0 0 0 0 0 0 0 0 + -5.2764 -3.0023 0.2873 O 0 0 0 0 0 0 0 0 0 0 0 0 + -5.8948 2.1230 -1.8655 H 0 0 0 0 0 0 0 0 0 0 0 0 + 3.4371 -2.4527 -0.6716 H 0 0 0 0 0 0 0 0 0 0 0 0 + 5.7252 3.0295 0.9143 H 0 0 0 0 0 0 0 0 0 0 0 0 + -3.3460 -2.1448 1.6830 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 2 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 1 0 + 7 9 2 0 + 6 10 2 0 + 10 11 1 0 + 11 12 2 0 + 12 13 1 0 + 13 14 1 0 + 14 15 2 0 + 15 16 1 0 + 16 17 1 0 + 17 18 1 0 + 18 19 2 0 + 19 20 1 0 + 20 21 1 0 + 20 22 2 0 + 19 23 1 0 + 23 24 1 0 + 24 25 2 0 + 25 26 1 0 + 26 27 1 0 + 26 28 2 0 + 17 29 2 0 + 13 30 2 0 + 30 31 1 0 + 2 32 1 0 + 10 3 1 0 + 31 11 1 0 + 29 14 1 0 + 25 18 1 0 + 5 33 1 0 + 16 34 1 0 + 23 35 1 0 + 31 36 1 0 +M CHG 8 2 1 7 1 8 -1 20 1 21 -1 26 1 27 -1 32 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id29.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id29.mol new file mode 100644 index 0000000000..97b9059f9b --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id29.mol @@ -0,0 +1,63 @@ +id_29 + RDKit 3D + + 28 30 0 0 0 0 0 0 0 0999 V2000 + -2.2105 0.8993 4.1784 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.8660 0.6100 2.9427 C 0 0 0 0 0 0 0 0 0 0 0 0 + -4.2152 0.5628 2.8543 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.4963 0.2764 1.5978 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.3631 0.1379 0.8745 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.2856 -0.1715 -0.5184 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0028 -0.2799 -1.1208 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.8869 -0.0947 -0.3931 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.3042 -0.1961 -0.9562 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.3870 -0.4880 -2.2714 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.6622 -0.5998 -2.8886 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.8347 -0.4031 -2.1140 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.8655 -0.1090 -0.7991 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.1797 -0.0046 -0.4507 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.7191 0.2903 0.8217 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.9324 -0.2333 -1.5447 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.0977 -0.4766 -2.5591 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.7307 -0.6717 -2.9926 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.9319 -0.5745 -2.4474 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.3584 0.3511 1.7376 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.6834 0.1665 4.6820 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.2438 1.8650 4.6134 H 0 0 0 0 0 0 0 0 0 0 0 0 + -5.4518 0.1569 1.1496 H 0 0 0 0 0 0 0 0 0 0 0 0 + -4.1477 -0.3093 -1.0567 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.7313 -0.8251 -3.9048 H 0 0 0 0 0 0 0 0 0 0 0 0 + 4.5641 1.2592 1.2016 H 0 0 0 0 0 0 0 0 0 0 0 0 + 5.2590 -0.4432 1.3675 H 0 0 0 0 0 0 0 0 0 0 0 0 + 4.3373 -0.6949 -3.5592 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 2 0 + 3 4 1 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 2 0 + 8 9 1 0 + 9 10 2 0 + 10 11 1 0 + 11 12 1 0 + 12 13 2 0 + 13 14 1 0 + 14 15 1 0 + 14 16 2 0 + 16 17 1 0 + 10 18 1 0 + 18 19 2 0 + 5 20 2 0 + 20 2 1 0 + 19 7 1 0 + 17 12 1 0 + 1 21 1 0 + 1 22 1 0 + 4 23 1 0 + 6 24 1 0 + 11 25 1 0 + 15 26 1 0 + 15 27 1 0 + 17 28 1 0 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id3.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id3.mol new file mode 100644 index 0000000000..065fb34942 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id3.mol @@ -0,0 +1,51 @@ +id_3 + RDKit 3D + + 22 24 0 0 0 0 0 0 0 0999 V2000 + -0.0747 1.3007 0.1489 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0346 -0.1258 -0.0022 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.1766 -0.8533 0.0641 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.7506 -1.2004 -1.1052 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.8872 -1.8535 -1.0716 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.4862 -2.1803 0.1077 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.8901 -1.8210 1.2529 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.7350 -1.1573 1.2607 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.3226 -0.6612 -0.2050 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.1105 -1.0994 0.7927 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.3168 -1.5763 0.5300 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.7752 -1.6330 -0.7331 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.9683 -1.1911 -1.6987 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.7581 -0.7054 -1.4929 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2984 1.8660 0.3480 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.4373 3.1883 0.4918 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.3331 3.9179 0.4311 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.9102 3.4197 0.2364 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.0098 2.1094 0.0989 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.4404 -2.7269 0.0876 H 0 0 0 0 0 0 0 0 0 0 0 0 + 4.7571 -2.0139 -0.9952 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.4535 4.9970 0.5525 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 1 0 + 3 4 2 0 + 4 5 1 0 + 5 6 2 0 + 6 7 1 0 + 7 8 2 0 + 2 9 1 0 + 9 10 2 0 + 10 11 1 0 + 11 12 2 0 + 12 13 1 0 + 13 14 2 0 + 1 15 2 0 + 15 16 1 0 + 16 17 2 0 + 17 18 1 0 + 18 19 2 0 + 19 1 1 0 + 8 3 1 0 + 14 9 1 0 + 6 20 1 0 + 12 21 1 0 + 17 22 1 0 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id30.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id30.mol new file mode 100644 index 0000000000..b27193b4ec --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id30.mol @@ -0,0 +1,55 @@ +id_30 + RDKit 3D + + 24 26 0 0 0 0 0 0 0 0999 V2000 + -3.6498 0.8946 0.1329 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.3429 1.4194 0.2803 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.1538 0.6780 0.0566 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0601 1.2608 0.2215 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1762 0.5819 0.0164 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1493 -0.7071 -0.3619 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.3619 -1.4211 -0.5777 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6076 -0.7820 -0.3964 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.8092 0.4965 -0.0221 N 0 0 0 0 0 0 0 0 0 0 0 0 + 5.1494 0.6724 0.0226 C 0 0 0 0 0 0 0 0 0 0 0 0 + 5.7800 -0.4654 -0.3147 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.8211 -1.3288 -0.5632 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0340 -1.3018 -0.5305 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.1369 -0.6117 -0.3222 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.8142 1.5760 0.3388 N 0 0 0 0 0 0 0 0 0 0 0 0 + -5.8508 0.7548 0.1030 C 0 0 0 0 0 0 0 0 0 0 0 0 + -5.3552 -0.4386 -0.2498 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.0249 -0.3425 -0.2284 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.2415 2.4234 0.5745 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.3230 -2.4201 -0.8709 H 0 0 0 0 0 0 0 0 0 0 0 0 + 5.7067 1.5753 0.2849 H 0 0 0 0 0 0 0 0 0 0 0 0 + 4.9899 -2.3163 -0.8541 H 0 0 0 0 0 0 0 0 0 0 0 0 + -6.9051 0.9609 0.1689 H 0 0 0 0 0 0 0 0 0 0 0 0 + -3.4252 -1.1587 -0.4711 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 1 0 + 3 4 2 0 + 4 5 1 0 + 5 6 2 0 + 6 7 1 0 + 7 8 1 0 + 8 9 2 0 + 9 10 1 0 + 10 11 2 0 + 11 12 1 0 + 6 13 1 0 + 13 14 2 0 + 1 15 2 0 + 15 16 1 0 + 16 17 2 0 + 17 18 1 0 + 18 1 1 0 + 14 3 1 0 + 12 8 1 0 + 2 19 1 0 + 7 20 1 0 + 10 21 1 0 + 12 22 1 0 + 16 23 1 0 + 18 24 1 0 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id31.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id31.mol new file mode 100644 index 0000000000..a854c9c35d --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id31.mol @@ -0,0 +1,64 @@ +id_31 + RDKit 3D + + 28 30 0 0 0 0 0 0 0 0999 V2000 + -7.7793 -1.4148 -0.6990 O 0 0 0 0 0 0 0 0 0 0 0 0 + -7.2978 -0.2896 -0.4101 N 0 0 0 0 0 0 0 0 0 0 0 0 + -5.8943 -0.1159 -0.3146 C 0 0 0 0 0 0 0 0 0 0 0 0 + -5.2952 1.0304 -0.0161 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.9938 0.7783 -0.0269 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.7443 -0.4982 -0.3244 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.5118 -1.1735 -0.4396 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2417 -0.5644 -0.2446 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.0832 0.7329 0.0734 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0978 1.2992 0.2547 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.2319 0.5758 0.1242 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4966 1.1910 0.3205 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.7353 0.5058 0.2032 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.9675 1.0645 0.3847 N 0 0 0 0 0 0 0 0 0 0 0 0 + 5.9126 0.1354 0.1975 C 0 0 0 0 0 0 0 0 0 0 0 0 + 7.3320 0.2783 0.2863 N 0 0 0 0 0 0 0 0 0 0 0 0 + 8.1164 -0.8260 0.0508 O 0 0 0 0 0 0 0 0 0 0 0 0 + 7.8526 1.3763 0.5701 O 0 0 0 0 0 0 0 0 0 0 0 0 + 5.2915 -1.0176 -0.1034 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.9846 -0.7803 -0.0964 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.0751 -0.7210 -0.1936 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.1061 -1.2868 -0.3748 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.9638 -1.0633 -0.5069 N 0 0 0 0 0 0 0 0 0 0 0 0 + -8.1785 0.7560 -0.1923 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.2968 1.5322 0.1810 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.5133 -2.1963 -0.6856 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.5145 2.2067 0.5654 H 0 0 0 0 0 0 0 0 0 0 0 0 + 3.2913 -1.5150 -0.2996 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 2 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 1 0 + 8 9 2 0 + 9 10 1 0 + 10 11 2 0 + 11 12 1 0 + 12 13 1 0 + 13 14 2 0 + 14 15 1 0 + 15 16 1 0 + 16 17 1 0 + 16 18 2 0 + 15 19 2 0 + 19 20 1 0 + 11 21 1 0 + 21 22 2 0 + 6 23 2 0 + 2 24 1 0 + 23 3 1 0 + 22 8 1 0 + 20 13 1 0 + 5 25 1 0 + 7 26 1 0 + 12 27 1 0 + 20 28 1 0 +M CHG 4 2 1 16 1 17 -1 24 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id32.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id32.mol new file mode 100644 index 0000000000..5b67107107 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id32.mol @@ -0,0 +1,64 @@ +id_32 + RDKit 3D + + 28 30 0 0 0 0 0 0 0 0999 V2000 + 7.8613 0.8489 -0.7453 O 0 0 0 0 0 0 0 0 0 0 0 0 + 7.3170 -0.1883 -0.2969 N 0 0 0 0 0 0 0 0 0 0 0 0 + 5.8900 -0.2545 -0.2087 C 0 0 0 0 0 0 0 0 0 0 0 0 + 5.2079 -1.3145 0.2550 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.9119 -0.9993 0.1812 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.7598 0.2378 -0.3195 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.5690 0.9690 -0.5684 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.2641 0.4727 -0.3091 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.1635 1.2303 -0.5727 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.0333 0.7741 -0.3345 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2535 -0.4310 0.1690 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.1910 -1.2076 0.4420 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.0160 -0.7457 0.2011 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.5427 -0.9340 0.4304 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.7501 -0.2293 0.1930 C 0 0 0 0 0 0 0 0 0 0 0 0 + -5.0185 -0.6666 0.4266 N 0 0 0 0 0 0 0 0 0 0 0 0 + -5.9132 0.2722 0.0798 C 0 0 0 0 0 0 0 0 0 0 0 0 + -7.3410 0.1828 0.1775 N 0 0 0 0 0 0 0 0 0 0 0 0 + -7.8938 -0.9886 0.6814 O 0 0 0 0 0 0 0 0 0 0 0 0 + -8.0308 1.1385 -0.1848 O 0 0 0 0 0 0 0 0 0 0 0 0 + -5.2052 1.3174 -0.3790 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.9030 1.0046 -0.3064 N 0 0 0 0 0 0 0 0 0 0 0 0 + 5.0241 0.6956 -0.5612 N 0 0 0 0 0 0 0 0 0 0 0 0 + 8.1057 -1.2419 0.1013 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.1771 -1.6496 0.4792 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.6419 1.9332 -0.9668 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.6513 -1.9128 0.8363 H 0 0 0 0 0 0 0 0 0 0 0 0 + -3.1819 1.6863 -0.6167 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 2 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 1 0 + 8 9 2 0 + 9 10 1 0 + 10 11 2 0 + 11 12 1 0 + 12 13 2 0 + 11 14 1 0 + 14 15 1 0 + 15 16 2 0 + 16 17 1 0 + 17 18 1 0 + 18 19 1 0 + 18 20 2 0 + 17 21 2 0 + 21 22 1 0 + 6 23 2 0 + 2 24 1 0 + 23 3 1 0 + 13 8 1 0 + 22 15 1 0 + 5 25 1 0 + 7 26 1 0 + 14 27 1 0 + 22 28 1 0 +M CHG 4 2 1 18 1 19 -1 24 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id33.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id33.mol new file mode 100644 index 0000000000..528d0df1ad --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id33.mol @@ -0,0 +1,57 @@ +id_33 + RDKit 3D + + 25 26 0 0 0 0 0 0 0 0999 V2000 + 0.4661 -2.3029 1.9121 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.7393 -1.0810 1.7105 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.2089 -0.7464 0.4287 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2953 -0.8177 -0.6906 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.8761 0.0036 -0.5494 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.8557 1.3898 -0.3979 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.5873 2.0235 0.7810 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.1030 2.0653 -1.4251 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.1577 -0.6304 -0.5634 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.4132 -1.9647 -0.7060 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.6819 -2.1341 -0.6674 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.3410 -1.0329 -0.5099 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.4092 -0.0620 -0.4403 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.6929 1.3220 -0.2666 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.9399 2.4398 -0.1159 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.5685 -0.3662 0.3268 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6140 -1.1629 0.6806 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.7440 -0.5706 0.4861 O 0 0 0 0 0 0 0 0 0 0 0 0 + 4.4825 0.5944 0.0142 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.1482 0.7998 -0.1152 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4483 1.9464 -0.5953 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.9052 2.8743 -0.9818 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.5814 -0.1343 2.7020 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0308 -1.8902 -0.7918 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.8253 -0.5626 -1.6308 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 6 8 2 0 + 5 9 1 0 + 9 10 2 0 + 10 11 1 0 + 11 12 1 0 + 12 13 2 0 + 13 14 1 0 + 14 15 3 0 + 3 16 1 0 + 16 17 2 0 + 17 18 1 0 + 18 19 1 0 + 19 20 2 0 + 20 21 1 0 + 21 22 3 0 + 2 23 1 0 + 13 9 1 0 + 20 16 1 0 + 4 24 1 0 + 4 25 1 0 +M CHG 4 2 1 6 1 7 -1 23 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id34.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id34.mol new file mode 100644 index 0000000000..5077baa3c7 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id34.mol @@ -0,0 +1,64 @@ +id_34 + RDKit 3D + + 28 30 0 0 0 0 0 0 0 0999 V2000 + -8.5900 1.0448 0.7622 N 0 0 0 0 0 0 0 0 0 0 0 0 + -7.9097 0.0157 0.8428 N 0 0 0 0 0 0 0 0 0 0 0 0 + -7.2189 -1.0033 0.9168 N 0 0 0 0 0 0 0 0 0 0 0 0 + -5.8232 -0.9806 0.6348 C 0 0 0 0 0 0 0 0 0 0 0 0 + -5.0590 -1.8791 0.0005 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.7956 -1.4458 -0.0373 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.7291 -0.2529 0.5772 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.5896 0.5705 0.7710 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2861 0.2414 0.3231 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.2697 1.0946 0.5585 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.9568 0.8233 0.1573 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.2754 -0.3042 -0.5038 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.5849 -0.6168 -0.9443 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6982 0.2035 -0.7466 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.9742 -0.0623 -1.1554 N 0 0 0 0 0 0 0 0 0 0 0 0 + 5.7812 0.9454 -0.7945 C 0 0 0 0 0 0 0 0 0 0 0 0 + 7.1929 1.0742 -1.0239 N 0 0 0 0 0 0 0 0 0 0 0 0 + 7.9845 0.1730 -0.7298 N 0 0 0 0 0 0 0 0 0 0 0 0 + 8.7622 -0.7372 -0.4226 N 0 0 0 0 0 0 0 0 0 0 0 0 + 5.0416 1.8444 -0.1651 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.7947 1.3987 -0.1373 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2446 -1.1576 -0.7363 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.9845 -0.8878 -0.3353 N 0 0 0 0 0 0 0 0 0 0 0 0 + -5.0016 0.0208 0.9894 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.0452 -2.0063 -0.4906 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.7318 1.4729 1.2763 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.7137 -1.5326 -1.4538 H 0 0 0 0 0 0 0 0 0 0 0 0 + 3.0287 1.9434 0.3110 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 2 0 + 3 4 1 0 + 4 5 2 0 + 5 6 1 0 + 6 7 1 0 + 7 8 1 0 + 8 9 1 0 + 9 10 2 0 + 10 11 1 0 + 11 12 2 0 + 12 13 1 0 + 13 14 1 0 + 14 15 2 0 + 15 16 1 0 + 16 17 1 0 + 17 18 2 0 + 18 19 2 0 + 16 20 2 0 + 20 21 1 0 + 12 22 1 0 + 22 23 2 0 + 7 24 2 0 + 24 4 1 0 + 23 9 1 0 + 21 14 1 0 + 6 25 1 0 + 8 26 1 0 + 13 27 1 0 + 21 28 1 0 +M CHG 4 1 -1 2 1 18 1 19 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id35.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id35.mol new file mode 100644 index 0000000000..88999af433 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id35.mol @@ -0,0 +1,63 @@ +id_35 + RDKit 3D + + 28 30 0 0 0 0 0 0 0 0999 V2000 + 7.1651 -0.6468 -0.3298 C 0 0 0 0 0 0 0 0 0 0 0 0 + 5.7165 -0.5474 -0.3966 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.9332 -0.7574 -1.4623 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6636 -0.5604 -1.0920 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.6242 -0.2235 0.2114 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4748 0.0696 0.9947 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1899 0.0237 0.4118 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.0741 -0.3025 -0.8980 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.1374 -0.3517 -1.4709 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2162 -0.0717 -0.7165 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.5433 -0.1071 -1.2711 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.6753 0.1913 -0.4617 C 0 0 0 0 0 0 0 0 0 0 0 0 + -4.9807 0.2134 -0.7851 N 0 0 0 0 0 0 0 0 0 0 0 0 + -5.6836 0.5460 0.2923 N 0 0 0 0 0 0 0 0 0 0 0 0 + -7.1192 0.6988 0.4383 C 0 0 0 0 0 0 0 0 0 0 0 0 + -4.8406 0.7394 1.3114 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.6134 0.5239 0.8554 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.0717 0.2497 0.5839 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.1145 0.3013 1.1580 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.9073 -0.2239 0.6125 N 0 0 0 0 0 0 0 0 0 0 0 0 + 7.6693 0.3190 -0.5327 H 0 0 0 0 0 0 0 0 0 0 0 0 + 7.5351 -1.4091 -1.0456 H 0 0 0 0 0 0 0 0 0 0 0 0 + 7.4114 -0.9201 0.7232 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.6058 0.3163 1.9992 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.6795 -0.3535 -2.2758 H 0 0 0 0 0 0 0 0 0 0 0 0 + -7.6079 0.8183 -0.5526 H 0 0 0 0 0 0 0 0 0 0 0 0 + -7.3352 1.6348 1.0022 H 0 0 0 0 0 0 0 0 0 0 0 0 + -7.5808 -0.1704 0.9805 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 1 0 + 3 4 2 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 2 0 + 8 9 1 0 + 9 10 2 0 + 10 11 1 0 + 11 12 1 0 + 12 13 2 0 + 13 14 1 0 + 14 15 1 0 + 14 16 1 0 + 16 17 2 0 + 10 18 1 0 + 18 19 2 0 + 5 20 2 0 + 20 2 1 0 + 19 7 1 0 + 17 12 1 0 + 1 21 1 0 + 1 22 1 0 + 1 23 1 0 + 6 24 1 0 + 11 25 1 0 + 15 26 1 0 + 15 27 1 0 + 15 28 1 0 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id36.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id36.mol new file mode 100644 index 0000000000..31582829f0 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id36.mol @@ -0,0 +1,28 @@ +id_36 + RDKit 3D + + 11 12 0 0 0 0 0 0 0 0999 V2000 + 0.2784 -1.0068 0.0761 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.5291 -1.4938 0.0747 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.3733 -0.5051 -0.0382 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.6804 0.6586 -0.1135 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.3809 0.3300 -0.0411 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.7084 1.0802 -0.0676 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.9363 0.5382 0.0205 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0193 -0.7932 0.1365 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.9317 -1.5702 0.1653 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.1676 1.6091 -0.2109 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.8140 1.1529 -0.0018 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 2 0 + 4 5 1 0 + 5 6 1 0 + 6 7 2 0 + 7 8 1 0 + 8 9 2 0 + 5 1 1 0 + 9 1 1 0 + 4 10 1 0 + 7 11 1 0 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id37.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id37.mol new file mode 100644 index 0000000000..a89d6b3f22 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id37.mol @@ -0,0 +1,70 @@ +id_37 + RDKit 3D + + 31 32 0 0 0 0 0 0 0 0999 V2000 + 3.9632 -2.8079 -1.0978 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.3800 -2.5728 -0.0229 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.6766 -1.3481 0.1944 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.5822 -1.1767 0.9540 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1975 0.1038 0.9266 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.0295 0.8079 0.1481 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.0269 2.1904 -0.1717 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1051 3.0882 0.3056 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.9048 2.6591 -0.9353 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.9631 -0.1000 -0.3162 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.0579 0.1721 -1.1841 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.9410 -0.2787 -2.4831 O 0 0 0 0 0 0 0 0 0 0 0 0 + 5.0822 0.7840 -0.8240 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0361 0.6275 1.6412 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.1515 0.5311 0.8146 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0429 -0.4739 0.7223 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0367 -1.7001 1.4363 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.0752 -2.0364 2.3596 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.9330 -2.5463 1.2454 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.0048 -0.1176 -0.2037 C 0 0 0 0 0 0 0 0 0 0 0 0 + -4.1442 -0.8387 -0.6477 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.0582 -1.3812 -1.9274 O 0 0 0 0 0 0 0 0 0 0 0 0 + -5.1409 -0.9685 0.0632 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.6701 1.1343 -0.6695 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.3160 1.9557 -1.6279 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.0683 1.3665 -2.6078 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.1861 3.2149 -1.5626 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.5542 1.4752 -0.0277 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.4111 -3.5233 0.9888 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.1328 0.0663 2.5966 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.1578 1.6932 1.9130 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 2 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 1 0 + 7 9 2 0 + 6 10 2 0 + 10 11 1 0 + 11 12 1 0 + 11 13 2 0 + 5 14 1 0 + 14 15 1 0 + 15 16 1 0 + 16 17 1 0 + 17 18 1 0 + 17 19 2 0 + 16 20 2 0 + 20 21 1 0 + 21 22 1 0 + 21 23 2 0 + 20 24 1 0 + 24 25 1 0 + 25 26 1 0 + 25 27 2 0 + 24 28 2 0 + 2 29 1 0 + 10 3 1 0 + 28 15 1 0 + 14 30 1 0 + 14 31 1 0 +M CHG 8 2 1 7 1 8 -1 11 1 12 -1 17 1 18 -1 21 1 +M CHG 4 22 -1 25 1 26 -1 29 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id38.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id38.mol new file mode 100644 index 0000000000..90872abedd --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id38.mol @@ -0,0 +1,63 @@ +id_38 + RDKit 3D + + 28 30 0 0 0 0 0 0 0 0999 V2000 + 6.2163 0.8307 0.3575 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.8270 1.1215 0.1082 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.2906 2.2778 -0.3288 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.9516 2.0640 -0.4079 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.0549 3.0853 -0.8408 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.8021 0.2393 0.2820 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.6744 0.8047 -0.0278 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.3685 0.2391 0.0114 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2913 0.9651 -0.3453 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.9535 0.4607 -0.3192 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.1265 -0.8141 0.0775 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.4491 -1.3282 0.0980 N 0 0 0 0 0 0 0 0 0 0 0 0 + -3.5265 -0.6062 -0.2574 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.5902 0.7508 -0.7072 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.6352 -1.3780 -0.1290 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.2310 -2.5691 0.3045 C 0 0 0 0 0 0 0 0 0 0 0 0 + -5.0814 -3.6993 0.5785 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.8855 -2.5284 0.4410 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0584 -1.5511 0.4368 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1830 -1.0362 0.4069 N 0 0 0 0 0 0 0 0 0 0 0 0 + 6.5318 0.4625 1.3024 H 0 0 0 0 0 0 0 0 0 0 0 0 + 6.9329 0.9818 -0.3988 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.2207 2.8838 -1.4495 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.1959 4.0914 -0.5642 H 0 0 0 0 0 0 0 0 0 0 0 0 + -3.2398 1.4825 -0.0380 H 0 0 0 0 0 0 0 0 0 0 0 0 + -3.9695 1.0056 -1.6624 H 0 0 0 0 0 0 0 0 0 0 0 0 + -5.1035 -4.1189 1.5343 H 0 0 0 0 0 0 0 0 0 0 0 0 + -5.6910 -4.1171 -0.1785 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 1 0 + 3 4 2 0 + 4 5 1 0 + 2 6 2 0 + 6 7 1 0 + 7 8 1 0 + 8 9 2 0 + 9 10 1 0 + 10 11 2 0 + 11 12 1 0 + 12 13 1 0 + 13 14 1 0 + 13 15 2 0 + 15 16 1 0 + 16 17 1 0 + 16 18 2 0 + 11 19 1 0 + 19 20 2 0 + 7 4 1 0 + 20 8 1 0 + 18 12 1 0 + 1 21 1 0 + 1 22 1 0 + 5 23 1 0 + 5 24 1 0 + 14 25 1 0 + 14 26 1 0 + 17 27 1 0 + 17 28 1 0 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id39.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id39.mol new file mode 100644 index 0000000000..dbd6bb9c36 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id39.mol @@ -0,0 +1,58 @@ +id_39 + RDKit 3D + + 26 26 0 0 0 0 0 0 0 0999 V2000 + 1.8049 -2.5637 1.2788 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.1638 -1.3274 0.6712 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.4160 -0.9015 0.4589 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.3504 0.3043 -0.1326 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.4297 1.1360 -0.5436 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.1372 2.3424 -1.1347 O 0 0 0 0 0 0 0 0 0 0 0 0 + 5.6194 0.7665 -0.3654 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.0562 0.5791 -0.2641 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.2958 -0.4027 0.2197 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.1084 -0.4667 0.2547 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.8478 0.6281 -0.2805 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.3394 0.4999 -0.2123 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.7715 0.3701 1.1497 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.3710 -0.6594 1.9810 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.5587 1.2047 1.6810 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.8716 1.7441 -0.7384 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.5631 2.1081 -2.0344 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.5960 2.5055 -0.0788 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.8474 -0.6316 -0.9555 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.6201 -0.7236 -2.3290 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.4994 -1.5631 -0.4235 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.0697 -2.6110 2.0341 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.2899 -3.4556 0.9624 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.5509 -1.2970 0.6631 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.6087 1.5530 0.3230 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.4791 0.8616 -1.2987 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 1 0 + 2 3 2 0 + 3 4 1 0 + 4 5 1 0 + 5 6 1 0 + 5 7 2 0 + 4 8 2 0 + 8 9 1 0 + 9 10 1 0 + 10 11 1 0 + 11 12 1 0 + 12 13 1 0 + 13 14 1 0 + 13 15 2 0 + 12 16 1 0 + 16 17 1 0 + 16 18 2 0 + 12 19 1 0 + 19 20 1 0 + 19 21 2 0 + 9 2 1 0 + 1 22 1 0 + 1 23 1 0 + 10 24 1 0 + 11 25 1 0 + 11 26 1 0 +M CHG 8 5 1 6 -1 13 1 14 -1 16 1 17 -1 19 1 20 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id4.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id4.mol new file mode 100644 index 0000000000..d33421a9f4 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id4.mol @@ -0,0 +1,121 @@ +id_4 + RDKit 2D + + 57 56 0 0 0 0 0 0 0 0999 V2000 + -2.2500 -1.2990 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.5000 0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.0000 0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.7500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.5000 2.5981 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 6.0000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 7.5000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 9.0000 2.5981 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 9.7500 1.2990 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 9.7500 3.8971 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 7.5000 4.0981 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 8.7990 4.8481 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 6.3021 5.0008 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 7.5000 1.0981 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 8.7990 0.3481 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 6.3021 0.1953 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 5.0490 0.5490 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 5.0490 -0.9510 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 5.0490 -2.4510 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 5.0490 -3.9510 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.7500 -4.7010 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 6.3481 -4.7010 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.5490 -2.4510 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.7990 -3.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.6463 -1.2530 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 6.5490 -2.4510 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 7.2990 -3.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 7.4518 -1.2530 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4510 2.0490 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4510 3.5490 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4510 5.0490 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4510 6.5490 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1519 7.2990 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.7500 7.2990 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.9510 5.0490 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.7010 6.3481 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 4.8537 3.8511 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.9510 5.0490 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2010 6.3481 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0482 3.8511 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0000 1.5000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2990 2.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1979 2.4028 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0000 -1.5000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2990 -2.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1979 -2.4028 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.2500 1.2990 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.6828 -1.4888 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.6828 1.4888 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 5.8172 1.1093 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 5.8172 4.0869 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 6.5379 -0.7681 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 3.5602 -0.7681 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 3.9398 3.3662 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.9621 3.3662 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 1 0 + 8 9 1 0 + 9 10 1 0 + 10 11 1 0 + 10 12 2 0 + 9 13 1 0 + 13 14 1 0 + 13 15 2 0 + 9 16 1 0 + 16 17 1 0 + 16 18 2 0 + 6 19 1 0 + 19 20 1 0 + 20 21 1 0 + 21 22 1 0 + 22 23 1 0 + 22 24 2 0 + 21 25 1 0 + 25 26 1 0 + 25 27 2 0 + 21 28 1 0 + 28 29 1 0 + 28 30 2 0 + 6 31 1 0 + 31 32 1 0 + 32 33 1 0 + 33 34 1 0 + 34 35 1 0 + 34 36 2 0 + 33 37 1 0 + 37 38 1 0 + 37 39 2 0 + 33 40 1 0 + 40 41 1 0 + 40 42 2 0 + 3 43 1 0 + 43 44 1 0 + 43 45 2 0 + 3 46 1 0 + 46 47 1 0 + 46 48 2 0 + 2 49 1 0 + 4 50 1 0 + 4 51 1 0 + 8 52 1 0 + 8 53 1 0 + 20 54 1 0 + 20 55 1 0 + 32 56 1 0 + 32 57 1 0 +M CHG 8 2 1 10 1 11 -1 13 1 14 -1 16 1 17 -1 22 1 +M CHG 8 23 -1 25 1 26 -1 28 1 29 -1 34 1 35 -1 37 1 +M CHG 8 38 -1 40 1 41 -1 43 1 44 -1 46 1 47 -1 49 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id5.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id5.mol new file mode 100644 index 0000000000..b3e19ba7e0 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id5.mol @@ -0,0 +1,121 @@ +id_5 + RDKit 2D + + 57 56 0 0 0 0 0 0 0 0999 V2000 + -2.2500 -1.2990 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.5000 0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.5000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.0000 0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.7500 1.2990 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.5000 2.5981 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 6.0000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 7.5000 2.5981 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 9.0000 2.5981 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 9.7500 1.2990 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 9.7500 3.8971 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 7.5000 4.0981 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 8.7990 4.8481 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 6.3021 5.0008 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 7.5000 1.0981 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 8.7990 0.3481 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 6.3021 0.1953 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 5.0490 0.5490 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 5.0490 -0.9510 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 5.0490 -2.4510 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 5.0490 -3.9510 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.7500 -4.7010 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 6.3481 -4.7010 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.5490 -2.4510 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.7990 -3.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.6463 -1.2530 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 6.5490 -2.4510 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 7.2990 -3.7500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 7.4518 -1.2530 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4510 2.0490 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4510 3.5490 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4510 5.0490 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4510 6.5490 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1519 7.2990 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.7500 7.2990 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.9510 5.0490 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.7010 6.3481 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 4.8537 3.8511 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.9510 5.0490 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2010 6.3481 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0482 3.8511 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0000 1.5000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2990 2.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1979 2.4028 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0000 -1.5000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.2990 -2.2500 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1979 -2.4028 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.2500 1.2990 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.6828 -1.4888 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.6828 1.4888 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 5.8172 1.1093 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 5.8172 4.0869 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 6.5379 -0.7681 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 3.5602 -0.7681 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 3.9398 3.3662 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.9621 3.3662 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 1 0 + 8 9 1 0 + 9 10 1 0 + 10 11 1 0 + 10 12 2 0 + 9 13 1 0 + 13 14 1 0 + 13 15 2 0 + 9 16 1 0 + 16 17 1 0 + 16 18 2 0 + 6 19 1 0 + 19 20 1 0 + 20 21 1 0 + 21 22 1 0 + 22 23 1 0 + 22 24 2 0 + 21 25 1 0 + 25 26 1 0 + 25 27 2 0 + 21 28 1 0 + 28 29 1 0 + 28 30 2 0 + 6 31 1 0 + 31 32 1 0 + 32 33 1 0 + 33 34 1 0 + 34 35 1 0 + 34 36 2 0 + 33 37 1 0 + 37 38 1 0 + 37 39 2 0 + 33 40 1 0 + 40 41 1 0 + 40 42 2 0 + 3 43 1 0 + 43 44 1 0 + 43 45 2 0 + 3 46 1 0 + 46 47 1 0 + 46 48 2 0 + 2 49 1 0 + 4 50 1 0 + 4 51 1 0 + 8 52 1 0 + 8 53 1 0 + 20 54 1 0 + 20 55 1 0 + 32 56 1 0 + 32 57 1 0 +M CHG 8 2 1 10 1 11 -1 13 1 14 -1 16 1 17 -1 22 1 +M CHG 8 23 -1 25 1 26 -1 28 1 29 -1 34 1 35 -1 37 1 +M CHG 8 38 -1 40 1 41 -1 43 1 44 -1 46 1 47 -1 49 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id6.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id6.mol new file mode 100644 index 0000000000..aa18ef6ca0 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id6.mol @@ -0,0 +1,69 @@ +id_6 + RDKit 3D + + 32 31 0 0 0 0 0 0 0 0999 V2000 + -3.9615 -0.6058 -1.7997 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.3411 -1.3483 -0.9950 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0329 -0.9888 -0.6718 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.4500 0.1777 -1.2457 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0452 0.2786 -0.6952 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.6509 1.3902 -1.1798 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.0485 2.3942 -0.3086 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.7595 3.5543 -0.7267 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.1584 4.5644 0.1557 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.8516 5.6858 -0.2822 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.8865 4.4540 1.3530 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.7855 2.3120 0.9256 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.6560 -1.0219 -0.9350 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.9231 -1.1283 -0.3494 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.1238 -1.0314 1.0178 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.4596 -1.1563 1.4861 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.8052 -1.0787 2.8402 N 0 0 0 0 0 0 0 0 0 0 0 0 + 5.1111 -1.2030 3.2742 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.9103 -0.8895 3.7080 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.1899 -0.8432 1.8233 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.9942 -2.4834 -0.4745 N 0 0 0 0 0 0 0 0 0 0 0 0 + -5.3015 -2.7895 -0.8355 N 0 0 0 0 0 0 0 0 0 0 0 0 + -5.9902 -3.8818 -0.3617 O 0 0 0 0 0 0 0 0 0 0 0 0 + -5.9142 -2.0496 -1.6346 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.4708 0.0023 -2.3356 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0503 1.0918 -1.0636 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.1685 0.4057 0.4001 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.9879 3.6441 -1.7413 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0155 -1.8400 -0.5387 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.6676 -1.2012 -2.0283 H 0 0 0 0 0 0 0 0 0 0 0 0 + 4.2408 -1.3147 0.8019 H 0 0 0 0 0 0 0 0 0 0 0 0 + -3.4801 -3.1000 0.1932 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 1 0 + 8 9 1 0 + 9 10 1 0 + 9 11 2 0 + 7 12 2 0 + 5 13 1 0 + 13 14 1 0 + 14 15 1 0 + 15 16 1 0 + 16 17 1 0 + 17 18 1 0 + 17 19 2 0 + 15 20 2 0 + 2 21 1 0 + 21 22 1 0 + 22 23 1 0 + 22 24 2 0 + 4 25 1 0 + 4 26 1 0 + 5 27 1 0 + 8 28 1 0 + 13 29 1 0 + 13 30 1 0 + 16 31 1 0 + 21 32 1 0 +M CHG 6 9 1 10 -1 17 1 18 -1 22 1 23 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id7.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id7.mol new file mode 100644 index 0000000000..a55148536b --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id7.mol @@ -0,0 +1,45 @@ +id_7 + RDKit 3D + + 20 19 0 0 0 0 0 0 0 0999 V2000 + -3.7021 -1.3032 1.0099 O 0 0 0 0 0 0 0 0 0 0 0 0 + -3.3063 -1.1595 -0.1765 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0129 -0.7550 -0.3611 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.4453 0.3411 0.3599 C 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0071 0.5846 -0.0255 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.7808 -0.6822 0.1266 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.0951 -0.5502 -0.3800 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.9379 -1.6318 -0.3100 N 0 0 0 0 0 0 0 0 0 0 0 0 + 4.1758 -1.5243 -0.9413 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.6181 -2.6907 0.2992 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.5934 1.6560 0.6602 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.0813 2.7867 0.0686 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.3455 3.2021 0.4614 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.4133 3.4092 -0.7838 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.1634 -1.4066 -1.2416 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.4592 0.0138 1.4262 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.0812 1.2323 0.1899 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0006 0.8448 -1.1048 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.2672 -1.4588 -0.4720 H 0 0 0 0 0 0 0 0 0 0 0 0 + 0.8686 -0.9085 1.1947 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 1 0 + 8 9 1 0 + 8 10 2 0 + 5 11 1 0 + 11 12 1 0 + 12 13 1 0 + 12 14 2 0 + 2 15 1 0 + 4 16 1 0 + 4 17 1 0 + 5 18 1 0 + 6 19 1 0 + 6 20 1 0 +M CHG 6 2 1 8 1 9 -1 12 1 13 -1 15 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id8.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id8.mol new file mode 100644 index 0000000000..fa826f87d2 --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id8.mol @@ -0,0 +1,70 @@ +id_8 + RDKit 3D + + 32 31 0 0 0 0 0 0 0 0999 V2000 + 0.4149 -1.6700 -3.2043 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.6109 -1.6184 -2.4952 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.8443 -0.6123 -1.5863 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.8728 -0.8376 -0.2223 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.0272 -0.0448 0.6463 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.4586 -0.3060 0.6306 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.2668 0.1539 -0.5224 C 0 0 0 0 0 0 0 0 0 0 0 0 + 2.0984 1.5335 -0.8284 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.7339 2.1822 -1.8421 N 0 0 0 0 0 0 0 0 0 0 0 0 + 2.0990 3.2635 -2.4130 O 0 0 0 0 0 0 0 0 0 0 0 0 + 3.8528 1.8689 -2.2941 O 0 0 0 0 0 0 0 0 0 0 0 0 + 1.7379 -1.7061 0.8093 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4263 -2.0720 1.9305 N 0 0 0 0 0 0 0 0 0 0 0 0 + 3.1201 -3.2538 1.9175 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.4699 -1.3995 2.9794 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.3019 1.3245 0.4728 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.9071 2.0782 1.4356 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.0618 3.4224 1.1837 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.3085 1.5527 2.5172 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.3217 -0.6804 0.2071 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.7367 0.6500 -0.1177 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.0234 1.0265 0.1801 N 0 0 0 0 0 0 0 0 0 0 0 0 + -4.5425 0.9411 1.4600 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.7108 1.4579 -0.7859 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.5790 -2.6059 -2.6048 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.6752 -1.9424 -0.0815 H 0 0 0 0 0 0 0 0 0 0 0 0 + -0.3361 -0.2483 1.7008 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1.9187 0.1553 1.5357 H 0 0 0 0 0 0 0 0 0 0 0 0 + 2.2147 -0.4874 -1.4307 H 0 0 0 0 0 0 0 0 0 0 0 0 + 3.3396 0.0746 -0.2256 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.3692 -0.7603 1.3015 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.9771 -1.4402 -0.2539 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 5 6 1 0 + 6 7 1 0 + 7 8 1 0 + 8 9 1 0 + 9 10 1 0 + 9 11 2 0 + 6 12 1 0 + 12 13 1 0 + 13 14 1 0 + 13 15 2 0 + 5 16 1 0 + 16 17 1 0 + 17 18 1 0 + 17 19 2 0 + 4 20 1 0 + 20 21 1 0 + 21 22 1 0 + 22 23 1 0 + 22 24 2 0 + 2 25 1 0 + 4 26 1 0 + 5 27 1 0 + 6 28 1 0 + 7 29 1 0 + 7 30 1 0 + 20 31 1 0 + 20 32 1 0 +M CHG 8 2 1 9 1 10 -1 13 1 14 -1 17 1 18 -1 22 1 +M CHG 2 23 -1 25 -1 +M END diff --git a/deepmd/deepmd_property_tools/DATA/mol_convert/id9.mol b/deepmd/deepmd_property_tools/DATA/mol_convert/id9.mol new file mode 100644 index 0000000000..8bf5ebdddd --- /dev/null +++ b/deepmd/deepmd_property_tools/DATA/mol_convert/id9.mol @@ -0,0 +1,72 @@ +id_9 + RDKit 3D + + 33 33 0 0 0 0 0 0 0 0999 V2000 + 2.7056 1.8450 -0.5110 O 0 0 0 0 0 0 0 0 0 0 0 0 + 2.3194 0.6619 -0.2559 C 0 0 0 0 0 0 0 0 0 0 0 0 + 3.0820 -0.4477 -0.6052 O 0 0 0 0 0 0 0 0 0 0 0 0 + 4.3112 -0.2912 -1.2552 C 0 0 0 0 0 0 0 0 0 0 0 0 + 4.8902 -1.6782 -1.4959 C 0 0 0 0 0 0 0 0 0 0 0 0 + 1.0631 0.5473 0.4064 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.3582 1.7283 0.7222 C 0 0 0 0 0 0 0 0 0 0 0 0 + 0.8110 2.9598 0.4301 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.0738 3.8207 0.8544 O 0 0 0 0 0 0 0 0 0 0 0 0 + -1.0879 3.2131 1.4123 N 0 0 0 0 0 0 0 0 0 0 0 0 + -0.8559 1.8900 1.3503 C 0 0 0 0 0 0 0 0 0 0 0 0 + -1.6854 0.8652 1.8302 N 0 0 0 0 0 0 0 0 0 0 0 0 + -1.5057 0.4293 3.1500 N 0 0 0 0 0 0 0 0 0 0 0 0 + -2.3112 -0.5740 3.6338 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.6458 0.9096 3.9121 O 0 0 0 0 0 0 0 0 0 0 0 0 + -2.7025 0.2342 1.0648 C 0 0 0 0 0 0 0 0 0 0 0 0 + -2.9677 0.5863 -0.2528 O 0 0 0 0 0 0 0 0 0 0 0 0 + -4.0048 -0.0991 -0.9424 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.7554 -1.5885 -1.0359 C 0 0 0 0 0 0 0 0 0 0 0 0 + -3.4356 -0.6949 1.5398 O 0 0 0 0 0 0 0 0 0 0 0 0 + 0.5949 -0.7341 0.7088 N 0 0 0 0 0 0 0 0 0 0 0 0 + 0.9134 -1.3347 1.9239 O 0 0 0 0 0 0 0 0 0 0 0 0 + -0.1103 -1.3098 -0.1426 O 0 0 0 0 0 0 0 0 0 0 0 0 + 4.1915 0.2429 -2.2276 H 0 0 0 0 0 0 0 0 0 0 0 0 + 4.9630 0.3371 -0.6128 H 0 0 0 0 0 0 0 0 0 0 0 0 + 4.1390 -2.4729 -1.3680 H 0 0 0 0 0 0 0 0 0 0 0 0 + 5.3056 -1.7265 -2.5122 H 0 0 0 0 0 0 0 0 0 0 0 0 + 5.6577 -1.8498 -0.6968 H 0 0 0 0 0 0 0 0 0 0 0 0 + -4.1702 0.3498 -1.9350 H 0 0 0 0 0 0 0 0 0 0 0 0 + -4.9307 0.0827 -0.3362 H 0 0 0 0 0 0 0 0 0 0 0 0 + -2.6887 -1.8290 -0.9484 H 0 0 0 0 0 0 0 0 0 0 0 0 + -4.0970 -1.9059 -2.0512 H 0 0 0 0 0 0 0 0 0 0 0 0 + -4.2772 -2.1671 -0.2562 H 0 0 0 0 0 0 0 0 0 0 0 0 + 1 2 2 0 + 2 3 1 0 + 3 4 1 0 + 4 5 1 0 + 2 6 1 0 + 6 7 1 0 + 7 8 2 0 + 8 9 1 0 + 9 10 1 0 + 10 11 2 0 + 11 12 1 0 + 12 13 1 0 + 13 14 1 0 + 13 15 2 0 + 12 16 1 0 + 16 17 1 0 + 17 18 1 0 + 18 19 1 0 + 16 20 2 0 + 6 21 1 0 + 21 22 1 0 + 21 23 2 0 + 11 7 1 0 + 4 24 1 0 + 4 25 1 0 + 5 26 1 0 + 5 27 1 0 + 5 28 1 0 + 18 29 1 0 + 18 30 1 0 + 19 31 1 0 + 19 32 1 0 + 19 33 1 0 +M CHG 4 13 1 14 -1 21 1 22 -1 +M END diff --git a/deepmd/deepmd_property_tools/DPA3_finetune_hyperparameters.md b/deepmd/deepmd_property_tools/DPA3_finetune_hyperparameters.md new file mode 100644 index 0000000000..15d632ab52 --- /dev/null +++ b/deepmd/deepmd_property_tools/DPA3_finetune_hyperparameters.md @@ -0,0 +1,480 @@ +# DPA3 预训练微调参数说明 + +本文说明使用 `DPA-3.2-5M.pt` 这类 DPA3 预训练模型做分子性质微调时,哪些参数应与预训练模型保持一致,哪些参数可以根据新任务自行设置。 + +## 1. 总体原则 + +预训练微调可以理解为: + +```text +DPA3 descriptor 使用预训练模型权重 +property fitting net / property head 面向新性质重新训练 +``` + +因此参数可以分成两类: + +```text +模型结构参数:应尽量和预训练模型一致,否则权重加载会失败 +训练任务参数:可以按当前数据和任务重新设置 +``` + +在当前 `deepmd_property_tools` 中,推荐使用: + +```python +PropertyTrain( + ..., + finetune=PRETRAINED_MODEL, + use_pretrain_script=True, +) +``` + +其中 `use_pretrain_script=True` 会让 DeePMD-kit 根据预训练模型里的 `model_params` 自动修正当前 `input.json` 中的模型结构,使其更容易和 `DPA-3.2-5M.pt` 对齐。 + +______________________________________________________________________ + +## 2. 应与预训练模型保持一致的参数 + +这些参数通常决定模型权重张量的形状或模型 forward 逻辑。如果和预训练模型不一致,容易出现: + +```text +size mismatch +missing key +unexpected key +``` + +### 2.1 `model.type_map` + +示例: + +```json +"type_map": ["H", "C", "N", "O"] +``` + +微调数据中的元素类型应被预训练模型支持。当前 20 条 demo 数据自动生成: + +```json +[ + "H", + "C", + "N", + "O" +] +``` + +如果使用全量数据且包含 `I`,则可能生成: + +```json +[ + "H", + "C", + "N", + "O", + "I" +] +``` + +需要确认预训练模型支持这些元素。 + +### 2.2 `model.descriptor.type` + +必须是: + +```json +"type": "dpa3" +``` + +因为微调目标是继承 DPA3 descriptor。 + +### 2.3 DPA3 repflow 维度参数 + +这些参数应与预训练模型一致: + +```json +"n_dim": 128, +"e_dim": 64, +"a_dim": 32 +``` + +含义: + +- `n_dim`:节点表示维度 +- `e_dim`:边表示维度 +- `a_dim`:角表示维度 + +这些参数改变后,descriptor 内部权重矩阵形状会改变。 + +### 2.4 DPA3 层数 + +```json +"nlayers": 24 +``` + +注意:当前工具原始 `input.json` 模板中可能是: + +```json +"nlayers": 16 +``` + +但使用 `DPA-3.2-5M.pt` 并开启 `use_pretrain_script=True` 后,DeePMD-kit 会在 `input_v2_compat.json` / `out.json` 中把它改成预训练模型实际使用的层数,例如: + +```json +"nlayers": 24 +``` + +这类结构参数应以预训练模型为准。 + +### 2.5 cutoff 和 neighbor selection 参数 + +这些参数建议和预训练模型一致: + +```json +"e_rcut": 6.0, +"e_rcut_smth": 5.3, +"e_sel": 1200, +"a_rcut": 4.0, +"a_rcut_smth": 3.5, +"a_sel": 300, +"axis_neuron": 4 +``` + +含义: + +- `e_rcut` / `e_rcut_smth`:边距离 cutoff 与平滑区间 +- `e_sel`:边邻居选择数量 +- `a_rcut` / `a_rcut_smth`:角相关 cutoff 与平滑区间 +- `a_sel`:角邻居选择数量 +- `axis_neuron`:descriptor 内部投影维度相关参数 + +### 2.6 activation 和其他 descriptor 开关 + +预训练兼容后的配置中可能包含: + +```json +"activation_function": "custom_silu:3.0", +"precision": "float32", +"use_tebd_bias": false, +"concat_output_tebd": false, +"use_loc_mapping": true, +"skip_stat": true, +"edge_init_use_dist": true, +"use_exp_switch": true, +"n_multi_edge_message": 1, +"optim_update": true +``` + +这些参数有些会影响模型结构,有些会影响模型计算逻辑。做预训练微调时,不建议手动随意修改。 + +______________________________________________________________________ + +## 3. 可以根据当前任务设置的参数 + +这些参数主要控制当前微调任务,不需要和预训练模型完全一致。 + +### 3.1 训练数据路径 + +例如: + +```json +"training_data": { + "systems": [ + "prepared_data/train/10", + "prepared_data/train/15" + ] +} +``` + +这些应使用当前任务生成的数据路径。 + +### 3.2 验证数据路径 + +例如: + +```json +"validation_data": { + "systems": [ + "prepared_data/valid/22" + ] +} +``` + +同样由当前任务数据决定。 + +### 3.3 训练步数 + +可以自行设置: + +```python +numb_steps = 10 +``` + +或正式训练时设置更大: + +```python +numb_steps = 10000 +numb_steps = 50000 +numb_steps = 200000 +``` + +当前 20 条 demo 数据只用于 smoke test,`10` steps 只是验证流程。 + +### 3.4 batch size + +可以根据数据量和显存调整: + +```python +batch_size = 1 +``` + +或使用 DeePMD 支持的自动 batch: + +```python +batch_size = "auto:512" +``` + +当前 20 条 demo 数据中很多 system 只有 1-2 个样本,如果设置: + +```python +batch_size = 1024 +``` + +会出现 warning: + +```text +required batch size is larger than the size of the dataset +``` + +这不是致命错误,但小数据测试时 `batch_size=1` 更自然。 + +### 3.5 learning rate + +微调通常使用比从头训练更小的学习率。 + +从头训练常见: + +```json +"start_lr": 1e-3 +``` + +预训练微调可用: + +```json +"start_lr": 1e-4, +"stop_lr": 1e-6 +``` + +在 `train_property_20.py` 中可通过 `input_updates` 设置: + +```python +input_updates = { + "learning_rate": { + "type": "exp", + "decay_steps": 1000, + "start_lr": 1e-4, + "stop_lr": 1e-6, + } +} +``` + +### 3.6 loss + +性质预测任务使用: + +```json +"loss": { + "type": "property", + "metric": ["mae", "rmse"], + "loss_func": "smooth_mae", + "beta": 1.0 +} +``` + +这个由新任务决定,不需要和预训练模型原任务一致。 + +### 3.7 property name / property column + +例如: + +```python +property_name = "Property" +property_col = "Property" +``` + +含义: + +- `property_col`:CSV 中读取哪一列作为标签 +- `property_name`:写入 DeePMD 数据和 fitting net 的性质名 + +如果以后换性质,只需要对应修改这两个参数。 + +### 3.8 property fitting net + +例如: + +```json +"fitting_net": { + "type": "property", + "property_name": "Property", + "intensive": true, + "task_dim": 1, + "neuron": [240, 240, 240] +} +``` + +对于新性质任务,fitting net 通常会重新初始化并训练。日志中出现: + +```text +The fitting net will be re-init instead of using that in the pretrained model! +``` + +表示当前任务使用了新的 property head。 + +初期建议保持默认结构,确认流程稳定后再调 `neuron`、`task_dim` 等参数。 + +### 3.9 freeze + +这是 `deepmd_property_tools` 的工具层参数: + +```python +freeze = False +``` + +它控制训练结束后是否自动导出 `frozen_model.pth`。 + +当前 DPA3 预训练模型的 `custom_silu` 在 TorchScript freeze 阶段可能报错,因此当前 demo 中使用: + +```python +freeze = False +``` + +先保存 checkpoint: + +```text +model.ckpt-10.pt +``` + +并直接用 checkpoint 做预测。 + +### 3.10 `nproc_per_node` + +这是 `deepmd_property_tools` 的训练启动参数,用于控制单节点启动多少个训练进程: + +```python +nproc_per_node = 1 +``` + +默认值是 `1`,表示单进程训练。单进程时,工具会直接调用 DeePMD-kit 的 Python 训练入口。 + +如果设置为大于 1,例如: + +```python +nproc_per_node = 2 +``` + +工具会改用 `torchrun` 启动多进程训练,等价于: + +```bash +torchrun --nproc_per_node=2 --no-python dp --pt train input.json +``` + +通常含义是单节点 2 张 GPU / 2 个训练进程。8 卡训练可以设置: + +```python +nproc_per_node = 8 +``` + +注意:`nproc_per_node` 不是 CPU 线程数。如果只是在 CPU 上想使用更多线程,应通过环境变量控制,例如: + +```bash +export OMP_NUM_THREADS=4 +export DP_INTRA_OP_PARALLELISM_THREADS=4 +export DP_INTER_OP_PARALLELISM_THREADS=2 +python train_property_20.py +``` + +______________________________________________________________________ + +## 4. 当前推荐配置示例 + +```python +trainer = PropertyTrain( + task="regression", + data_type="molecule", + property_name="Property", + property_col="Property", + save_path=ROOT / "exp_property_20", + numb_steps=10, + batch_size=1024, + model_name="dpa3", + model_size="5m", + freeze=False, + nproc_per_node=1, + finetune=ROOT / "DPA-3.2-5M.pt", + use_pretrain_script=True, + input_updates={ + "learning_rate": { + "type": "exp", + "decay_steps": 1000, + "start_lr": 1e-4, + "stop_lr": 1e-6, + } + }, +) +``` + +对于更正式的训练,可以优先调整: + +```text +numb_steps +batch_size +learning_rate +train_ratio +nproc_per_node +property_name / property_col +``` + +不建议优先手动修改: + +```text +model.descriptor.repflow.* +activation_function +precision +DPA3 结构开关 +``` + +这些应由 `use_pretrain_script=True` 自动继承预训练模型配置。 + +______________________________________________________________________ + +## 5. 简要总结 + +应继承预训练模型的主要是: + +```text +DPA3 descriptor 结构参数 +repflow 维度、层数、cutoff、sel +activation_function +precision +与 type_map 兼容的元素设置 +``` + +可以自行设置的是: + +```text +训练/验证数据 +batch_size +numb_steps +learning_rate +loss +property_name / property_col +property fitting head +是否 freeze +nproc_per_node +``` + +当前工具推荐让 DeePMD-kit 通过: + +```python +use_pretrain_script = True +``` + +自动继承预训练模型结构,而用户主要调当前任务相关的训练超参。 diff --git a/deepmd/deepmd_property_tools/MANIFEST.in b/deepmd/deepmd_property_tools/MANIFEST.in new file mode 100644 index 0000000000..f78b0137fb --- /dev/null +++ b/deepmd/deepmd_property_tools/MANIFEST.in @@ -0,0 +1 @@ +recursive-include deepmd_property_tools/config *.json diff --git a/deepmd/deepmd_property_tools/README.md b/deepmd/deepmd_property_tools/README.md new file mode 100644 index 0000000000..197f4ad78a --- /dev/null +++ b/deepmd/deepmd_property_tools/README.md @@ -0,0 +1,94 @@ +# DeePMD Property Tools + +`deepmd_property_tools` is a Uni-Mol-tools-like interface for DeePMD-kit molecular property training and prediction. + +It wraps DeePMD-kit data generation, DPA3 property training, fine-tuning, freezing, and `DeepProperty` inference behind a small API: + +## Installation + +Install the package from this directory: + +```bash +pip install . +``` + +For local development with tests: + +```bash +pip install ".[test]" +python -m pytest tests -v +``` + +```python +from deepmd_property_tools import PropertyTrain, PropertyPredict + +clf = PropertyTrain( + task="regression", + property_name="Property", + property_col="Property", + save_path="./exp", + finetune="DPA-3.2-5M", +) +clf.fit({"dataset": "DATA/dataset_demo.csv", "mol_dir": "DATA/mol_convert"}) + +predictor = PropertyPredict(load_model="./exp/model.ckpt-10.pt") +y_pred = predictor.predict( + {"dataset": "DATA/dataset_demo.csv", "mol_dir": "DATA/mol_convert"}, + save_path="./pred", +) +``` + +## Data format + +For CSV + MOL workflows, row `i` in the CSV maps to `mol_convert/id{i}.mol` by default. The selected property column is converted to a DeePMD property fitting target. + +```text +DATA/ + dataset_demo.csv + mol_convert/ + id0.mol + id1.mol +``` + +Direct coordinate data is also supported: + +```python +clf.fit( + { + "atoms": [["C", "H", "H", "H", "H"], ["O", "H", "H"]], + "coordinates": [coords0, coords1], + "target": [0.1, 0.2], + } +) +``` + +## Command Line + +The package exposes an entry point after installation: + +```bash +deepmd-property-tools --help +``` + +Train from CSV + MOL inputs: + +```bash +deepmd-property-tools train \ + --dataset DATA/dataset_demo.csv \ + --mol-dir DATA/mol_convert \ + --save-path exp_property +``` + +Predict with a checkpoint file or an experiment directory: + +```bash +deepmd-property-tools predict \ + --model exp_property \ + --dataset DATA/dataset_demo.csv \ + --mol-dir DATA/mol_convert \ + --save-path pred_property +``` + +## Notes + +This package does not reimplement DeePMD models. It is a convenience layer that calls DeePMD-kit training and inference APIs internally. diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/__init__.py b/deepmd/deepmd_property_tools/deepmd_property_tools/__init__.py new file mode 100644 index 0000000000..296cd549c8 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/__init__.py @@ -0,0 +1,11 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Uni-Mol-tools-like helpers for DeePMD property tasks.""" + +from .predict import ( + PropertyPredict, +) +from .train import ( + PropertyTrain, +) + +__all__ = ["PropertyPredict", "PropertyTrain"] diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/cli.py b/deepmd/deepmd_property_tools/deepmd_property_tools/cli.py new file mode 100644 index 0000000000..27d7c84167 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/cli.py @@ -0,0 +1,124 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Command line interface for DeePMD property tools.""" + +from __future__ import ( + annotations, +) + +import argparse +from pathlib import ( + Path, +) +from collections.abc import Sequence + +from deepmd_property_tools import ( + PropertyPredict, + PropertyTrain, +) + + +def build_parser() -> argparse.ArgumentParser: + """Build the command line parser. + + Returns + ------- + argparse.ArgumentParser + Parser containing training and prediction subcommands. + """ + parser = argparse.ArgumentParser( + prog="deepmd-property-tools", + description="DeePMD molecular property training and prediction helpers.", + ) + subparsers = parser.add_subparsers(dest="command") + + train_parser = subparsers.add_parser("train", help="Train a property model") + train_parser.add_argument( + "--dataset", required=True, type=Path, help="CSV dataset path" + ) + train_parser.add_argument( + "--mol-dir", required=True, type=Path, help="MOL directory path" + ) + train_parser.add_argument( + "--save-path", required=True, type=Path, help="Experiment output directory" + ) + train_parser.add_argument( + "--property-col", default="Property", help="CSV property column" + ) + train_parser.add_argument( + "--property-name", default="Property", help="DeePMD property name" + ) + train_parser.add_argument( + "--finetune", default=None, help="Pretrained model name or path" + ) + train_parser.add_argument( + "--numb-steps", type=int, default=None, help="Number of training steps" + ) + train_parser.add_argument( + "--batch-size", type=int, default=None, help="Training batch size" + ) + train_parser.set_defaults(func=_run_train) + + predict_parser = subparsers.add_parser("predict", help="Predict properties") + predict_parser.add_argument( + "--model", required=True, type=Path, help="Model file or experiment directory" + ) + predict_parser.add_argument( + "--dataset", required=True, type=Path, help="CSV dataset path" + ) + predict_parser.add_argument( + "--mol-dir", required=True, type=Path, help="MOL directory path" + ) + predict_parser.add_argument( + "--save-path", default=None, type=Path, help="Prediction output directory" + ) + predict_parser.set_defaults(func=_run_predict) + + return parser + + +def main(argv: Sequence[str] | None = None) -> int: + """Run the command line interface. + + Parameters + ---------- + argv + Optional argument list. When omitted, arguments are read from the command + line. + + Returns + ------- + int + Process exit code. + """ + parser = build_parser() + args = parser.parse_args(argv) + if not hasattr(args, "func"): + parser.print_help() + return 0 + args.func(args) + return 0 + + +def _run_train(args: argparse.Namespace) -> None: + trainer = PropertyTrain( + property_name=args.property_name, + property_col=args.property_col, + save_path=args.save_path, + numb_steps=args.numb_steps, + batch_size=args.batch_size, + finetune=args.finetune, + ) + trainer.fit({"dataset": args.dataset, "mol_dir": args.mol_dir}) + + +def _run_predict(args: argparse.Namespace) -> None: + predictor = PropertyPredict(load_model=args.model) + y_pred = predictor.predict( + {"dataset": args.dataset, "mol_dir": args.mol_dir}, + save_path=args.save_path, + ) + print(y_pred) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/config/__init__.py b/deepmd/deepmd_property_tools/deepmd_property_tools/config/__init__.py new file mode 100644 index 0000000000..d403b861f1 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/config/__init__.py @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Configuration helpers for deepmd_property_tools.""" + +from .config_handler import ( + ConfigHandler, +) + +__all__ = ["ConfigHandler"] diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/config/config_handler.py b/deepmd/deepmd_property_tools/deepmd_property_tools/config/config_handler.py new file mode 100644 index 0000000000..21c649832e --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/config/config_handler.py @@ -0,0 +1,47 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""JSON config handler.""" + +from __future__ import ( + annotations, +) + +import copy +import json +from pathlib import ( + Path, +) +from typing import ( + Any, +) + + +class ConfigHandler: + def __init__(self, config_path: str | Path | None = None) -> None: + self.config_path = ( + Path(config_path) + if config_path + else Path(__file__).with_name("default.json") + ) + + def read(self) -> dict[str, Any]: + return json.loads(self.config_path.read_text(encoding="utf-8")) + + def write(self, data: dict[str, Any], out_file_path: str | Path) -> None: + Path(out_file_path).write_text( + json.dumps(data, indent=2) + "\n", encoding="utf-8" + ) + + @staticmethod + def merge(base: dict[str, Any], updates: dict[str, Any] | None) -> dict[str, Any]: + result = copy.deepcopy(base) + if updates: + _deep_update(result, updates) + return result + + +def _deep_update(target: dict[str, Any], updates: dict[str, Any]) -> None: + for key, value in updates.items(): + if isinstance(value, dict) and isinstance(target.get(key), dict): + _deep_update(target[key], value) + else: + target[key] = value diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/config/default.json b/deepmd/deepmd_property_tools/deepmd_property_tools/config/default.json new file mode 100644 index 0000000000..be41673fa7 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/config/default.json @@ -0,0 +1,83 @@ +{ + "model": { + "type_map": [], + "descriptor": { + "type": "dpa3", + "repflow": { + "n_dim": 128, + "e_dim": 64, + "a_dim": 32, + "nlayers": 16, + "e_rcut": 6.0, + "e_rcut_smth": 5.3, + "e_sel": 1200, + "a_rcut": 4.0, + "a_rcut_smth": 3.5, + "a_sel": 300, + "axis_neuron": 4, + "fix_stat_std": 0.3, + "a_compress_rate": 1, + "a_compress_e_rate": 2, + "a_compress_use_split": true, + "update_angle": true, + "smooth_edge_update": true, + "use_dynamic_sel": true, + "sel_reduce_factor": 10.0, + "use_exp_switch": true, + "update_style": "res_residual", + "update_residual": 0.1, + "update_residual_init": "const" + }, + "activation_function": "silut:3.0", + "use_tebd_bias": false, + "precision": "float32", + "concat_output_tebd": false + }, + "fitting_net": { + "type": "property", + "property_name": "Property", + "intensive": true, + "task_dim": 1, + "neuron": [ + 240, + 240, + 240 + ], + "resnet_dt": true, + "seed": 1 + } + }, + "loss": { + "type": "property", + "metric": [ + "mae", + "rmse" + ], + "loss_func": "smooth_mae", + "beta": 1.0 + }, + "learning_rate": { + "type": "exp", + "decay_steps": 1000, + "start_lr": 0.001, + "stop_lr": 1e-5, + "warmup_steps": 0 + }, + "training": { + "training_data": { + "systems": [], + "batch_size": "auto:512" + }, + "validation_data": { + "systems": [], + "batch_size": 1 + }, + "numb_steps": 1000000, + "gradient_max_norm": 5.0, + "max_ckpt_keep": 1000000, + "seed": 10, + "disp_file": "lcurve.out", + "disp_freq": 200, + "save_freq": 1000 + } +} diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/data/__init__.py b/deepmd/deepmd_property_tools/deepmd_property_tools/data/__init__.py new file mode 100644 index 0000000000..7f1cea5bb8 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/data/__init__.py @@ -0,0 +1,32 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Data helpers.""" + +from .converter import ( + PropertyDataResult, + build_frame, + default_input, + prepare_property_data, + register_extra_dtypes, +) +from .datahub import ( + DataHub, +) +from .mol import ( + build_used_type_map, + parse_property_value, + predict_records_from_data, + read_mol_coords, +) + +__all__ = [ + "DataHub", + "PropertyDataResult", + "build_frame", + "build_used_type_map", + "default_input", + "parse_property_value", + "predict_records_from_data", + "prepare_property_data", + "read_mol_coords", + "register_extra_dtypes", +] diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/data/converter.py b/deepmd/deepmd_property_tools/deepmd_property_tools/data/converter.py new file mode 100644 index 0000000000..345c9760f3 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/data/converter.py @@ -0,0 +1,258 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""DeepMD mixed-npy conversion for property labels.""" + +from __future__ import ( + annotations, +) + +import csv +import json +import os +import random +import shutil +from dataclasses import ( + dataclass, +) +from pathlib import ( + Path, +) +from typing import ( + Any, +) + +import numpy as np +from deepmd_property_tools.config import ( + ConfigHandler, +) + +from .mol import ( + build_used_type_map, + records_from_csv_mol, + records_from_direct_data, +) + + +@dataclass +class PropertyDataResult: + input_path: Path + output_dir: Path + train_systems: list[str] + valid_systems: list[str] + type_map: list[str] + failed_rows: list[tuple[int, str, str]] + samples_used: int + skipped_zero: int + skipped_overlap: int + raw_data: list[dict[str, Any]] + + +def register_extra_dtypes(property_name: str) -> None: + import dpdata + from dpdata.data_type import ( + Axis, + DataType, + ) + + datatypes = [ + DataType(property_name, np.ndarray, shape=(Axis.NFRAMES, 1), required=False), + DataType("stru_id", np.ndarray, shape=(Axis.NFRAMES, 1), required=False), + ] + for dtype in datatypes: + dpdata.System.register_data_type(dtype) + dpdata.LabeledSystem.register_data_type(dtype) + + +def to_relative_path(path: Path, base: Path) -> str: + path_abs = path.resolve() + base_abs = base.resolve() + try: + return str(path_abs.relative_to(base_abs)) + except ValueError: + return os.path.relpath(path_abs, base_abs) + + +def build_frame( + *, + symbols: list[str], + coords: np.ndarray, + property_value: float, + stru_id: int, + property_name: str, + type_map: list[str], + type_index: dict[str, int], +) -> dict[str, Any]: + natoms = len(symbols) + if coords.shape != (natoms, 3): + raise ValueError(f"coords shape mismatch for stru_id={stru_id}: {coords.shape}") + + atom_types = np.array([type_index[s] for s in symbols], dtype=np.int32) + atom_numbs = np.zeros(len(type_map), dtype=np.int32) + for idx in atom_types: + atom_numbs[idx] += 1 + + return { + "orig": np.array([0, 0, 0], dtype=np.int32), + "atom_names": type_map, + "atom_numbs": atom_numbs.tolist(), + "atom_types": atom_types, + "cells": np.array([[[100.0, 0.0, 0.0], [0.0, 100.0, 0.0], [0.0, 0.0, 100.0]]]), + "nopbc": True, + "coords": coords[np.newaxis, :, :].astype(np.float32), + "energies": np.zeros((1,), dtype=np.float32), + "forces": np.zeros((1, natoms, 3), dtype=np.float32), + property_name: np.array([[property_value]], dtype=np.float32), + "stru_id": np.array([[stru_id]], dtype=np.int64), + } + + +def default_input( + *, + property_name: str, + train_systems: list[str], + valid_systems: list[str], + type_map: list[str], + numb_steps: int = 1000000, + input_updates: dict[str, Any] | None = None, +) -> dict[str, Any]: + config = ConfigHandler().read() + config["model"]["type_map"] = type_map + config["model"]["fitting_net"]["property_name"] = property_name + config["training"]["training_data"]["systems"] = train_systems + config["training"]["validation_data"]["systems"] = valid_systems + config["training"]["numb_steps"] = numb_steps + return ConfigHandler.merge(config, input_updates) + + +def prepare_property_data( + data: dict[str, Any] | str | Path, + *, + output_dir: str | Path, + input_out: str | Path, + property_name: str = "Property", + property_col: str = "Property", + train_ratio: float = 0.9, + mol_dir: str | Path | None = None, + mol_template: str = "id{row}.mol", + overlap_tol: float = 1e-6, + seed: int = 42, + overwrite: bool = False, + numb_steps: int = 1000000, + input_updates: dict[str, Any] | None = None, +) -> PropertyDataResult: + if not (0.0 < train_ratio < 1.0): + raise ValueError("train_ratio must be in (0, 1)") + + import dpdata + + register_extra_dtypes(property_name) + + failed_rows: list[tuple[int, str, str]] = [] + skipped_zero = 0 + skipped_overlap = 0 + if isinstance(data, (str, Path)) or (isinstance(data, dict) and "dataset" in data): + dataset = Path(data if isinstance(data, (str, Path)) else data["dataset"]) + mol_dir_value = mol_dir if mol_dir is not None else data.get("mol_dir") + if mol_dir_value is None: + raise ValueError("mol_dir is required for CSV/MOL data") + records, failed_rows, skipped_zero, skipped_overlap, raw_data = ( + records_from_csv_mol( + dataset=dataset, + mol_dir=mol_dir_value, + property_col=property_col, + mol_template=mol_template, + overlap_tol=overlap_tol, + ) + ) + else: + records, raw_data = records_from_direct_data(data) + + used_elements = {symbol for symbols, _, _, _ in records for symbol in symbols} + type_map = build_used_type_map(used_elements) + if not type_map: + raise RuntimeError("No usable elements found after filtering.") + type_index = {el: i for i, el in enumerate(type_map)} + + systems: list[dpdata.LabeledSystem] = [] + for symbols, coords, property_value, row_idx in records: + frame_data = build_frame( + symbols=symbols, + coords=coords, + property_value=property_value, + stru_id=row_idx, + property_name=property_name, + type_map=type_map, + type_index=type_index, + ) + systems.append(dpdata.LabeledSystem(data=frame_data, type_map=type_map)) + + n_total = len(systems) + if n_total < 2: + raise RuntimeError(f"Not enough usable samples: {n_total}") + + output_path = Path(output_dir).resolve() + train_dir = output_path / "train" + valid_dir = output_path / "valid" + if overwrite and output_path.exists(): + shutil.rmtree(output_path) + output_path.mkdir(parents=True, exist_ok=True) + + rng = random.Random(seed) + indices = list(range(n_total)) + rng.shuffle(indices) + train_count = int(n_total * train_ratio) + train_count = max(1, min(train_count, n_total - 1)) + + ms_train = dpdata.MultiSystems() + ms_valid = dpdata.MultiSystems() + for idx in indices[:train_count]: + ms_train.append(systems[idx]) + for idx in indices[train_count:]: + ms_valid.append(systems[idx]) + + ms_train.to_deepmd_npy_mixed(str(train_dir)) + ms_valid.to_deepmd_npy_mixed(str(valid_dir)) + + input_path = Path(input_out).resolve() + path_base = input_path.parent + train_systems = sorted( + to_relative_path(path, path_base) + for path in train_dir.iterdir() + if path.is_dir() + ) + valid_systems = sorted( + to_relative_path(path, path_base) + for path in valid_dir.iterdir() + if path.is_dir() + ) + if not train_systems or not valid_systems: + raise RuntimeError("Generated system directories are empty.") + + input_dict = default_input( + property_name=property_name, + train_systems=train_systems, + valid_systems=valid_systems, + type_map=type_map, + numb_steps=numb_steps, + input_updates=input_updates, + ) + input_path.parent.mkdir(parents=True, exist_ok=True) + input_path.write_text(json.dumps(input_dict, indent=2) + "\n", encoding="utf-8") + + fail_csv = output_path / "failed_rows.csv" + with fail_csv.open("w", encoding="utf-8", newline="") as fp: + writer = csv.writer(fp) + writer.writerow(["row_index", "mol_path", "error"]) + writer.writerows(failed_rows) + + return PropertyDataResult( + input_path=input_path, + output_dir=output_path, + train_systems=train_systems, + valid_systems=valid_systems, + type_map=type_map, + failed_rows=failed_rows, + samples_used=n_total, + skipped_zero=skipped_zero, + skipped_overlap=skipped_overlap, + raw_data=raw_data, + ) diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/data/datahub.py b/deepmd/deepmd_property_tools/deepmd_property_tools/data/datahub.py new file mode 100644 index 0000000000..9558f26cb0 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/data/datahub.py @@ -0,0 +1,72 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Uni-Mol-style data hub for DeePMD property workflows.""" + +from __future__ import ( + annotations, +) + +from pathlib import ( + Path, +) +from typing import ( + Any, +) + +from .converter import ( + PropertyDataResult, + prepare_property_data, +) +from .mol import ( + predict_records_from_data, +) + + +class DataHub: + def __init__( + self, + data: dict[str, Any] | str | Path, + *, + is_train: bool, + save_path: str | Path, + property_name: str = "Property", + property_col: str | None = "Property", + train_ratio: float = 0.9, + mol_dir: str | Path | None = None, + mol_template: str = "id{row}.mol", + overlap_tol: float = 1e-6, + seed: int = 42, + overwrite: bool = False, + numb_steps: int = 1000000, + input_updates: dict[str, Any] | None = None, + ) -> None: + self.data_input = data + self.is_train = is_train + self.save_path = Path(save_path) + self.property_name = property_name + self.property_col = property_col + if is_train: + self.result: PropertyDataResult | None = prepare_property_data( + data, + output_dir=self.save_path / "prepared_data", + input_out=self.save_path / "input.json", + property_name=property_name, + property_col=property_col, + train_ratio=train_ratio, + mol_dir=mol_dir, + mol_template=mol_template, + overlap_tol=overlap_tol, + seed=seed, + overwrite=overwrite, + numb_steps=numb_steps, + input_updates=input_updates, + ) + self.type_map = self.result.type_map + self.raw_data = self.result.raw_data + else: + self.result = None + self.atoms, self.coordinates, self.raw_data = predict_records_from_data( + data, + property_col=property_col, + mol_dir=mol_dir, + mol_template=mol_template, + ) diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/data/mol.py b/deepmd/deepmd_property_tools/deepmd_property_tools/data/mol.py new file mode 100644 index 0000000000..9207a1cfc9 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/data/mol.py @@ -0,0 +1,322 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""MOL and direct-coordinate data helpers.""" + +from __future__ import ( + annotations, +) + +import csv +import re +from pathlib import ( + Path, +) +from typing import ( + Any, +) + +import numpy as np + +ELEMENTS = np.array( + [ + "H", + "He", + "Li", + "Be", + "B", + "C", + "N", + "O", + "F", + "Ne", + "Na", + "Mg", + "Al", + "Si", + "P", + "S", + "Cl", + "Ar", + "K", + "Ca", + "Sc", + "Ti", + "V", + "Cr", + "Mn", + "Fe", + "Co", + "Ni", + "Cu", + "Zn", + "Ga", + "Ge", + "As", + "Se", + "Br", + "Kr", + "Rb", + "Sr", + "Y", + "Zr", + "Nb", + "Mo", + "Tc", + "Ru", + "Rh", + "Pd", + "Ag", + "Cd", + "In", + "Sn", + "Sb", + "Te", + "I", + "Xe", + "Cs", + "Ba", + "La", + "Ce", + "Pr", + "Nd", + "Pm", + "Sm", + "Eu", + "Gd", + "Tb", + "Dy", + "Ho", + "Er", + "Tm", + "Yb", + "Lu", + "Hf", + "Ta", + "W", + "Re", + "Os", + "Ir", + "Pt", + "Au", + "Hg", + "Tl", + "Pb", + "Bi", + "Po", + "At", + "Rn", + "Fr", + "Ra", + "Ac", + "Th", + "Pa", + "U", + "Np", + "Pu", + "Am", + "Cm", + "Bk", + "Cf", + "Es", + "Fm", + "Md", + "No", + "Lr", + "Rf", + "Db", + "Sg", + "Bh", + "Hs", + "Mt", + "Ds", + "Rg", + "Cn", + "Nh", + "Fl", + "Mc", + "Lv", + "Ts", + "Og", + ] +) +ELEMENT_INDEX = {name: i for i, name in enumerate(ELEMENTS)} + + +def find_column(columns: list[str], choices: list[str]) -> str: + lower_map = {col.lower(): col for col in columns} + for choice in choices: + if choice.lower() in lower_map: + return lower_map[choice.lower()] + raise KeyError(f"None of columns {choices} found in {columns}") + + +def parse_property_value(raw_value: object) -> float: + if isinstance(raw_value, (int, float)): + return float(raw_value) + text = str(raw_value).strip() + try: + return float(text) + except ValueError: + match = re.search(r"[-+]?\d*\.?\d+(?:[eE][-+]?\d+)?", text) + if match: + return float(match.group(0)) + raise + + +def read_mol_coords(path: str | Path) -> tuple[list[str], np.ndarray]: + mol_path = Path(path) + lines = mol_path.read_text(encoding="utf-8", errors="ignore").splitlines() + if len(lines) < 4: + raise ValueError(f"Bad MOL file (too short): {mol_path}") + + counts = lines[3] + try: + natoms = int(counts[0:3]) + except ValueError: + parts = counts.split() + if not parts: + raise ValueError(f"Bad MOL counts line: {mol_path}") from None + natoms = int(parts[0]) + + atom_lines = lines[4 : 4 + natoms] + if len(atom_lines) != natoms: + raise ValueError(f"Bad MOL atom block length: {mol_path}") + + symbols: list[str] = [] + coords: list[list[float]] = [] + for atom_line in atom_lines: + if len(atom_line) >= 34: + x = float(atom_line[0:10]) + y = float(atom_line[10:20]) + z = float(atom_line[20:30]) + symbol = atom_line[31:34].strip() + else: + parts = atom_line.split() + if len(parts) < 4: + raise ValueError(f"Bad MOL atom line: {mol_path}") + x, y, z = float(parts[0]), float(parts[1]), float(parts[2]) + symbol = parts[3] + + if symbol not in ELEMENT_INDEX: + raise ValueError(f"Unknown element {symbol!r} in {mol_path}") + symbols.append(symbol) + coords.append([x, y, z]) + + return symbols, np.asarray(coords, dtype=np.float32) + + +def has_overlapping_atoms(coords: np.ndarray, tol: float) -> bool: + if coords.shape[0] < 2: + return False + diff = coords[:, np.newaxis, :] - coords[np.newaxis, :, :] + dist2 = np.sum(diff * diff, axis=-1) + np.fill_diagonal(dist2, np.inf) + return float(np.min(dist2)) < tol * tol + + +def build_used_type_map(used_elements: set[str]) -> list[str]: + return [el for el in ELEMENTS.tolist() if el in used_elements] + + +def records_from_csv_mol( + *, + dataset: str | Path, + mol_dir: str | Path, + property_col: str, + mol_template: str = "id{row}.mol", + overlap_tol: float = 1e-6, +) -> tuple[ + list[tuple[list[str], np.ndarray, float, int]], + list[tuple[int, str, str]], + int, + int, + list[dict[str, Any]], +]: + with Path(dataset).open("r", encoding="utf-8") as fp: + rows = list(csv.DictReader(fp)) + if not rows: + raise ValueError(f"No rows found in dataset: {dataset}") + prop_col = find_column(list(rows[0].keys()), [property_col, "Property", "property"]) + + records: list[tuple[list[str], np.ndarray, float, int]] = [] + failed_rows: list[tuple[int, str, str]] = [] + skipped_zero = 0 + skipped_overlap = 0 + kept_rows: list[dict[str, Any]] = [] + for row_idx, row in enumerate(rows): + mol_path = (Path(mol_dir) / mol_template.format(row=row_idx)).resolve() + try: + symbols, coords = read_mol_coords(mol_path) + if np.allclose(coords, 0.0): + skipped_zero += 1 + continue + if has_overlapping_atoms(coords, overlap_tol): + skipped_overlap += 1 + continue + records.append( + (symbols, coords, parse_property_value(row[prop_col]), row_idx) + ) + kept_rows.append(dict(row)) + except Exception as exc: + failed_rows.append((row_idx, str(mol_path), str(exc))) + return records, failed_rows, skipped_zero, skipped_overlap, kept_rows + + +def records_from_direct_data( + data: dict[str, Any], +) -> tuple[list[tuple[list[str], np.ndarray, float, int]], list[dict[str, Any]]]: + atoms = data.get("atoms") + coordinates = data.get("coordinates") + targets = data.get("target", data.get("targets")) + if atoms is None or coordinates is None or targets is None: + raise ValueError("Direct training data requires atoms, coordinates, and target") + if not (len(atoms) == len(coordinates) == len(targets)): + raise ValueError("atoms, coordinates, and target must have the same length") + records = [] + rows = [] + for idx, (symbols, coords, target) in enumerate(zip(atoms, coordinates, targets)): + records.append( + (list(symbols), np.asarray(coords, dtype=np.float32), float(target), idx) + ) + rows.append({"sample_id": idx, "target": float(target)}) + return records, rows + + +def predict_records_from_data( + data: dict[str, Any] | str | Path, + *, + property_col: str | None = "Property", + mol_dir: str | Path | None = None, + mol_template: str = "id{row}.mol", +) -> tuple[list[list[str]], list[np.ndarray], list[dict[str, Any]]]: + if isinstance(data, (str, Path)) or (isinstance(data, dict) and "dataset" in data): + dataset = Path(data if isinstance(data, (str, Path)) else data["dataset"]) + mol_dir_value = mol_dir if mol_dir is not None else data.get("mol_dir") + if mol_dir_value is None: + raise ValueError("mol_dir is required for CSV/MOL data") + resolved_mol_dir = Path(mol_dir_value) + with dataset.open("r", encoding="utf-8") as fp: + rows = list(csv.DictReader(fp)) + if rows and property_col is not None: + find_column(list(rows[0].keys()), [property_col, "Property", "property"]) + atoms: list[list[str]] = [] + coords: list[np.ndarray] = [] + kept_rows: list[dict[str, Any]] = [] + for row_idx, row in enumerate(rows): + symbols, coord = read_mol_coords( + resolved_mol_dir / mol_template.format(row=row_idx) + ) + atoms.append(symbols) + coords.append(coord) + kept_rows.append(dict(row)) + return atoms, coords, kept_rows + + atoms_raw = data.get("atoms") + coords_raw = data.get("coordinates") + if atoms_raw is None or coords_raw is None: + raise ValueError("Prediction data requires atoms and coordinates") + atoms = [list(symbols) for symbols in atoms_raw] + coords = [np.asarray(coord, dtype=np.float32) for coord in coords_raw] + if len(atoms) != len(coords): + raise ValueError("atoms and coordinates must have the same length") + rows = [{"sample_id": idx} for idx in range(len(atoms))] + return atoms, coords, rows diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/models/__init__.py b/deepmd/deepmd_property_tools/deepmd_property_tools/models/__init__.py new file mode 100644 index 0000000000..3a2797c769 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/models/__init__.py @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Model wrappers.""" + +from .property_model import ( + PropertyModel, +) + +__all__ = ["PropertyModel"] diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/models/property_model.py b/deepmd/deepmd_property_tools/deepmd_property_tools/models/property_model.py new file mode 100644 index 0000000000..2ff256b137 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/models/property_model.py @@ -0,0 +1,22 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Property inference model wrapper.""" + +from __future__ import ( + annotations, +) + +from pathlib import ( + Path, +) + + +class PropertyModel: + def __init__(self, model_path: str | Path) -> None: + from deepmd.infer.deep_property import ( + DeepProperty, + ) + + self.model = DeepProperty(str(model_path), no_jit=True) + + def eval(self, *args: object, **kwargs: object) -> object: + return self.model.eval(*args, **kwargs) diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/predict.py b/deepmd/deepmd_property_tools/deepmd_property_tools/predict.py new file mode 100644 index 0000000000..fa4ad3cacc --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/predict.py @@ -0,0 +1,105 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""High-level property prediction interface.""" + +from __future__ import ( + annotations, +) + +import json +from pathlib import ( + Path, +) +from typing import ( + Any, +) + +import numpy as np +from deepmd_property_tools.data import ( + DataHub, +) +from deepmd_property_tools.predictor import ( + Predictor, +) + + +class PropertyPredict: + def __init__( + self, + load_model: str | Path, + type_map: list[str] | None = None, + property_name: str | None = None, + ) -> None: + if not load_model: + raise ValueError("load_model is empty") + load_model_path = Path(load_model) + if load_model_path.is_dir(): + self.model_dir = load_model_path + frozen_model = load_model_path / "frozen_model.pth" + self.load_model = ( + frozen_model + if frozen_model.exists() + else self._latest_checkpoint(load_model_path) + ) + else: + self.load_model = load_model_path + self.model_dir = load_model_path.parent + config = self._load_config() + self.type_map = type_map or config.get("type_map") + if self.type_map is None: + raise ValueError( + "type_map is required when property_tools_config.json is absent" + ) + self.property_name = property_name or config.get("property_name", "Property") + self.datahub: DataHub | None = None + + def predict( + self, + data: dict[str, Any] | str | Path, + save_path: str | Path | None = None, + metrics: str = "none", + ) -> np.ndarray: + del metrics + self.datahub = DataHub( + data=data, + is_train=False, + save_path=self.load_model.parent, + property_name=self.property_name, + property_col=None, + ) + prefix = Path(data).stem if isinstance(data, (str, Path)) else "test" + predictor = Predictor( + model_path=self.load_model, + type_map=self.type_map, + property_name=self.property_name, + ) + return predictor.predict( + self.datahub.atoms, + self.datahub.coordinates, + self.datahub.raw_data, + save_path=save_path, + prefix=prefix, + ) + + def _load_config(self) -> dict[str, Any]: + candidates = [ + self.model_dir / "property_tools_config.json", + ] + for path in candidates: + if path.exists(): + return json.loads(path.read_text(encoding="utf-8")) + return {} + + @staticmethod + def _latest_checkpoint(model_dir: Path) -> Path: + candidates = sorted( + model_dir.glob("model.ckpt-*.pt"), + key=lambda path: path.stat().st_mtime, + reverse=True, + ) + candidates.append(model_dir / "model.ckpt.pt") + for checkpoint in candidates: + if checkpoint.exists(): + return checkpoint + raise FileNotFoundError( + f"No frozen_model.pth or model.ckpt*.pt checkpoint found in {model_dir}" + ) diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/predictor.py b/deepmd/deepmd_property_tools/deepmd_property_tools/predictor.py new file mode 100644 index 0000000000..04ed836ad1 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/predictor.py @@ -0,0 +1,100 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Prediction pipeline implementation.""" + +from __future__ import ( + annotations, +) + +import csv +from pathlib import ( + Path, +) +from typing import ( + Any, +) + +import numpy as np +from deepmd_property_tools.models import ( + PropertyModel, +) + + +class Predictor: + def __init__( + self, *, model_path: str | Path, type_map: list[str], property_name: str + ) -> None: + self.model_path = Path(model_path) + self.type_map = type_map + self.type_index = {element: idx for idx, element in enumerate(type_map)} + self.property_name = property_name + + def predict( + self, + atoms: list[list[str]], + coordinates: list[np.ndarray], + rows: list[dict[str, Any]], + save_path: str | Path | None = None, + prefix: str = "test", + ) -> np.ndarray: + coords, atom_types = self.standardize(atoms, coordinates) + y_pred = PropertyModel(self.model_path).eval( + coords, None, atom_types, mixed_type=True + )[0] + if save_path is not None: + self.save_predict(rows, y_pred, Path(save_path), prefix) + return y_pred + + def standardize( + self, atoms: list[list[str]], coordinates: list[np.ndarray] + ) -> tuple[np.ndarray, np.ndarray]: + if not atoms: + raise ValueError("No samples to predict") + max_natoms = max(len(symbols) for symbols in atoms) + coords = np.zeros((len(atoms), max_natoms, 3), dtype=np.float32) + atom_types = np.full((len(atoms), max_natoms), -1, dtype=np.int32) + for frame_idx, (symbols, coord) in enumerate(zip(atoms, coordinates)): + if coord.shape != (len(symbols), 3): + raise ValueError( + f"coordinates shape mismatch at sample {frame_idx}: {coord.shape}" + ) + for atom_idx, symbol in enumerate(symbols): + if symbol not in self.type_index: + raise ValueError( + f"Element {symbol!r} is not present in type_map {self.type_map}" + ) + atom_types[frame_idx, atom_idx] = self.type_index[symbol] + coords[frame_idx, : len(symbols), :] = coord + return coords, atom_types + + def save_predict( + self, + rows: list[dict[str, Any]], + y_pred: np.ndarray, + save_path: Path, + prefix: str, + ) -> Path: + save_path.mkdir(parents=True, exist_ok=True) + out_path = save_path / f"{prefix}.predict.0.csv" + run_id = 0 + while out_path.exists(): + run_id += 1 + out_path = save_path / f"{prefix}.predict.{run_id}.csv" + + predict_cols = [f"predict_{self.property_name}"] + if y_pred.shape[1] > 1: + predict_cols = [ + f"predict_{self.property_name}_{idx}" for idx in range(y_pred.shape[1]) + ] + fieldnames = list(rows[0].keys()) if rows else [] + for col in predict_cols: + if col not in fieldnames: + fieldnames.append(col) + with out_path.open("w", encoding="utf-8", newline="") as fp: + writer = csv.DictWriter(fp, fieldnames=fieldnames) + writer.writeheader() + for row, pred in zip(rows, y_pred): + out_row = dict(row) + for col, value in zip(predict_cols, pred): + out_row[col] = float(value) + writer.writerow(out_row) + return out_path diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/tasks/__init__.py b/deepmd/deepmd_property_tools/deepmd_property_tools/tasks/__init__.py new file mode 100644 index 0000000000..920246abf6 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/tasks/__init__.py @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Task wrappers.""" + +from .trainer import ( + Trainer, +) + +__all__ = ["Trainer"] diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/tasks/trainer.py b/deepmd/deepmd_property_tools/deepmd_property_tools/tasks/trainer.py new file mode 100644 index 0000000000..9ffec2bc73 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/tasks/trainer.py @@ -0,0 +1,118 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Training task wrapper.""" + +from __future__ import ( + annotations, +) + +import os +import subprocess +from pathlib import ( + Path, +) + + +class Trainer: + def __init__( + self, + *, + save_path: str | Path, + finetune: str | None = None, + nproc_per_node: int = 1, + freeze: bool = False, + use_pretrain_script: bool = False, + skip_neighbor_stat: bool = False, + force_load: bool = False, + model_branch: str = "", + ) -> None: + self.save_path = Path(save_path) + self.finetune = finetune + self.nproc_per_node = nproc_per_node + self.freeze_model = freeze + self.use_pretrain_script = use_pretrain_script + self.skip_neighbor_stat = skip_neighbor_stat + self.force_load = force_load + self.model_branch = model_branch + + def run(self, input_path: str | Path) -> None: + input_path = Path(input_path) + if self.nproc_per_node == 1: + from deepmd.pt.entrypoints.main import ( + train, + ) + + old_cwd = os.getcwd() + try: + os.chdir(self.save_path) + train( + input_file=str(input_path), + init_model=None, + restart=None, + finetune=self.finetune, + init_frz_model=None, + model_branch=self.model_branch, + skip_neighbor_stat=self.skip_neighbor_stat, + use_pretrain_script=self.use_pretrain_script, + force_load=self.force_load, + output=str(self.save_path / "out.json"), + ) + finally: + os.chdir(old_cwd) + else: + self._run_torchrun(input_path) + if self.freeze_model: + self.freeze() + + def _run_torchrun(self, input_path: Path) -> None: + cmd = [ + "torchrun", + f"--nproc_per_node={self.nproc_per_node}", + "--no-python", + "dp", + "--pt", + "train", + str(input_path), + "--output", + str(self.save_path / "out.json"), + ] + if self.finetune is not None: + cmd.extend(["--finetune", self.finetune]) + if self.model_branch: + cmd.extend(["--model-branch", self.model_branch]) + if self.skip_neighbor_stat: + cmd.append("--skip-neighbor-stat") + if self.use_pretrain_script: + cmd.append("--use-pretrain-script") + if self.force_load: + cmd.append("--force-load") + subprocess.run(cmd, check=True, cwd=self.save_path) + + def freeze(self) -> None: + from deepmd.pt.entrypoints.main import ( + freeze, + ) + + checkpoint = self.latest_checkpoint() + try: + freeze( + model=str(checkpoint), + output=str(self.save_path / "frozen_model.pth"), + head=None, + ) + except RuntimeError as exc: + raise RuntimeError( + "Training finished, but DeePMD failed to freeze the checkpoint with TorchScript. " + f"Use the checkpoint directly instead: {checkpoint}" + ) from exc + + def latest_checkpoint(self) -> Path: + candidates = sorted( + self.save_path.glob("model.ckpt-*.pt"), + key=lambda path: path.stat().st_mtime, + reverse=True, + ) + candidates.append(self.save_path / "model.ckpt.pt") + for checkpoint in candidates: + if checkpoint.exists(): + return checkpoint + raise FileNotFoundError(f"No model checkpoint found in {self.save_path}") diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/train.py b/deepmd/deepmd_property_tools/deepmd_property_tools/train.py new file mode 100644 index 0000000000..fef98a2415 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/train.py @@ -0,0 +1,174 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""High-level property training interface.""" + +from __future__ import ( + annotations, +) + +import json +from pathlib import ( + Path, +) +from typing import ( + Any, +) + +from deepmd_property_tools.config import ( + ConfigHandler, +) +from deepmd_property_tools.data import ( + DataHub, +) +from deepmd_property_tools.tasks import ( + Trainer, +) +from deepmd_property_tools.weights import ( + WeightHub, +) + + +class PropertyTrain: + def __init__( + self, + task: str = "regression", + property_name: str = "Property", + property_col: str = "Property", + save_path: str | Path = "./exp_property", + epochs: int | None = None, + batch_size: int | str | None = None, + metrics: str | list[str] | None = None, + data_type: str = "molecule", + model_name: str = "dpa3", + model_size: str = "5m", + numb_steps: int | None = None, + finetune: str | Path | None = None, + nproc_per_node: int = 1, + train_ratio: float = 0.9, + mol_template: str = "id{row}.mol", + overlap_tol: float = 1e-6, + seed: int = 42, + overwrite: bool = True, + freeze: bool = False, + use_pretrain_script: bool = False, + skip_neighbor_stat: bool = False, + force_load: bool = False, + model_branch: str = "", + input_updates: dict[str, Any] | None = None, + **params: Any, + ) -> None: + if params: + names = ", ".join(sorted(params)) + raise TypeError(f"Unexpected PropertyTrain argument(s): {names}") + if task != "regression": + raise ValueError( + "DeePMD property tools currently support task='regression'" + ) + if data_type != "molecule": + raise ValueError( + "DeePMD property tools currently support data_type='molecule'" + ) + if model_name != "dpa3": + raise ValueError( + "DeePMD property tools currently support model_name='dpa3'" + ) + self.task = task + self.data_type = data_type + self.model_name = model_name + self.model_size = model_size + self.epochs = epochs + self.batch_size = batch_size + self.metrics = metrics + self.property_name = property_name + self.property_col = property_col + self.save_path = Path(save_path) + self.numb_steps = ( + numb_steps if numb_steps is not None else self._epochs_to_steps(epochs) + ) + self.finetune = ( + None + if finetune is None + else WeightHub(root=self.save_path.parent).get(finetune) + ) + self.nproc_per_node = nproc_per_node + self.train_ratio = train_ratio + self.mol_template = mol_template + self.overlap_tol = overlap_tol + self.seed = seed + self.overwrite = overwrite + self.freeze_model = freeze + self.use_pretrain_script = use_pretrain_script + self.skip_neighbor_stat = skip_neighbor_stat + self.force_load = force_load + self.model_branch = model_branch + if input_updates is None: + input_updates = {} + if batch_size is not None: + input_updates = ConfigHandler.merge( + input_updates, + {"training": {"training_data": {"batch_size": batch_size}}}, + ) + if metrics is not None: + metric_list = [metrics] if isinstance(metrics, str) else list(metrics) + input_updates = ConfigHandler.merge( + input_updates, {"loss": {"metric": metric_list}} + ) + self.input_updates = input_updates + self.datahub: DataHub | None = None + + def fit(self, data: dict[str, Any] | str | Path) -> None: + self.save_path.mkdir(parents=True, exist_ok=True) + self.datahub = DataHub( + data=data, + is_train=True, + save_path=self.save_path, + property_name=self.property_name, + property_col=self.property_col, + train_ratio=self.train_ratio, + mol_template=self.mol_template, + overlap_tol=self.overlap_tol, + seed=self.seed, + overwrite=self.overwrite, + numb_steps=self.numb_steps, + input_updates=self.input_updates, + ) + self._save_config() + trainer = Trainer( + save_path=self.save_path, + finetune=self.finetune, + nproc_per_node=self.nproc_per_node, + freeze=self.freeze_model, + use_pretrain_script=self.use_pretrain_script, + skip_neighbor_stat=self.skip_neighbor_stat, + force_load=self.force_load, + model_branch=self.model_branch, + ) + trainer.run(self.datahub.result.input_path) + + def _save_config(self) -> None: + if self.datahub is None or self.datahub.result is None: + return + config = { + "task": self.task, + "data_type": self.data_type, + "model_name": self.model_name, + "model_size": self.model_size, + "epochs": self.epochs, + "batch_size": self.batch_size, + "metrics": self.metrics, + "property_name": self.property_name, + "property_col": self.property_col, + "type_map": self.datahub.result.type_map, + "input_path": str(self.datahub.result.input_path), + "prepared_data": str(self.datahub.result.output_dir), + "frozen_model": str(self.save_path / "frozen_model.pth"), + "checkpoint": str(self.save_path / "model.ckpt.pt"), + } + (self.save_path / "property_tools_config.json").write_text( + json.dumps(config, indent=2) + "\n", encoding="utf-8" + ) + + @staticmethod + def _epochs_to_steps(epochs: int | None) -> int: + if epochs is None: + return 1000000 + return max(1, int(epochs)) * 1000 diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/utils/__init__.py b/deepmd/deepmd_property_tools/deepmd_property_tools/utils/__init__.py new file mode 100644 index 0000000000..3da0b1a4a9 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/utils/__init__.py @@ -0,0 +1,14 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Utility helpers.""" + +from .base_logger import ( + logger, +) +from .metrics import ( + regression_metrics, +) +from .util import ( + ensure_dir, +) + +__all__ = ["ensure_dir", "logger", "regression_metrics"] diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/utils/base_logger.py b/deepmd/deepmd_property_tools/deepmd_property_tools/utils/base_logger.py new file mode 100644 index 0000000000..4cb8e9c88c --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/utils/base_logger.py @@ -0,0 +1,11 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Logging helpers.""" + +import logging + +logger = logging.getLogger("deepmd_property_tools") +if not logger.handlers: + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter("%(asctime)s | %(levelname)s | %(message)s")) + logger.addHandler(handler) +logger.setLevel(logging.INFO) diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/utils/metrics.py b/deepmd/deepmd_property_tools/deepmd_property_tools/utils/metrics.py new file mode 100644 index 0000000000..48a5fbad86 --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/utils/metrics.py @@ -0,0 +1,16 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Simple regression metrics.""" + +from __future__ import ( + annotations, +) + +import numpy as np + + +def regression_metrics(y_true: np.ndarray, y_pred: np.ndarray) -> dict[str, float]: + diff = np.asarray(y_pred, dtype=float) - np.asarray(y_true, dtype=float) + return { + "mae": float(np.mean(np.abs(diff))), + "rmse": float(np.sqrt(np.mean(diff * diff))), + } diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/utils/util.py b/deepmd/deepmd_property_tools/deepmd_property_tools/utils/util.py new file mode 100644 index 0000000000..9e3b7cba1e --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/utils/util.py @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""General utilities.""" + +from pathlib import ( + Path, +) + + +def ensure_dir(path: str | Path) -> Path: + out = Path(path) + out.mkdir(parents=True, exist_ok=True) + return out diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/weights/__init__.py b/deepmd/deepmd_property_tools/deepmd_property_tools/weights/__init__.py new file mode 100644 index 0000000000..785b2ddedd --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/weights/__init__.py @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Weight helpers.""" + +from .weighthub import ( + WeightHub, +) + +__all__ = ["WeightHub"] diff --git a/deepmd/deepmd_property_tools/deepmd_property_tools/weights/weighthub.py b/deepmd/deepmd_property_tools/deepmd_property_tools/weights/weighthub.py new file mode 100644 index 0000000000..3a3ada59fa --- /dev/null +++ b/deepmd/deepmd_property_tools/deepmd_property_tools/weights/weighthub.py @@ -0,0 +1,74 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +"""Local pretrained-weight path helper.""" + +from __future__ import ( + annotations, +) + +from pathlib import ( + Path, +) +from typing import ( + Any, +) + + +class WeightHub: + def __init__( + self, root: str | Path = ".", cache_dir: str | Path | None = None + ) -> None: + self.root = Path(root) + self.cache_dir = ( + Path(cache_dir) + if cache_dir is not None + else self.root / "pretrained_models" + ) + + def get(self, name_or_path: str | Path) -> str: + path = Path(name_or_path) + if path.exists(): + print(f"Using local pretrained model: {path.resolve()}") + return str(path) + candidate = self.root / path + if candidate.exists(): + print(f"Using local pretrained model: {candidate.resolve()}") + return str(candidate) + model_registry = self._model_registry() + model_name = self._resolve_model_name(path, model_registry) + if model_name is not None: + from deepmd.pretrained.download import ( + resolve_model_path, + ) + + filename = str(model_registry[model_name]["filename"]) + expected_path = self.cache_dir / filename + was_cached = expected_path.exists() + resolved_path = resolve_model_path(model_name, cache_dir=self.cache_dir) + action = "Using cached" if was_cached else "Downloaded" + print(f"{action} pretrained model: {resolved_path}") + return str(resolved_path) + available = ", ".join(sorted(model_registry)) + raise FileNotFoundError( + f"Pretrained model not found: {name_or_path}. Available built-in models: {available}" + ) + + @staticmethod + def _model_registry() -> dict[str, dict[str, Any]]: + from deepmd.pretrained.registry import ( + MODEL_REGISTRY, + ) + + return MODEL_REGISTRY + + @staticmethod + def _resolve_model_name( + path: Path, model_registry: dict[str, dict[str, Any]] + ) -> str | None: + alias = path.name + if alias in model_registry: + return alias + lowered = alias.lower() + for model_name, model_info in model_registry.items(): + if lowered in {model_name.lower(), str(model_info["filename"]).lower()}: + return model_name + return None diff --git a/deepmd/deepmd_property_tools/predict_property_20.py b/deepmd/deepmd_property_tools/predict_property_20.py new file mode 100644 index 0000000000..7bfff1ac4d --- /dev/null +++ b/deepmd/deepmd_property_tools/predict_property_20.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-3.0-or-later +from pathlib import ( + Path, +) + +from deepmd_property_tools import ( + PropertyPredict, +) + +ROOT = Path(__file__).resolve().parent +DATA_DIR = ROOT / "DATA" +MODEL_PATH = ROOT / "exp_property_20" / "model.ckpt-10.pt" + +if not MODEL_PATH.exists(): + raise FileNotFoundError(f"Train first; checkpoint not found: {MODEL_PATH}") + +predictor = PropertyPredict(load_model=MODEL_PATH) + +y_pred = predictor.predict( + { + "dataset": DATA_DIR / "dataset_demo.csv", + "mol_dir": DATA_DIR / "mol_convert", + }, + save_path=ROOT / "pred_property_20", +) + +print(y_pred) diff --git a/deepmd/deepmd_property_tools/pyproject.toml b/deepmd/deepmd_property_tools/pyproject.toml new file mode 100644 index 0000000000..6d3fd9b0b6 --- /dev/null +++ b/deepmd/deepmd_property_tools/pyproject.toml @@ -0,0 +1,47 @@ +[build-system] +requires = ["setuptools>=68", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "deepmd-property-tools" +version = "0.1.0" +description = "Uni-Mol-tools-like property training and prediction helpers for DeePMD-kit." +readme = "README.md" +requires-python = ">=3.10" +license = "LGPL-3.0-or-later" +authors = [ + {name = "DeepModeling"}, +] +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Science/Research", + "Operating System :: Microsoft :: Windows", + "Operating System :: POSIX :: Linux", + "Programming Language :: Python :: 3", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Scientific/Engineering :: Chemistry", +] +dependencies = [ + "deepmd-kit[torch]==3.1.3", + "dpdata", + "numpy", +] + +[project.optional-dependencies] +test = [ + "pytest", +] + +[project.scripts] +deepmd-property-tools = "deepmd_property_tools.cli:main" + +[tool.setuptools.packages.find] +where = ["."] +include = ["deepmd_property_tools*"] + +[tool.setuptools.package-data] +"deepmd_property_tools.config" = ["*.json"] + +[tool.pytest.ini_options] +testpaths = ["tests"] +python_files = ["test_*.py"] diff --git a/deepmd/deepmd_property_tools/tests/test_cli.py b/deepmd/deepmd_property_tools/tests/test_cli.py new file mode 100644 index 0000000000..f20142b5bf --- /dev/null +++ b/deepmd/deepmd_property_tools/tests/test_cli.py @@ -0,0 +1,75 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +from __future__ import ( + annotations, +) + +from pathlib import ( + Path, +) +from unittest import ( + mock, +) + +from deepmd_property_tools import ( + cli, +) + + +def test_main_prints_help_without_command(capsys) -> None: + exit_code = cli.main([]) + + captured = capsys.readouterr() + assert exit_code == 0 + assert "DeePMD molecular property training" in captured.out + + +def test_train_command_calls_property_train() -> None: + trainer = mock.Mock() + with mock.patch.object(cli, "PropertyTrain", return_value=trainer) as train_cls: + exit_code = cli.main( + [ + "train", + "--dataset", + "data.csv", + "--mol-dir", + "mol", + "--save-path", + "exp", + "--numb-steps", + "10", + "--batch-size", + "1", + ] + ) + + assert exit_code == 0 + train_cls.assert_called_once() + trainer.fit.assert_called_once_with( + {"dataset": Path("data.csv"), "mol_dir": Path("mol")} + ) + + +def test_predict_command_calls_property_predict() -> None: + predictor = mock.Mock() + predictor.predict.return_value = [[1.0]] + with mock.patch.object(cli, "PropertyPredict", return_value=predictor): + with mock.patch("builtins.print"): + exit_code = cli.main( + [ + "predict", + "--model", + "exp", + "--dataset", + "data.csv", + "--mol-dir", + "mol", + "--save-path", + "pred", + ] + ) + + assert exit_code == 0 + predictor.predict.assert_called_once_with( + {"dataset": Path("data.csv"), "mol_dir": Path("mol")}, + save_path=Path("pred"), + ) diff --git a/deepmd/deepmd_property_tools/tests/test_config.py b/deepmd/deepmd_property_tools/tests/test_config.py new file mode 100644 index 0000000000..43ec2942fb --- /dev/null +++ b/deepmd/deepmd_property_tools/tests/test_config.py @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +from __future__ import ( + annotations, +) + +from deepmd_property_tools.config import ( + ConfigHandler, +) + + +def test_merge_deep_updates_nested_dicts() -> None: + base = {"training": {"numb_steps": 10, "data": {"batch_size": 1}}, "loss": "mae"} + updates = {"training": {"data": {"batch_size": 4}}} + + merged = ConfigHandler.merge(base, updates) + + assert merged["training"]["numb_steps"] == 10 + assert merged["training"]["data"]["batch_size"] == 4 + assert base["training"]["data"]["batch_size"] == 1 diff --git a/deepmd/deepmd_property_tools/tests/test_mol.py b/deepmd/deepmd_property_tools/tests/test_mol.py new file mode 100644 index 0000000000..2ee0fb0477 --- /dev/null +++ b/deepmd/deepmd_property_tools/tests/test_mol.py @@ -0,0 +1,67 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +from __future__ import ( + annotations, +) + +from pathlib import ( + Path, +) + +import numpy as np +from deepmd_property_tools.data.mol import ( + build_used_type_map, + has_overlapping_atoms, + parse_property_value, + read_mol_coords, + records_from_direct_data, +) + + +def test_parse_property_value_accepts_text_with_units() -> None: + assert parse_property_value("gap = -1.25 eV") == -1.25 + + +def test_overlap_detection() -> None: + coords = np.array([[0.0, 0.0, 0.0], [0.0, 0.0, 0.0]], dtype=np.float32) + + assert has_overlapping_atoms(coords, 1e-6) + + +def test_type_map_uses_periodic_table_order() -> None: + assert build_used_type_map({"O", "C", "H"}) == ["H", "C", "O"] + + +def test_records_from_direct_data() -> None: + records, rows = records_from_direct_data( + { + "atoms": [["O", "H", "H"]], + "coordinates": [np.zeros((3, 3), dtype=np.float32)], + "target": [1.5], + } + ) + + assert records[0][0] == ["O", "H", "H"] + assert records[0][2] == 1.5 + assert rows == [{"sample_id": 0, "target": 1.5}] + + +def test_read_mol_coords(tmp_path: Path) -> None: + mol_path = tmp_path / "id0.mol" + mol_path.write_text( + "\n".join( + [ + "methane", + "", + "", + " 1 0 0 0 0 0 999 V2000", + " 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0", + "M END", + ] + ), + encoding="utf-8", + ) + + symbols, coords = read_mol_coords(mol_path) + + assert symbols == ["C"] + assert coords.shape == (1, 3) diff --git a/deepmd/deepmd_property_tools/tests/test_predict.py b/deepmd/deepmd_property_tools/tests/test_predict.py new file mode 100644 index 0000000000..d068c87135 --- /dev/null +++ b/deepmd/deepmd_property_tools/tests/test_predict.py @@ -0,0 +1,121 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +from __future__ import ( + annotations, +) + +import json +import time +from pathlib import ( + Path, +) +from unittest import ( + mock, +) + +import numpy as np +from deepmd_property_tools import ( + PropertyPredict, +) +from deepmd_property_tools.data.mol import ( + predict_records_from_data, +) + + +def _write_mol(path: Path) -> None: + path.write_text( + "\n".join( + [ + "water", + " deepmd_property_tools", + "", + " 3 2 0 0 0 0 999 V2000", + " 0.0000 0.0000 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0", + " 0.9572 0.0000 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0", + " -0.2390 0.9270 0.0000 H 0 0 0 0 0 0 0 0 0 0 0 0", + "M END", + "", + ] + ), + encoding="utf-8", + ) + + +def test_predict_records_from_csv_without_property_column(tmp_path: Path) -> None: + dataset = tmp_path / "dataset.csv" + dataset.write_text("SMILES\nO\n", encoding="utf-8") + mol_dir = tmp_path / "mol" + mol_dir.mkdir() + _write_mol(mol_dir / "id0.mol") + + atoms, coords, rows = predict_records_from_data( + {"dataset": dataset, "mol_dir": mol_dir}, + property_col=None, + ) + + assert atoms == [["O", "H", "H"]] + assert coords[0].shape == (3, 3) + assert rows == [{"SMILES": "O"}] + + +def test_predict_directory_uses_latest_checkpoint(tmp_path: Path) -> None: + old_checkpoint = tmp_path / "model.ckpt-1.pt" + old_checkpoint.write_text("old", encoding="utf-8") + time.sleep(0.01) + latest_checkpoint = tmp_path / "model.ckpt-2.pt" + latest_checkpoint.write_text("new", encoding="utf-8") + (tmp_path / "property_tools_config.json").write_text( + json.dumps({"type_map": ["H", "O"], "property_name": "Property"}), + encoding="utf-8", + ) + + predictor = PropertyPredict(tmp_path) + + assert predictor.load_model == latest_checkpoint + assert predictor.type_map == ["H", "O"] + + +def test_predict_directory_prefers_frozen_model(tmp_path: Path) -> None: + frozen_model = tmp_path / "frozen_model.pth" + frozen_model.write_text("frozen", encoding="utf-8") + checkpoint = tmp_path / "model.ckpt-1.pt" + checkpoint.write_text("checkpoint", encoding="utf-8") + (tmp_path / "property_tools_config.json").write_text( + json.dumps({"type_map": ["H"], "property_name": "Property"}), + encoding="utf-8", + ) + + predictor = PropertyPredict(tmp_path) + + assert predictor.load_model == frozen_model + + +def test_predict_save_handles_single_output(tmp_path: Path) -> None: + from deepmd_property_tools import predictor as predictor_module + + class DummyModel: + def __init__(self, model_path: Path) -> None: + self.model_path = model_path + + def eval(self, *args, **kwargs): + return (np.array([[1.25]], dtype=float),) + + with mock.patch.object(predictor_module, "PropertyModel", DummyModel): + predictor = predictor_module.Predictor( + model_path=tmp_path / "model.ckpt-1.pt", + type_map=["H"], + property_name="Property", + ) + y_pred = predictor.predict( + atoms=[["H"]], + coordinates=[np.array([[0.0, 0.0, 0.0]], dtype=np.float32)], + rows=[{"SMILES": "[H]"}], + save_path=tmp_path, + ) + + assert y_pred.tolist() == [[1.25]] + assert (tmp_path / "test.predict.0.csv").read_text( + encoding="utf-8" + ).splitlines() == [ + "SMILES,predict_Property", + "[H],1.25", + ] diff --git a/deepmd/deepmd_property_tools/tests/test_train.py b/deepmd/deepmd_property_tools/tests/test_train.py new file mode 100644 index 0000000000..96095ee683 --- /dev/null +++ b/deepmd/deepmd_property_tools/tests/test_train.py @@ -0,0 +1,20 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +from __future__ import ( + annotations, +) + +import pytest +from deepmd_property_tools import ( + PropertyTrain, +) + + +def test_property_train_rejects_unknown_arguments() -> None: + with pytest.raises(TypeError, match="Unexpected PropertyTrain argument"): + PropertyTrain(unknown_option=True) + + +def test_epochs_to_steps() -> None: + assert PropertyTrain._epochs_to_steps(None) == 1000000 + assert PropertyTrain._epochs_to_steps(2) == 2000 + assert PropertyTrain._epochs_to_steps(0) == 1000 diff --git a/deepmd/deepmd_property_tools/tests/test_trainer.py b/deepmd/deepmd_property_tools/tests/test_trainer.py new file mode 100644 index 0000000000..a802efc60a --- /dev/null +++ b/deepmd/deepmd_property_tools/tests/test_trainer.py @@ -0,0 +1,49 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +from __future__ import ( + annotations, +) + +from pathlib import ( + Path, +) +from unittest import ( + mock, +) + +from deepmd_property_tools.tasks.trainer import ( + Trainer, +) + + +def test_latest_checkpoint_prefers_newest_numbered_checkpoint(tmp_path: Path) -> None: + fallback = tmp_path / "model.ckpt.pt" + fallback.write_text("fallback", encoding="utf-8") + checkpoint = tmp_path / "model.ckpt-10.pt" + checkpoint.write_text("checkpoint", encoding="utf-8") + + trainer = Trainer(save_path=tmp_path) + + assert trainer.latest_checkpoint() == checkpoint + + +def test_torchrun_command_includes_options() -> None: + trainer = Trainer( + save_path="exp", + finetune="pretrained.pt", + nproc_per_node=2, + use_pretrain_script=True, + force_load=True, + skip_neighbor_stat=True, + model_branch="Default", + ) + + with mock.patch("subprocess.run") as run_mock: + trainer._run_torchrun(Path("input.json")) + + cmd = run_mock.call_args.args[0] + assert "--nproc_per_node=2" in cmd + assert "--finetune" in cmd + assert "--use-pretrain-script" in cmd + assert "--force-load" in cmd + assert "--skip-neighbor-stat" in cmd + assert "--model-branch" in cmd diff --git a/deepmd/deepmd_property_tools/train_property_20.py b/deepmd/deepmd_property_tools/train_property_20.py new file mode 100644 index 0000000000..db98f31ea6 --- /dev/null +++ b/deepmd/deepmd_property_tools/train_property_20.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: LGPL-3.0-or-later +from pathlib import ( + Path, +) + +from deepmd_property_tools import ( + PropertyPredict, + PropertyTrain, +) + +ROOT = Path(__file__).resolve().parent +DATA_DIR = ROOT / "DATA" +EXP_DIR = ROOT / "exp_property_20" +PRED_DIR = ROOT / "pred_property_20" +PRETRAINED_MODEL = "DPA-3.2-5M" +TRAIN_DATA = { + "dataset": DATA_DIR / "dataset_demo.csv", + "mol_dir": DATA_DIR / "mol_convert", +} +PREDICT_DATA = { + "dataset": DATA_DIR / "dataset_demo.csv", + "mol_dir": DATA_DIR / "mol_convert", +} + +trainer = PropertyTrain( + task="regression", + data_type="molecule", + property_name="Property", + property_col="Property", + save_path=EXP_DIR, + epochs=1, + numb_steps=10, + batch_size=1, + model_name="dpa3", + model_size="5m", + freeze=False, + finetune=PRETRAINED_MODEL, + use_pretrain_script=False, + input_updates={ + "learning_rate": { + "type": "exp", + "decay_steps": 1000, + "start_lr": 1e-4, + "stop_lr": 1e-6, + "warmup_steps": 0, + } + }, +) + +trainer.fit(TRAIN_DATA) + +checkpoints = sorted( + EXP_DIR.glob("model.ckpt-*.pt"), key=lambda path: path.stat().st_mtime +) +if not checkpoints: + raise FileNotFoundError(f"No checkpoint found in {EXP_DIR}") +model_path = checkpoints[-1] +print(f"Using trained model for prediction: {model_path}") + +predictor = PropertyPredict(load_model=model_path) +y_pred = predictor.predict(PREDICT_DATA, save_path=PRED_DIR) +print(y_pred)