-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathguess.py
46 lines (33 loc) · 1.33 KB
/
guess.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import numpy as np
import pandas as pd
def _guess_pairs14(bonds):
pairs14 = []
#if len(self.dsorted) == 0:
# return pairs14
for b in bonds:
for i in [0, 1]:
idx1 = b[i]
bA1l = bonds[:,0] == idx1
bA1r = bonds[:,1] == idx1
ids2 = np.concatenate([bonds[:,1][bA1l], bonds[:,0][bA1r]])
if len(ids2) == 0: continue
bA2l = np.isin(bonds[:,0], ids2)
bA2r = np.isin(bonds[:,1], ids2)
ids3 = np.concatenate([bonds[:,1][bA2l], bonds[:,0][bA2r]])
ids3 = np.delete(ids3, np.isin(ids3, idx1))
if len(ids3) == 0: continue
bA3l = np.isin(bonds[:,0], ids3)
bA3r = np.isin(bonds[:,1], ids3)
ids4 = np.concatenate([bonds[:,1][bA3l], bonds[:,0][bA3r]])
ids4 = np.delete(ids4, np.isin(ids4, ids2))
ids4 = np.delete(ids4, np.isin(ids4, ids3)) #cholesterol pentagon
if len(ids4) == 0: continue
for idx4 in ids4:
if idx1 > idx4:
result = [idx4, idx1]
else:
result = [idx1, idx4]
if result not in pairs14:
pairs14.append(result)
df = pd.DataFrame(pairs14)
return df.sort_values(by=[0,1]).to_numpy()