-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmol_convertor.py
51 lines (47 loc) · 1.61 KB
/
mol_convertor.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
46
47
48
49
50
51
def replace_H_with_Li(mol):
"""HをLiに入れ替える"""
mol=Chem.AddHs(mol)
rw_mol=Chem.RWMol(mol)
for atm in rw_mol.GetAtoms():
if atm.GetSymbol() != "H":
if atm.GetSymbol() == "Li":
raise ValueError("もともとLiが含まれている")
continue
idx=atm.GetIdx()
rw_mol.ReplaceAtom(idx,atm_Li)
Chem.SanitizeMol(rw_mol)
return rw_mol.GetMol()
def replace_rad_with_Na(mol):
"""radをNaに入れ替える"""
rw_mol=Chem.RWMol(mol)
atm_num=rw_mol.GetNumAtoms()
na_idx=atm_num
for idx in range(atm_num):
atm=rw_mol.GetAtomWithIdx(idx)
if atm.GetSymbol() == "Na":
raise ValueError("もともとNaが含まれている")
rad_num=atm.GetNumRadicalElectrons()
if rad_num==0:
continue
atm.SetNumRadicalElectrons(0)
for j in range(rad_num):
# Naを加える
rw_mol.AddAtom(atm_Na)
# ラジカルのあった原子とNaをつなぐ
rw_mol.AddBond(idx,na_idx,order=Chem.BondType.SINGLE)
na_idx +=1
Chem.SanitizeMol(rw_mol)
return rw_mol.GetMol()
def replace_rad_with_H(mol):
"""radをHに入れ替える"""
mol=Chem.AddHs(mol)
rw_mol=Chem.RWMol(mol)
for atm in rw_mol.GetAtoms():
if atm.GetSymbol() == "H":
raise ValueError("もともとHが含まれている")
rad_num=atm.GetNumRadicalElectrons()
atm.SetNumRadicalElectrons(0)
atm.SetNumExplicitHs(rad_num)
Chem.SanitizeMol(rw_mol)
e_mol=rw_mol.GetMol()
return e_mol