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, rho_origin = string2density(cas)
84
- mp, mp_origin = mol2mp(cas, name, smiles)
85
- if pd.isna(rho) and name:
 
 
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
- LogP, LogP_origin = LogP_func(cas, mol)
 
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, rho_origin = string2density(name)
107
- if pd.isna(rho) and cas:
 
108
  rho, rho_origin = string2density(cas)
109
 
110
- mp, mp_origin = mol2mp(cas, name, smiles)
 
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
- LogP, LogP_origin = LogP_func(cas, mol)
 
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, mp_origin = mol2mp(cas, name, smiles)
 
142
  try:
143
  mol = Chem.MolFromSmiles(smiles)
144
  except:
145
  error = 2
146
  if mol:
147
  Mw = Descriptors.MolWt(mol)
148
- LogP, LogP_origin = LogP_func(cas, mol)
 
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
- # output additional info
 
 
 
 
 
 
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 LogP is np.nan or LogP is None:
 
 
43
  LogP = 'Not found'
44
  else:
45
- LogP = SigFigs(LogP, 6)
46
- if rho is np.nan or rho is None:
 
 
47
  rho = 'Not found'
48
  else:
49
  rho = SigFigs(rho, 4)
50
- if mp is np.nan or mp is None:
 
 
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
- LogKow :: {{'%0.2f'%LogP|float}}{{LogP_origin}} <br> <br>
 
50
  Density (g/cm<sup>3</sup>) :: {{rho}}{{rho_origin}} <br> <br>
51
- Melting point (&deg;C) :: {{'%0.1f'%mp|float}}{{mp_origin}} <br> <br>
 
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 (&deg;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 :: {{'%0.2f'%LogP|float}}{{LogP_origin}}<br> <br>
61
  Density (g/cm<sup>3</sup>) :: {{rho}}{{rho_origin}}<br> <br>
62
- Melting point (&deg;C) :: {{'%0.1f'%mp|float}}{{mp_origin}}<br> <br>
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 (&deg;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
- LogKow :: {{'%0.2f'%LogP|float}}{{LogP_origin}} <br> <br>
 
50
  Density (g/cm<sup>3</sup>) :: {{rho}}{{rho_origin}} <br> <br>
51
- Melting point (&deg;C) :: {{'%0.1f'%mp|float}}{{mp_origin}} <br> <br>
 
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 (&deg;C) :: {{mp}}{{mp_origin}} <br> <br>
53
+ {% endif %}
54
  SMILES :: {{smiles}}
55
  </div>
56
  <div class="column">