{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import os\nimport gc\nimport numpy as np\nimport pandas as pd\nfrom tqdm import tqdm\nimport warnings\nwarnings.filterwarnings(\"ignore\")\nimport math\npd.options.display.precision = 15","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"!ls ../input/","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"!conda install -y -c openbabel openbabel \nimport openbabel\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"file_folder = '../input'\ntrain = pd.read_csv(f'{file_folder}/train.csv')\ntest = pd.read_csv(f'{file_folder}/test.csv')\nstructures = pd.read_csv('../input/structures.csv')\nx = structures.groupby('molecule_name').atom_index.max().reset_index(drop=False)\nx.columns = ['molecule_name','totalatoms']\ntrain = train.merge(x,on='molecule_name')\ntrain = train[train.molecule_name=='dsgdb9nsd_000001']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"obConversion = openbabel.OBConversion()\nobConversion.SetInFormat(\"xyz\")\nstructdir='../input/structures/'\nmols=[]\nmols_files=os.listdir(structdir)\nmols_index=dict(map(reversed,enumerate(mols_files)))\nfor f in mols_index.keys():\n    mol = openbabel.OBMol()\n    obConversion.ReadFile(mol, structdir+f) \n    mols.append(mol)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"stats = []\nfor m,groupdf in tqdm(train.groupby('molecule_name')):\n    mol=mols[mols_index[m+'.xyz']]\n    for i in groupdf.index.values:\n        totalatoms = groupdf.loc[i].totalatoms\n        firstatomid = int(groupdf.loc[i].atom_index_0)\n        secondatomid = int(groupdf.loc[i].atom_index_1)\n        entrystats = {}\n        entrystats['totalatoms'] = totalatoms\n        entrystats['scalar_coupling_constant'] = float(groupdf.loc[i].scalar_coupling_constant)\n        entrystats['type'] = groupdf.loc[i]['type']\n        a = mol.GetAtomById(firstatomid)\n        b = mol.GetAtomById(secondatomid)\n        entrystats['molecule_name'] = m\n        entrystats['atom_index_0'] = firstatomid\n        entrystats['atom_index_1'] = secondatomid\n        entrystats['bond_distance'] = a.GetDistance(b)\n        entrystats['bond_atom'] = b.GetType()\n        entrystats['charge_H'] = a.GetPartialCharge()\n        entrystats['charge_atom'] = b.GetPartialCharge()\n\n        #Put the tertiary data in order of distance from first hydrogen\n        tertiarystats = {}\n        for j,c in enumerate(list(set(range(totalatoms)).difference(set([firstatomid,secondatomid])))):\n            tertiaryatom = mol.GetAtomById(c)\n            tp = tertiaryatom.GetType()\n            dist = a.GetDistance(tertiaryatom)\n            ang = a.GetAngle(b,tertiaryatom)*math.pi/180\n            charge = tertiaryatom.GetPartialCharge()\n            while(dist in tertiarystats):\n                dist += 1e-15\n                # print('Duplicates!',m,j,dist)\n            tertiarystats[dist] = [tp,dist,ang,charge]\n        \n        for k, c in enumerate(sorted(tertiarystats.keys())):\n            entrystats['tertiary_atom_'+str(k)] = tertiarystats[c][0]\n            entrystats['tertiary_distance_'+str(k)] = tertiarystats[c][1]\n            entrystats['tertiary_angle_'+str(k)] = tertiarystats[c][2]\n            entrystats['tertiary_charge_'+str(k)] = tertiarystats[c][3]\n        stats.append(entrystats)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"obtrain = pd.DataFrame(stats)\nobtrain.head(10)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}