Files
CoolProp/dev/scripts/inject_InChI.py
2016-07-30 17:47:58 -06:00

69 lines
2.1 KiB
Python

import CoolProp
from chemspipy import ChemSpider
from chemspipy_key import key # private file with the key (DO NOT COMMIT!!)
import glob, json
cs = ChemSpider(key)
# Map from name to Chemspider ID
backup_map = {
'Propyne': 6095,
'R236EA': 71342,
'R245ca': 62827,
'trans-2-Butene': 56442,
'Oxygen': 952,
'Fluorine': 22932,
'Hydrogen': 762,
'Deuterium': 22931,
'HFE143m': 66577,
'SulfurHexafluoride': 16425,
'R114': 13853215
}
# Make sure the key works
c = cs.get_compound(2157)
assert(c.inchikey == 'BSYNRYMUTXBXSQ-UHFFFAOYAW')
for fname in glob.glob('../fluids/*.json'):
with open(fname,'r') as fp:
jj = json.load(fp)
fluid = jj['INFO']['NAME']
def doset(result):
jj['INFO']['INCHI_STRING'] = result.inchi
jj['INFO']['INCHI_KEY'] = result.inchikey
jj['INFO']['CHEMSPIDER_ID'] = result.csid
jj['INFO']['2DPNG_URL'] = result.image_url
jj['INFO']['SMILES'] = result.smiles
CAS = CoolProp.CoolProp.get_fluid_param_string(fluid, "CAS")
if '.' not in CAS:
results = cs.search(CAS)
results.wait()
if fluid in backup_map:
results = cs.search(backup_map[fluid])
results.wait()
assert(len(results) == 1)
doset(results[0])
if len(results) == 1:
doset(results[0])
elif fluid in backup_map:
results = cs.search(backup_map[fluid])
results.wait()
assert(len(results) == 1)
doset(results[0])
else:
print fluid, CAS, '!!failure!!', len(results)
for result in results:
spectra = cs.get_compound_spectra(result.csid)
if spectra and '##CAS REGISTRY NO='+CAS in spectra[0].data:
doset(result)
print ('GOT IT!!')
break
print result.common_name, result.inchikey, result.stdinchi, cs.get_extended_compound_info(result.csid)
print ''
with open(fname,'w') as fp:
json.dump(jj, fp, indent = 2, sort_keys = True)
del jj, fp