robert.elder commited on
Commit ·
f685541
1
Parent(s): 91f8a55
added get_properties option to ResolveChemical and exposure.py to only get some properties like MP, and added show_properties flag to exposure.py to show/hide properties
Browse files
ChemID.py
CHANGED
|
@@ -51,7 +51,7 @@ dfmp_expt = pd.read_csv('PHYSPROP_MP_data.tsv', sep='\t')
|
|
| 51 |
#df_pred = pd.read_excel('Comptox_pred_data.xlsx')
|
| 52 |
df_pred = pd.read_csv('Comptox_pred_data.tsv', sep='\t')
|
| 53 |
|
| 54 |
-
def ResolveChemical(chemName, IDtype, debug=False):
|
| 55 |
|
| 56 |
#LogP_func = Crippen.MolLogP
|
| 57 |
LogP_func = getLogP
|
|
@@ -80,9 +80,11 @@ def ResolveChemical(chemName, IDtype, debug=False):
|
|
| 80 |
|
| 81 |
if smiles:
|
| 82 |
name = cas2name(cas)
|
| 83 |
-
rho
|
| 84 |
-
|
| 85 |
-
if
|
|
|
|
|
|
|
| 86 |
rho, rho_origin = string2density(name)
|
| 87 |
try:
|
| 88 |
mol = Chem.MolFromSmiles(smiles)
|
|
@@ -90,7 +92,8 @@ def ResolveChemical(chemName, IDtype, debug=False):
|
|
| 90 |
error = 2 #invalid smiles
|
| 91 |
if mol:
|
| 92 |
Mw = Descriptors.MolWt(mol)
|
| 93 |
-
|
|
|
|
| 94 |
im = ImageFromSmiles(smiles)
|
| 95 |
im64 = Imageto64(im)
|
| 96 |
else:
|
|
@@ -103,11 +106,13 @@ def ResolveChemical(chemName, IDtype, debug=False):
|
|
| 103 |
name = smiles2name(smiles)
|
| 104 |
if name:
|
| 105 |
cas = name2cas(name)
|
| 106 |
-
rho
|
| 107 |
-
|
|
|
|
| 108 |
rho, rho_origin = string2density(cas)
|
| 109 |
|
| 110 |
-
mp
|
|
|
|
| 111 |
|
| 112 |
try:
|
| 113 |
mol = Chem.MolFromSmiles(smiles)
|
|
@@ -115,7 +120,8 @@ def ResolveChemical(chemName, IDtype, debug=False):
|
|
| 115 |
error = 2
|
| 116 |
if mol:
|
| 117 |
Mw = Descriptors.MolWt(mol)
|
| 118 |
-
|
|
|
|
| 119 |
im = ImageFromSmiles(smiles)
|
| 120 |
im64 = Imageto64(im)
|
| 121 |
else:
|
|
@@ -129,23 +135,25 @@ def ResolveChemical(chemName, IDtype, debug=False):
|
|
| 129 |
if not smiles:
|
| 130 |
smiles = cas2smiles(cas)
|
| 131 |
|
| 132 |
-
if pd.isna(rho) and cas:
|
| 133 |
rho, rho_origin = string2density(cas)
|
| 134 |
-
if pd.isna(rho):
|
| 135 |
rho, rho_origin = string2density(name)
|
| 136 |
-
if pd.isna(rho):
|
| 137 |
# try this because sometimes iupac names don't work
|
| 138 |
rho, rho_origin = string2density(chemName)
|
| 139 |
|
| 140 |
if smiles:
|
| 141 |
-
mp
|
|
|
|
| 142 |
try:
|
| 143 |
mol = Chem.MolFromSmiles(smiles)
|
| 144 |
except:
|
| 145 |
error = 2
|
| 146 |
if mol:
|
| 147 |
Mw = Descriptors.MolWt(mol)
|
| 148 |
-
|
|
|
|
| 149 |
im = ImageFromSmiles(smiles)
|
| 150 |
im64 = Imageto64(im)
|
| 151 |
else:
|
|
|
|
| 51 |
#df_pred = pd.read_excel('Comptox_pred_data.xlsx')
|
| 52 |
df_pred = pd.read_csv('Comptox_pred_data.tsv', sep='\t')
|
| 53 |
|
| 54 |
+
def ResolveChemical(chemName, IDtype, debug=False, get_properties=['logp','rho','mp']):
|
| 55 |
|
| 56 |
#LogP_func = Crippen.MolLogP
|
| 57 |
LogP_func = getLogP
|
|
|
|
| 80 |
|
| 81 |
if smiles:
|
| 82 |
name = cas2name(cas)
|
| 83 |
+
if 'rho' in get_properties:
|
| 84 |
+
rho, rho_origin = string2density(cas)
|
| 85 |
+
if 'mp' in get_properties:
|
| 86 |
+
mp, mp_origin = mol2mp(cas, name, smiles)
|
| 87 |
+
if 'rho' in get_properties and pd.isna(rho) and name:
|
| 88 |
rho, rho_origin = string2density(name)
|
| 89 |
try:
|
| 90 |
mol = Chem.MolFromSmiles(smiles)
|
|
|
|
| 92 |
error = 2 #invalid smiles
|
| 93 |
if mol:
|
| 94 |
Mw = Descriptors.MolWt(mol)
|
| 95 |
+
if 'logp' in get_properties:
|
| 96 |
+
LogP, LogP_origin = LogP_func(cas, mol)
|
| 97 |
im = ImageFromSmiles(smiles)
|
| 98 |
im64 = Imageto64(im)
|
| 99 |
else:
|
|
|
|
| 106 |
name = smiles2name(smiles)
|
| 107 |
if name:
|
| 108 |
cas = name2cas(name)
|
| 109 |
+
if 'rho' in get_properties:
|
| 110 |
+
rho, rho_origin = string2density(name)
|
| 111 |
+
if 'rho' in get_properties and pd.isna(rho) and cas:
|
| 112 |
rho, rho_origin = string2density(cas)
|
| 113 |
|
| 114 |
+
if 'mp' in get_properties:
|
| 115 |
+
mp, mp_origin = mol2mp(cas, name, smiles)
|
| 116 |
|
| 117 |
try:
|
| 118 |
mol = Chem.MolFromSmiles(smiles)
|
|
|
|
| 120 |
error = 2
|
| 121 |
if mol:
|
| 122 |
Mw = Descriptors.MolWt(mol)
|
| 123 |
+
if 'logp' in get_properties:
|
| 124 |
+
LogP, LogP_origin = LogP_func(cas, mol)
|
| 125 |
im = ImageFromSmiles(smiles)
|
| 126 |
im64 = Imageto64(im)
|
| 127 |
else:
|
|
|
|
| 135 |
if not smiles:
|
| 136 |
smiles = cas2smiles(cas)
|
| 137 |
|
| 138 |
+
if 'rho' in get_properties and pd.isna(rho) and cas:
|
| 139 |
rho, rho_origin = string2density(cas)
|
| 140 |
+
if 'rho' in get_properties and pd.isna(rho):
|
| 141 |
rho, rho_origin = string2density(name)
|
| 142 |
+
if 'rho' in get_properties and pd.isna(rho):
|
| 143 |
# try this because sometimes iupac names don't work
|
| 144 |
rho, rho_origin = string2density(chemName)
|
| 145 |
|
| 146 |
if smiles:
|
| 147 |
+
if 'mp' in get_properties:
|
| 148 |
+
mp, mp_origin = mol2mp(cas, name, smiles)
|
| 149 |
try:
|
| 150 |
mol = Chem.MolFromSmiles(smiles)
|
| 151 |
except:
|
| 152 |
error = 2
|
| 153 |
if mol:
|
| 154 |
Mw = Descriptors.MolWt(mol)
|
| 155 |
+
if 'logp' in get_properties:
|
| 156 |
+
LogP, LogP_origin = LogP_func(cas, mol)
|
| 157 |
im = ImageFromSmiles(smiles)
|
| 158 |
im64 = Imageto64(im)
|
| 159 |
else:
|
exposure_module/exposure.py
CHANGED
|
@@ -11,7 +11,13 @@ from rdkit.Chem import AllChem as Chem
|
|
| 11 |
# load polymer data including Ap values
|
| 12 |
polymers, Ap = Polymers()
|
| 13 |
|
| 14 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
debug = False
|
| 16 |
|
| 17 |
# load the index page for the exposure module
|
|
@@ -28,26 +34,32 @@ def exp_post():
|
|
| 28 |
IDtype = request.form["IDtype"]
|
| 29 |
|
| 30 |
if debug:
|
| 31 |
-
iupac, cas, smiles, MW, LogP, LogP_origin, rho, rho_origin, mp, mp_origin, molImage, error = ResolveChemical(chemName, IDtype, debug=debug)
|
| 32 |
LogP_origin, rho_origin, mp_origin = f' ({LogP_origin})', f' ({rho_origin})', f' ({mp_origin})',
|
| 33 |
else:
|
| 34 |
LogP_origin, rho_origin, mp_origin = '','',''
|
| 35 |
-
iupac, cas, smiles, MW, LogP, rho, mp, molImage, error = ResolveChemical(chemName, IDtype)
|
| 36 |
|
| 37 |
if error > 0:
|
| 38 |
# TODO output more useful info
|
| 39 |
return render_template('chemError.html')
|
| 40 |
|
| 41 |
-
MW = SigFigs(MW, 6)
|
| 42 |
-
if
|
|
|
|
|
|
|
| 43 |
LogP = 'Not found'
|
| 44 |
else:
|
| 45 |
-
LogP = SigFigs(LogP,
|
| 46 |
-
if rho
|
|
|
|
|
|
|
| 47 |
rho = 'Not found'
|
| 48 |
else:
|
| 49 |
rho = SigFigs(rho, 4)
|
| 50 |
-
if mp
|
|
|
|
|
|
|
| 51 |
mp = 'Not found'
|
| 52 |
|
| 53 |
# metals/ceramics logic
|
|
@@ -58,7 +70,7 @@ def exp_post():
|
|
| 58 |
|
| 59 |
# only one atom, except for carbon -> assumed metal
|
| 60 |
# return render_template('chemError.html')
|
| 61 |
-
return render_template('metalError.html', chemName=chemName, MW=MW, LogP=LogP, rho=rho, mp=mp, iupac=iupac,
|
| 62 |
cas=cas, smiles=smiles, molImage=molImage,
|
| 63 |
LogP_origin=LogP_origin, rho_origin=rho_origin, mp_origin=mp_origin)
|
| 64 |
else:
|
|
@@ -72,7 +84,7 @@ def exp_post():
|
|
| 72 |
ceramic = True
|
| 73 |
|
| 74 |
if MW < 100.:
|
| 75 |
-
return render_template('MwError.html', chemName=chemName, MW=MW, LogP=LogP, rho=rho, mp=mp, iupac=iupac, cas=cas, smiles=smiles, molImage=molImage,
|
| 76 |
LogP_origin=LogP_origin, rho_origin=rho_origin, mp_origin=mp_origin)
|
| 77 |
|
| 78 |
amount = float(request.form["amount"])
|
|
@@ -116,7 +128,7 @@ def exp_post():
|
|
| 116 |
rates = SheetRates(amount, vol, area, tarray, diff)
|
| 117 |
pngImageB64String = RatePlot(tarray, rates)
|
| 118 |
|
| 119 |
-
return render_template('exposure_report.html', polymers=polymers, pIndex=pIndex, release=release,
|
| 120 |
assume=assume, area=area, vol=vol, amount=amount, diff=diff, time=time, exposure=exposure, TTC=TTC,
|
| 121 |
MOS=MOS, chemName=chemName, image=pngImageB64String, MW=MW, LogP=LogP, rho=rho, mp=mp, iupac=iupac, cas=cas, smiles=smiles, molImage=molImage,
|
| 122 |
LogP_origin=LogP_origin, rho_origin=rho_origin, mp_origin=mp_origin, ceramic=ceramic)
|
|
|
|
| 11 |
# load polymer data including Ap values
|
| 12 |
polymers, Ap = Polymers()
|
| 13 |
|
| 14 |
+
# get additional physical properties, options are: logp, rho, mp
|
| 15 |
+
#get_properties = [] # don't get any; this breaks ceramics logic
|
| 16 |
+
#get_properties = ['logp','rho','mp'] # get all three
|
| 17 |
+
get_properties = ['mp'] # only get mp
|
| 18 |
+
# show additional physical properties
|
| 19 |
+
show_properties = False
|
| 20 |
+
# output additional info for physical properties
|
| 21 |
debug = False
|
| 22 |
|
| 23 |
# load the index page for the exposure module
|
|
|
|
| 34 |
IDtype = request.form["IDtype"]
|
| 35 |
|
| 36 |
if debug:
|
| 37 |
+
iupac, cas, smiles, MW, LogP, LogP_origin, rho, rho_origin, mp, mp_origin, molImage, error = ResolveChemical(chemName, IDtype, debug=debug, get_properties=['logp','rho','mp'])
|
| 38 |
LogP_origin, rho_origin, mp_origin = f' ({LogP_origin})', f' ({rho_origin})', f' ({mp_origin})',
|
| 39 |
else:
|
| 40 |
LogP_origin, rho_origin, mp_origin = '','',''
|
| 41 |
+
iupac, cas, smiles, MW, LogP, rho, mp, molImage, error = ResolveChemical(chemName, IDtype, get_properties=get_properties)
|
| 42 |
|
| 43 |
if error > 0:
|
| 44 |
# TODO output more useful info
|
| 45 |
return render_template('chemError.html')
|
| 46 |
|
| 47 |
+
#MW = SigFigs(MW, 6)
|
| 48 |
+
if 'logp' not in get_properties:
|
| 49 |
+
LogP = 'Not searched'
|
| 50 |
+
elif LogP is np.nan or LogP is None:
|
| 51 |
LogP = 'Not found'
|
| 52 |
else:
|
| 53 |
+
LogP = SigFigs(LogP, 4)
|
| 54 |
+
if 'rho' not in get_properties:
|
| 55 |
+
rho = 'Not searched'
|
| 56 |
+
elif rho is np.nan or rho is None:
|
| 57 |
rho = 'Not found'
|
| 58 |
else:
|
| 59 |
rho = SigFigs(rho, 4)
|
| 60 |
+
if 'mp' not in get_properties:
|
| 61 |
+
mp = 'Not searched'
|
| 62 |
+
elif mp is np.nan or mp is None:
|
| 63 |
mp = 'Not found'
|
| 64 |
|
| 65 |
# metals/ceramics logic
|
|
|
|
| 70 |
|
| 71 |
# only one atom, except for carbon -> assumed metal
|
| 72 |
# return render_template('chemError.html')
|
| 73 |
+
return render_template('metalError.html', show_properties=show_properties, chemName=chemName, MW=MW, LogP=LogP, rho=rho, mp=mp, iupac=iupac,
|
| 74 |
cas=cas, smiles=smiles, molImage=molImage,
|
| 75 |
LogP_origin=LogP_origin, rho_origin=rho_origin, mp_origin=mp_origin)
|
| 76 |
else:
|
|
|
|
| 84 |
ceramic = True
|
| 85 |
|
| 86 |
if MW < 100.:
|
| 87 |
+
return render_template('MwError.html', show_properties=show_properties, chemName=chemName, MW=MW, LogP=LogP, rho=rho, mp=mp, iupac=iupac, cas=cas, smiles=smiles, molImage=molImage,
|
| 88 |
LogP_origin=LogP_origin, rho_origin=rho_origin, mp_origin=mp_origin)
|
| 89 |
|
| 90 |
amount = float(request.form["amount"])
|
|
|
|
| 128 |
rates = SheetRates(amount, vol, area, tarray, diff)
|
| 129 |
pngImageB64String = RatePlot(tarray, rates)
|
| 130 |
|
| 131 |
+
return render_template('exposure_report.html', show_properties=show_properties, polymers=polymers, pIndex=pIndex, release=release,
|
| 132 |
assume=assume, area=area, vol=vol, amount=amount, diff=diff, time=time, exposure=exposure, TTC=TTC,
|
| 133 |
MOS=MOS, chemName=chemName, image=pngImageB64String, MW=MW, LogP=LogP, rho=rho, mp=mp, iupac=iupac, cas=cas, smiles=smiles, molImage=molImage,
|
| 134 |
LogP_origin=LogP_origin, rho_origin=rho_origin, mp_origin=mp_origin, ceramic=ceramic)
|
exposure_module/templates/MwError.html
CHANGED
|
@@ -45,10 +45,12 @@
|
|
| 45 |
Input :: {{chemName}} <br> <br>
|
| 46 |
IUPAC Name :: {{iupac}} <br> <br>
|
| 47 |
CAS :: {{cas}} <br> <br>
|
| 48 |
-
Molecular weight (g/mol) :: {{MW}} <br> <br>
|
| 49 |
-
|
|
|
|
| 50 |
Density (g/cm<sup>3</sup>) :: {{rho}}{{rho_origin}} <br> <br>
|
| 51 |
-
Melting point (°C) :: {{
|
|
|
|
| 52 |
SMILES :: {{smiles}}
|
| 53 |
</div>
|
| 54 |
<div class="column">
|
|
|
|
| 45 |
Input :: {{chemName}} <br> <br>
|
| 46 |
IUPAC Name :: {{iupac}} <br> <br>
|
| 47 |
CAS :: {{cas}} <br> <br>
|
| 48 |
+
Molecular weight (g/mol) :: {{'%0.4f'%MW|float}} <br> <br>
|
| 49 |
+
{% if show_properties %}
|
| 50 |
+
LogKow :: {{LogP}}{{LogP_origin}} <br> <br>
|
| 51 |
Density (g/cm<sup>3</sup>) :: {{rho}}{{rho_origin}} <br> <br>
|
| 52 |
+
Melting point (°C) :: {{mp}}{{mp_origin}} <br> <br>
|
| 53 |
+
{% endif %}
|
| 54 |
SMILES :: {{smiles}}
|
| 55 |
</div>
|
| 56 |
<div class="column">
|
exposure_module/templates/exposure_report.html
CHANGED
|
@@ -53,14 +53,14 @@
|
|
| 53 |
Input :: {{chemName}} <br> <br>
|
| 54 |
IUPAC Name :: {{iupac}} <br> <br>
|
| 55 |
CAS :: {{cas}} <br> <br>
|
| 56 |
-
Molecular weight (g/mol) :: {{MW}}
|
| 57 |
{% if ceramic %} :: ceramic detected, assume maximum Mw {% endif %}
|
| 58 |
<br> <br>
|
| 59 |
-
|
| 60 |
-
LogKow :: {{
|
| 61 |
Density (g/cm<sup>3</sup>) :: {{rho}}{{rho_origin}}<br> <br>
|
| 62 |
-
Melting point (°C) :: {{
|
| 63 |
-
|
| 64 |
SMILES :: {{smiles}}
|
| 65 |
</div>
|
| 66 |
<div class="column">
|
|
|
|
| 53 |
Input :: {{chemName}} <br> <br>
|
| 54 |
IUPAC Name :: {{iupac}} <br> <br>
|
| 55 |
CAS :: {{cas}} <br> <br>
|
| 56 |
+
Molecular weight (g/mol) :: {{'%0.4f'%MW|float}}
|
| 57 |
{% if ceramic %} :: ceramic detected, assume maximum Mw {% endif %}
|
| 58 |
<br> <br>
|
| 59 |
+
{% if show_properties %}
|
| 60 |
+
LogKow :: {{LogP}}{{LogP_origin}}<br> <br>
|
| 61 |
Density (g/cm<sup>3</sup>) :: {{rho}}{{rho_origin}}<br> <br>
|
| 62 |
+
Melting point (°C) :: {{mp}}{{mp_origin}}<br> <br>
|
| 63 |
+
{% endif %}
|
| 64 |
SMILES :: {{smiles}}
|
| 65 |
</div>
|
| 66 |
<div class="column">
|
exposure_module/templates/metalError.html
CHANGED
|
@@ -45,10 +45,12 @@
|
|
| 45 |
Input :: {{chemName}} <br> <br>
|
| 46 |
IUPAC Name :: {{iupac}} <br> <br>
|
| 47 |
CAS :: {{cas}} <br> <br>
|
| 48 |
-
Molecular weight (g/mol) :: {{MW}} <br> <br>
|
| 49 |
-
|
|
|
|
| 50 |
Density (g/cm<sup>3</sup>) :: {{rho}}{{rho_origin}} <br> <br>
|
| 51 |
-
Melting point (°C) :: {{
|
|
|
|
| 52 |
SMILES :: {{smiles}}
|
| 53 |
</div>
|
| 54 |
<div class="column">
|
|
|
|
| 45 |
Input :: {{chemName}} <br> <br>
|
| 46 |
IUPAC Name :: {{iupac}} <br> <br>
|
| 47 |
CAS :: {{cas}} <br> <br>
|
| 48 |
+
Molecular weight (g/mol) :: {{'%0.4f'%MW|float}} <br> <br>
|
| 49 |
+
{% if show_properties %}
|
| 50 |
+
LogKow :: {{LogP}}{{LogP_origin}} <br> <br>
|
| 51 |
Density (g/cm<sup>3</sup>) :: {{rho}}{{rho_origin}} <br> <br>
|
| 52 |
+
Melting point (°C) :: {{mp}}{{mp_origin}} <br> <br>
|
| 53 |
+
{% endif %}
|
| 54 |
SMILES :: {{smiles}}
|
| 55 |
</div>
|
| 56 |
<div class="column">
|