├── .DS_Store ├── Friday ├── Day5_VAE_example1.ipynb ├── Day5_VAE_example2.ipynb ├── Day5_VAE_slides.pdf └── README.md ├── LICENSE ├── Monday ├── Day1_IntroToML.ipynb ├── Decision_Tree_Random_Forests │ ├── Decision_Tree_RF.pdf │ ├── RandomForest.ipynb │ └── featurized_mixture.csv ├── IntroToRegressionClassification.pdf ├── README.md └── example.csv ├── README.md ├── Thursday ├── .DS_Store ├── Day4_VAEs.pdf ├── Day4_dimensionality_reduction_notebook.ipynb ├── Day4_dimensionality_reduction_slides.pdf ├── Intro_NN_Training.pdf └── README.md ├── Tuesday ├── Featurization.ipynb ├── Featurization.pdf └── README.md ├── Wednesday ├── .README.md.swp ├── Day3_FCNNs.ipynb ├── Day3_GCNNs.ipynb ├── Intro_FCNN_GCNN.pdf └── README.md ├── data ├── DES_SurfaceTension.xlsx ├── Exam_Data.txt ├── HCEPDB_100K_cleaned.csv ├── LC.mat ├── MNIST.mat ├── Weights.mat ├── aqsol.csv ├── chembl_drugs.txt.gz ├── featurized_mixture.csv ├── linmod.csv ├── lipo_fp_processed.csv ├── lipo_smiles.csv ├── long_paths.npz ├── molecular_prediction.csv ├── paths.npz ├── perovskite_data.csv ├── stockholm_td_adj.dat └── tox21.csv ├── postworkshop.md └── setup.md /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/.DS_Store -------------------------------------------------------------------------------- /Friday/Day5_VAE_slides.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/Friday/Day5_VAE_slides.pdf -------------------------------------------------------------------------------- /Friday/README.md: -------------------------------------------------------------------------------- 1 | ## ML for molecular design 2 | 3 | ### Session 1 (1:00-1:50) 4 | * Special invited lecture by Dr. James Saal from Citrine Informatics about the use of machine learning for molecular design and product formulation for practical problems in industry. 5 | * Break (1:50-2:00) 6 | 7 | ### Session 2 (2:00-2:50) 8 | * Variational Autoencoders Part 1 (Dr. Shuwen Yue, Cornell University) [notebook](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Friday/Day5_VAE_example1.ipynb) [slides](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Friday/Day5_VAE_slides.pdf) 9 | * Break (2:50-3:00) 10 | 11 | ### Session 3 (3:00-4:00) 12 | * Variational Autoencoders Part 2 (Dr. Shuwen Yue, Cornell University) [notebook](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Friday/Day5_VAE_example2.ipynb) 13 | * Wrapup (3:50-4:00) 14 | 15 | ### Recordings 16 | * Part 1 (posted soon) 17 | * [Part 2](https://youtu.be/0JyOCly1eGM) 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Institute for Computational Molecular Science Education (i-CoMSE) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Monday/Decision_Tree_Random_Forests/Decision_Tree_RF.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/Monday/Decision_Tree_Random_Forests/Decision_Tree_RF.pdf -------------------------------------------------------------------------------- /Monday/Decision_Tree_Random_Forests/RandomForest.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "## Decision Trees and Random Forests" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": { 13 | "id": "01HCtQrK-6aT" 14 | }, 15 | "source": [ 16 | "### Data Loading" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": null, 22 | "metadata": { 23 | "colab": { 24 | "base_uri": "https://localhost:8080/", 25 | "height": 73 26 | }, 27 | "id": "6lbvPodqhzZD", 28 | "outputId": "8c297036-4052-40a6-e7a7-3d0945574477" 29 | }, 30 | "outputs": [], 31 | "source": [ 32 | "!git clone https://github.com/icomse/9th_workshop_ml_for_molecules.git\n", 33 | "import os\n", 34 | "os.chdir('9th_workshop_ml_for_molecules/Monday/Decision_Tree_Random_Forests')" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": null, 40 | "metadata": { 41 | "colab": { 42 | "base_uri": "https://localhost:8080/", 43 | "height": 455 44 | }, 45 | "id": "Tzjy2CdEiuNK", 46 | "outputId": "d072ef52-a065-45c9-f228-ab226d60e68d" 47 | }, 48 | "outputs": [], 49 | "source": [ 50 | "# Now we use pandas library to create a dataframe.\n", 51 | "import numpy as np\n", 52 | "import pandas as pd" 53 | ] 54 | }, 55 | { 56 | "cell_type": "markdown", 57 | "metadata": {}, 58 | "source": [ 59 | "Read in the prepared data" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": null, 65 | "metadata": {}, 66 | "outputs": [], 67 | "source": [ 68 | "df_featurized=pd.read_csv('featurized_mixture.csv')" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": null, 74 | "metadata": {}, 75 | "outputs": [], 76 | "source": [] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": null, 81 | "metadata": { 82 | "scrolled": true 83 | }, 84 | "outputs": [], 85 | "source": [ 86 | "df_featurized.head()" 87 | ] 88 | }, 89 | { 90 | "cell_type": "code", 91 | "execution_count": null, 92 | "metadata": {}, 93 | "outputs": [], 94 | "source": [ 95 | "df_featurized.describe()" 96 | ] 97 | }, 98 | { 99 | "cell_type": "markdown", 100 | "metadata": {}, 101 | "source": [ 102 | "Shuffle the data, as there is some correlation in the inputs. " 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": null, 108 | "metadata": {}, 109 | "outputs": [], 110 | "source": [ 111 | "df_featurized=df_featurized.sample(frac=1.0)" 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": null, 117 | "metadata": {}, 118 | "outputs": [], 119 | "source": [ 120 | "df_featurized.head()" 121 | ] 122 | }, 123 | { 124 | "cell_type": "markdown", 125 | "metadata": {}, 126 | "source": [ 127 | "## Splitting" 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": null, 133 | "metadata": { 134 | "colab": { 135 | "base_uri": "https://localhost:8080/" 136 | }, 137 | "id": "ESQ7xKNFkUj9", 138 | "outputId": "72554bcf-a6de-46a8-f424-a1fab5394bfd" 139 | }, 140 | "outputs": [], 141 | "source": [ 142 | "# Splitting into train and test sets according to the original dataset\n", 143 | "y_train = df_featurized[df_featurized['Status'] =='Training']['EXP. Data']\n", 144 | "x_train = df_featurized[df_featurized['Status'] =='Training'].drop(['EXP. Data', 'HBD','HBD_smiles', 'Status', 'HBA', 'HBA_smiles'], axis=1)\n", 145 | "y_test = df_featurized[df_featurized['Status'] =='Test']['EXP. Data']\n", 146 | "x_test = df_featurized[df_featurized['Status'] =='Test'].drop(['EXP. Data', 'HBD','HBD_smiles', 'Status', 'HBA', 'HBA_smiles'], axis=1)\n", 147 | "print('train size: ',x_train.shape[0])\n", 148 | "print('test size: ',x_test.shape[0])" 149 | ] 150 | }, 151 | { 152 | "cell_type": "markdown", 153 | "metadata": {}, 154 | "source": [ 155 | "### Decision Trees" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": null, 161 | "metadata": {}, 162 | "outputs": [], 163 | "source": [ 164 | "from sklearn import tree\n", 165 | "import matplotlib.pyplot as plt\n", 166 | "from sklearn.metrics import mean_squared_error, mean_absolute_error\n" 167 | ] 168 | }, 169 | { 170 | "cell_type": "code", 171 | "execution_count": null, 172 | "metadata": {}, 173 | "outputs": [], 174 | "source": [] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": null, 179 | "metadata": {}, 180 | "outputs": [], 181 | "source": [ 182 | "dt_model = tree.DecisionTreeRegressor(max_depth=3)\n", 183 | "dt_model.fit(x_train,y_train)" 184 | ] 185 | }, 186 | { 187 | "cell_type": "code", 188 | "execution_count": null, 189 | "metadata": {}, 190 | "outputs": [], 191 | "source": [ 192 | "y_pred_train = dt_model.predict(x_train)\n", 193 | "y_pred_test = dt_model.predict(x_test)\n", 194 | "print(\"Train MSE=\",mean_squared_error(y_pred_train,y_train))\n", 195 | "print(\"Test MSE=\",mean_squared_error(y_pred_test,y_test))" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": null, 201 | "metadata": {}, 202 | "outputs": [], 203 | "source": [ 204 | "print(y_pred_test)" 205 | ] 206 | }, 207 | { 208 | "cell_type": "markdown", 209 | "metadata": {}, 210 | "source": [ 211 | "Let's look at the tree!" 212 | ] 213 | }, 214 | { 215 | "cell_type": "code", 216 | "execution_count": null, 217 | "metadata": {}, 218 | "outputs": [], 219 | "source": [ 220 | "plt.figure(figsize=(8, 6), dpi=300)\n", 221 | "tree.plot_tree(dt_model,feature_names=x_train.columns)\n", 222 | "plt.show()" 223 | ] 224 | }, 225 | { 226 | "cell_type": "markdown", 227 | "metadata": {}, 228 | "source": [ 229 | "**Hacking**: look up some of the decision tree options, and see if you can do better! Remember, you want to do better on the TEST MSE." 230 | ] 231 | }, 232 | { 233 | "cell_type": "code", 234 | "execution_count": null, 235 | "metadata": {}, 236 | "outputs": [], 237 | "source": [] 238 | }, 239 | { 240 | "cell_type": "markdown", 241 | "metadata": { 242 | "id": "FV4_vQJoqyJ2" 243 | }, 244 | "source": [ 245 | "### Random Forest" 246 | ] 247 | }, 248 | { 249 | "cell_type": "code", 250 | "execution_count": null, 251 | "metadata": {}, 252 | "outputs": [], 253 | "source": [ 254 | "from sklearn.ensemble import RandomForestRegressor" 255 | ] 256 | }, 257 | { 258 | "cell_type": "code", 259 | "execution_count": null, 260 | "metadata": {}, 261 | "outputs": [], 262 | "source": [] 263 | }, 264 | { 265 | "cell_type": "code", 266 | "execution_count": null, 267 | "metadata": {}, 268 | "outputs": [], 269 | "source": [ 270 | "rf_model = RandomForestRegressor(max_depth=5,\n", 271 | " n_estimators=200,\n", 272 | " min_samples_split=3,\n", 273 | " min_samples_leaf=1)\n", 274 | "rf_model.fit(x_train,y_train)" 275 | ] 276 | }, 277 | { 278 | "cell_type": "code", 279 | "execution_count": null, 280 | "metadata": {}, 281 | "outputs": [], 282 | "source": [ 283 | "y_pred_train = rf_model.predict(x_train)\n", 284 | "y_pred_test = rf_model.predict(x_test)\n", 285 | "print(\"Train MSE=\",mean_squared_error(y_pred_train,y_train))\n", 286 | "print(\"Test MSE=\",mean_squared_error(y_pred_test,y_test))\n", 287 | "print(\"Train MAE=\",mean_absolute_error(y_pred_train,y_train))\n", 288 | "print(\"Test MAE=\",mean_absolute_error(y_pred_test,y_test))" 289 | ] 290 | }, 291 | { 292 | "cell_type": "markdown", 293 | "metadata": {}, 294 | "source": [ 295 | "Are we going to try to visualize these! NO! " 296 | ] 297 | }, 298 | { 299 | "cell_type": "markdown", 300 | "metadata": {}, 301 | "source": [ 302 | "**Hacking**: Look up some of the additional random forest options, and see if you can do better!" 303 | ] 304 | }, 305 | { 306 | "cell_type": "code", 307 | "execution_count": null, 308 | "metadata": {}, 309 | "outputs": [], 310 | "source": [] 311 | }, 312 | { 313 | "cell_type": "markdown", 314 | "metadata": {}, 315 | "source": [ 316 | "### Hyperparameter search\n", 317 | "\n", 318 | "Let's try to automate the process above. `scikit-learn` has code to do this! It's called `GridSearchCV`, Grid, and it peforms cross-validation on a whole list of parameters." 319 | ] 320 | }, 321 | { 322 | "cell_type": "code", 323 | "execution_count": null, 324 | "metadata": {}, 325 | "outputs": [], 326 | "source": [ 327 | "import sklearn" 328 | ] 329 | }, 330 | { 331 | "cell_type": "code", 332 | "execution_count": null, 333 | "metadata": { 334 | "colab": { 335 | "base_uri": "https://localhost:8080/", 336 | "height": 1000 337 | }, 338 | "id": "XjMS3i3Gr8vd", 339 | "outputId": "e7359de5-a226-46ed-8650-3f84b8267637" 340 | }, 341 | "outputs": [], 342 | "source": [ 343 | "from sklearn.model_selection import GridSearchCV\n", 344 | "from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error\n", 345 | "\n", 346 | "# Hyperparameter tuning and cross validation\n", 347 | "param_grid = {\n", 348 | " 'n_estimators': [50,100], # Number of trees\n", 349 | " 'max_depth': [5, 10, 20], # Maximum depth of each tree\n", 350 | " 'max_features': [1.0, 'sqrt', 'log2'], # Number of features to consider at each split\n", 351 | " 'min_samples_split': [2,3,4], # Minimum number of samples required to split a node\n", 352 | " 'min_samples_leaf': [1,2,3] # Minimum number of samples required at each leaf node\n", 353 | "}\n", 354 | "rf_model = RandomForestRegressor() # model creation\n", 355 | "grid_search = GridSearchCV(rf_model,\n", 356 | " param_grid=param_grid,\n", 357 | " cv=5,\n", 358 | " verbose=3,\n", 359 | " scoring='neg_mean_squared_error',\n", 360 | " return_train_score=True) # will go through all possible combinations in the param grid\n", 361 | "grid_search.fit(x_train,y_train) # fitting to train set" 362 | ] 363 | }, 364 | { 365 | "cell_type": "code", 366 | "execution_count": null, 367 | "metadata": { 368 | "colab": { 369 | "base_uri": "https://localhost:8080/" 370 | }, 371 | "id": "J1c9AiM_qmDK", 372 | "outputId": "382e2110-4772-43f5-da60-e53fa5a1b707" 373 | }, 374 | "outputs": [], 375 | "source": [ 376 | "print(\"Best hyperparameters: \", grid_search.best_params_)" 377 | ] 378 | }, 379 | { 380 | "cell_type": "markdown", 381 | "metadata": {}, 382 | "source": [ 383 | "This can be pretty random! Last time I ran this I got:\n", 384 | "```\n", 385 | "Best hyperparameters: {'max_depth': 10, 'max_features': 1.0, 'min_samples_leaf': 1, 'min_samples_split': 3, 'n_estimators': 100} ```" 386 | ] 387 | }, 388 | { 389 | "cell_type": "code", 390 | "execution_count": null, 391 | "metadata": { 392 | "colab": { 393 | "base_uri": "https://localhost:8080/", 394 | "height": 484 395 | }, 396 | "id": "jipsNjhTsR-Q", 397 | "outputId": "5b5ed3cf-523e-44fe-952f-9c503864c61f" 398 | }, 399 | "outputs": [], 400 | "source": [ 401 | "# Now, let's see the performance on our held out test set\n", 402 | "rf_model = RandomForestRegressor(**grid_search.best_params_).fit(x_train,y_train)\n", 403 | "print('training score: ',r2_score(rf_model.predict(x_train),y_train).round(3))\n", 404 | "print('test score: ', r2_score(rf_model.predict(x_test),y_test).round(3))\n", 405 | "\n", 406 | "#parity plot\n", 407 | "plt.scatter(y_test, rf_model.predict(x_test))\n", 408 | "plt.plot(y_test,y_test)\n", 409 | "plt.text(65, 36, s ='r2 score: {}'.format(r2_score(rf_model.predict(x_test), y_test).round(3)))\n", 410 | "plt.text(65, 34, s ='MAE: {}'.format(mean_absolute_error(rf_model.predict(x_test), y_test).round(3)))\n", 411 | "plt.text(65, 32, s ='MSE: {}'.format(mean_squared_error(rf_model.predict(x_test), y_test).round(3)))\n", 412 | "plt.xlabel('Actual Value')\n", 413 | "_ = plt.ylabel('Predicted Value')" 414 | ] 415 | }, 416 | { 417 | "cell_type": "code", 418 | "execution_count": null, 419 | "metadata": { 420 | "colab": { 421 | "base_uri": "https://localhost:8080/", 422 | "height": 447 423 | }, 424 | "id": "VafU_T8-p3tK", 425 | "outputId": "b74231cc-e085-42c4-95bf-ec7ba730ff6c" 426 | }, 427 | "outputs": [], 428 | "source": [ 429 | "#Analizing most important features\n", 430 | "df_ft_imp_rf = pd.DataFrame({'feature': x_train.columns,'importance': rf_model.feature_importances_}).sort_values('importance',ascending=True)\n", 431 | "df_ft_imp_rf.tail(10).plot.barh('feature','importance')\n", 432 | "plt.show()" 433 | ] 434 | }, 435 | { 436 | "cell_type": "markdown", 437 | "metadata": { 438 | "id": "GHkdtvEkupZI" 439 | }, 440 | "source": [ 441 | "# Some parting words \n", 442 | "Some things to keep in mind about random forest methods\n", 443 | "* It's a fairly robust model, and usually doesn't overfit\n", 444 | "* As it's a tree based model, scaling of the data is not required\n", 445 | "* It's not good at extrapolation, see here: https://www.kaggle.com/code/carlmcbrideellis/extrapolation-do-not-stray-out-of-the-forest\n", 446 | "\n", 447 | "\n", 448 | "\n", 449 | "\n", 450 | "\n" 451 | ] 452 | }, 453 | { 454 | "cell_type": "code", 455 | "execution_count": null, 456 | "metadata": { 457 | "id": "vTWq88zyvpfv" 458 | }, 459 | "outputs": [], 460 | "source": [] 461 | } 462 | ], 463 | "metadata": { 464 | "colab": { 465 | "provenance": [] 466 | }, 467 | "kernelspec": { 468 | "display_name": "Python 3 (ipykernel)", 469 | "language": "python", 470 | "name": "python3" 471 | }, 472 | "language_info": { 473 | "codemirror_mode": { 474 | "name": "ipython", 475 | "version": 3 476 | }, 477 | "file_extension": ".py", 478 | "mimetype": "text/x-python", 479 | "name": "python", 480 | "nbconvert_exporter": "python", 481 | "pygments_lexer": "ipython3", 482 | "version": "3.11.7" 483 | } 484 | }, 485 | "nbformat": 4, 486 | "nbformat_minor": 4 487 | } 488 | -------------------------------------------------------------------------------- /Monday/IntroToRegressionClassification.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/Monday/IntroToRegressionClassification.pdf -------------------------------------------------------------------------------- /Monday/README.md: -------------------------------------------------------------------------------- 1 | ## Introduction to Machine Learning for Molecular Science 2 | 3 | ### Session 1 (1:00-1:50) 4 | * Introduction to workshop and computational framework (Dr. Eric Jankowski, Boise State University) 5 | * Review of some definitions in ML (Dr. Camille Bilodeau, Universty of Virginia) [Notebook](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Monday/Day1_IntroToML.ipynb) 6 | * Break (1:50-2:00) 7 | 8 | ### Session 2 (2:00-2:50) 9 | * Introduction to ML concepts (Dr. Camille Bilodeau, University of Virginia) [Notebook](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Monday/Day1_IntroToML.ipynb) (continued) 10 | * Break (2:50-3:00) 11 | 12 | ### Session 3 (3:00-4:00) 13 | * Decision trees and random forests (Dr. Jindah Shah, Oklahoma State University) [Notebook](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Monday/Decision_Tree_Random_Forests/RandomForest.ipynb) 14 | * Questions and summary of day (3:50-4:00) (Dr. Michael Shirts, Universty of Colorado Boulder) 15 | 16 | ### Recordings 17 | * [Part 1](https://www.youtube.com/watch?v=lAN0FsvWT1M&list=PLeYIhs60ZS3ag-wt250z---Gh_QsgVsES&index=1) 18 | * [Part 2](https://www.youtube.com/watch?v=TAWJUYWdSSY&list=PLeYIhs60ZS3ag-wt250z---Gh_QsgVsES&index=2) 19 | -------------------------------------------------------------------------------- /Monday/example.csv: -------------------------------------------------------------------------------- 1 | "Game Number", "Game Length" 2 | 1, 30 3 | 2, 29 4 | 3, 31 5 | 4, 16 6 | 5, 24 7 | 6, 29 8 | 7, 28 9 | 8, 117 10 | 9, 42 11 | 10, 23 12 | 11, 40 13 | 12, 15 14 | 13, 18 15 | 14, 51 16 | 15, 15 17 | 16, 19 18 | 17, 30 19 | 18, 25 20 | 19, 17 21 | 20, 55 22 | 21, 20 23 | 22, 12 24 | 23, 39 25 | 24, 25 26 | 25, 56 27 | 26, 61 28 | 27, 77 29 | 28, 34 30 | 29, 14 31 | 30, 8 32 | 31, 31 33 | 32, 34 34 | 33, 22 35 | 34, 12 36 | 35, 52 37 | 36, 50 38 | 37, 24 39 | 38, 20 40 | 39, 91 41 | 40, 33 42 | 41, 27 43 | 42, 25 44 | 43, 83 45 | 44, 12 46 | 45, 21 47 | 46, 38 48 | 47, 20 49 | 48, 24 50 | 49, 37 51 | 50, 18 52 | 51, 56 53 | 52, 20 54 | 53, 47 55 | 54, 51 56 | 55, 22 57 | 56, 46 58 | 57, 24 59 | 58, 35 60 | 59, 28 61 | 60, 12 62 | 61, 28 63 | 62, 43 64 | 63, 50 65 | 64, 37 66 | 65, 127 67 | 66, 11 68 | 67, 12 69 | 68, 22 70 | 69, 25 71 | 70, 57 72 | 71, 53 73 | 72, 38 74 | 73, 33 75 | 74, 16 76 | 75, 35 77 | 76, 29 78 | 77, 23 79 | 78, 21 80 | 79, 11 81 | 80, 31 82 | 81, 12 83 | 82, 37 84 | 83, 40 85 | 84, 29 86 | 85, 14 87 | 86, 15 88 | 87, 38 89 | 88, 74 90 | 89, 19 91 | 90, 121 92 | 91, 52 93 | 92, 25 94 | 93, 14 95 | 94, 12 96 | 95, 31 97 | 96, 25 98 | 97, 16 99 | 98, 19 100 | 99, 54 101 | 100, 24 102 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Repository of Material for the 9th i-CoMSE Workshop: Machine Learning for Molecules 2 | 3 | ### Dates: Apr 28-May 2, 2025 4 | 5 | ### Requirements: 6 | [See the following link for setting up software](setup.md) 7 | 8 | ### Workshop Material 9 | 10 | | Session | Description and links | 11 | |---------------------|---------------------| 12 | | Monday | [Introduction and Review of ML Concepts](Monday/README.md) | 13 | | Tuesday | [Molecular Featurization](Tuesday/README.md) | 14 | | Wednesday | [Neural Nets and Graph Neural Nets in PyTorch](Wednesday/README.md) | 15 | | Thursday | [Active Learning](Thursday/README.md) | 16 | | Friday | [Generative Modeling](Friday/README.md) | 17 | 18 | ### Post-workshop 19 | [Step to learn more after the workshop](nextsteps.md) 20 | 21 | [YouTube Playlist of Recordings](https://www.youtube.com/playlist?list=PLeYIhs60ZS3ag-wt250z---Gh_QsgVsES) 22 | 23 | -------------------------------------------------------------------------------- /Thursday/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/Thursday/.DS_Store -------------------------------------------------------------------------------- /Thursday/Day4_VAEs.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/Thursday/Day4_VAEs.pdf -------------------------------------------------------------------------------- /Thursday/Day4_dimensionality_reduction_slides.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/Thursday/Day4_dimensionality_reduction_slides.pdf -------------------------------------------------------------------------------- /Thursday/Intro_NN_Training.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/Thursday/Intro_NN_Training.pdf -------------------------------------------------------------------------------- /Thursday/README.md: -------------------------------------------------------------------------------- 1 | ## NN and dimensionality reduction 2 | 3 | ### Session 1 (1:00-1:50) 4 | * Practical NN training (Dr. Camille Bilodeau, University of Virginia) [slides](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Thursday/Intro_NN_Training.pdf) 5 | * Break (1:50-2:00) 6 | 7 | ### Session 2 (2:00-2:50) 8 | * Dimensionality reduction (Dr. Shuwen Yue, Cornell University) [notebook](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Thursday/Day4_dimensionality_reduction_notebook.ipynb) [slides](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Thursday/Day4_dimensionality_reduction_slides.pdf) 9 | * Break (2:50-3:00) 10 | 11 | ### Session 3 (3:00-4:00) 12 | * Intro to Generative Models (Dr. Shuwen Yue, Cornell University) [slides](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Thursday/Day4_VAEs.pdf) 13 | * Wrapup (3:50-4:00) 14 | 15 | ### Recordings 16 | 17 | * [Part 1](https://youtu.be/xK19dlT9lSM) 18 | * [Part 2](https://youtu.be/BV6Vt8ytqTA) 19 | -------------------------------------------------------------------------------- /Tuesday/Featurization.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "jA93DwTFTRvY" 7 | }, 8 | "source": [ 9 | "#Molecular Featurization and Descriptors\n" 10 | ] 11 | }, 12 | { 13 | "cell_type": "code", 14 | "execution_count": null, 15 | "metadata": { 16 | "id": "3Wc7FtSrIp12" 17 | }, 18 | "outputs": [], 19 | "source": [ 20 | "!git clone https://github.com/icomse/9th_workshop_ml_for_molecules.git\n", 21 | "import os\n", 22 | "os.chdir('9th_workshop_ml_for_molecules/data')" 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": null, 28 | "metadata": { 29 | "id": "LJoWTlPATY9Y" 30 | }, 31 | "outputs": [], 32 | "source": [ 33 | "!pip install rdkit-pypi" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": null, 39 | "metadata": { 40 | "id": "_Dbqv0KrRXl4" 41 | }, 42 | "outputs": [], 43 | "source": [ 44 | "import numpy as np\n", 45 | "import pandas as pd\n", 46 | "import tensorflow as tf\n", 47 | "from tensorflow import keras\n", 48 | "from tensorflow.keras import layers\n", 49 | "from matplotlib import pyplot as plt\n", 50 | "import seaborn as sns\n", 51 | "from sklearn.preprocessing import StandardScaler,MaxAbsScaler\n", 52 | "from sklearn.model_selection import KFold\n", 53 | "from sklearn.linear_model import LinearRegression,Ridge,Lasso\n", 54 | "import sklearn.metrics as sklm\n", 55 | "import pydot\n", 56 | "import graphviz\n", 57 | "\n", 58 | "# Here are some new things\n", 59 | "from rdkit import Chem\n", 60 | "from rdkit.Chem import PandasTools as PT\n", 61 | "from sklearn.model_selection import train_test_split\n", 62 | "from sklearn.metrics import roc_auc_score\n", 63 | "from sklearn.ensemble import RandomForestClassifier" 64 | ] 65 | }, 66 | { 67 | "cell_type": "markdown", 68 | "metadata": { 69 | "id": "aS__EGAsVh3p" 70 | }, 71 | "source": [ 72 | "Figuring out our vocabulary" 73 | ] 74 | }, 75 | { 76 | "cell_type": "code", 77 | "execution_count": null, 78 | "metadata": { 79 | "id": "J-ZrX39ZTuUJ" 80 | }, 81 | "outputs": [], 82 | "source": [ 83 | "mols = ['N#N','O=O','[HH]','[He]','C','C(=O)=O']\n", 84 | "# Let's determine our vocabulary over the set provided\n", 85 | "# this code does not work for parsing SMILES, in general\n", 86 | "# we just want to keep things simples\n", 87 | "vocab = set()\n", 88 | "\n", 89 | "# iterate over all molecules to extract unique characters\n", 90 | "M = 0 # to contain maximum number of characters in any string...\n", 91 | "for mol in mols:\n", 92 | " mol = list(mol)\n", 93 | " if len(mol) > M:\n", 94 | " M = len(mol)\n", 95 | " while mol:\n", 96 | " v = mol.pop()\n", 97 | " if v not in vocab:\n", 98 | " vocab.add(v)\n", 99 | "print(vocab)\n", 100 | "print(len(vocab))\n", 101 | "# Now we will create a mapping dictionary that\n", 102 | "# points each character to a one-hot vector\n", 103 | "N = len(vocab)\n", 104 | "IN = np.eye(N)\n", 105 | "charMap = {}\n", 106 | "for i,c in enumerate(sorted(list(vocab))):\n", 107 | " charMap[c] = IN[i,:]" 108 | ] 109 | }, 110 | { 111 | "cell_type": "markdown", 112 | "metadata": { 113 | "id": "lQdqIKkRVy63" 114 | }, 115 | "source": [ 116 | "Take SMILES and turn it into an array" 117 | ] 118 | }, 119 | { 120 | "cell_type": "code", 121 | "execution_count": null, 122 | "metadata": { 123 | "id": "hIIWgN9yVkOz" 124 | }, 125 | "outputs": [], 126 | "source": [ 127 | "''' function that takes a SMILES string\n", 128 | "and returns a (padded) array with ohe\n", 129 | "vectors as indicated by CMap\n", 130 | "M - dimension to pad to if necessary\n", 131 | "N - dimension of OHE '''\n", 132 | "def Smi2Arr(SmiStr,CMap,M,N):\n", 133 | " Arr = np.zeros([M,N])\n", 134 | " for i,c in enumerate(list(SmiStr)):\n", 135 | " Arr[i,:] = CMap[c][:]\n", 136 | " return Arr\n", 137 | "\n", 138 | "# create feature arrays\n", 139 | "featArr = []\n", 140 | "for mol in mols:\n", 141 | " featArr.append(Smi2Arr(mol,charMap,M,N))\n", 142 | "\n", 143 | "print(featArr)\n", 144 | "print(len(featArr))\n", 145 | "print(len(featArr[0]))\n", 146 | "print(len(featArr[0][0]))" 147 | ] 148 | }, 149 | { 150 | "cell_type": "markdown", 151 | "metadata": { 152 | "id": "LLfThObyV-dw" 153 | }, 154 | "source": [ 155 | "Visualize the fingerprints" 156 | ] 157 | }, 158 | { 159 | "cell_type": "code", 160 | "execution_count": null, 161 | "metadata": { 162 | "id": "hlPXqq97V2yp" 163 | }, 164 | "outputs": [], 165 | "source": [ 166 | "# visualize the encodings\n", 167 | "\n", 168 | "def make_plot(ax,mol,Arr):\n", 169 | " ax.imshow(Arr.T)\n", 170 | " ax.axes.xaxis.set_visible(False)\n", 171 | " ax.axes.yaxis.set_visible(False)\n", 172 | " ax.set_title(mol)\n", 173 | " plt.grid(True,which='minor',color='w')\n", 174 | "\n", 175 | "fig, axs = plt.subplots(1,len(mols))\n", 176 | "\n", 177 | "for i, (mol,Arr) in enumerate(zip(mols,featArr)):\n", 178 | " make_plot(axs[i],mol,Arr)" 179 | ] 180 | }, 181 | { 182 | "cell_type": "markdown", 183 | "metadata": { 184 | "id": "3942224b" 185 | }, 186 | "source": [ 187 | "# Importing some data\n", 188 | "The first we will do is just get our hands on some chemical structures to muck around with. We will use a dataset derived from the \"Toxicology in the 21st Century\" initiative. This contains qualitative toxicitity measurements for ~8000 compounds for 12 different targets (e.g., nuclear receptors and stress response pathways for different stuff). Use the following cell to load and preview the data. All of the columns beginning `NR-` or `SR-` are potential labels, while we plan to convert the `smiles` column into features" 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": null, 194 | "metadata": { 195 | "id": "acbd97e0" 196 | }, 197 | "outputs": [], 198 | "source": [ 199 | "data = pd.read_csv(\"tox21.csv\")\n", 200 | "data.head()" 201 | ] 202 | }, 203 | { 204 | "cell_type": "markdown", 205 | "metadata": { 206 | "id": "d47cf29c" 207 | }, 208 | "source": [ 209 | "Now, we are going to extract just the SMILES strings and demonstrate a nice little utility to create molecular structures. Is that necessary? No. Is it something we can do? Watch and find out." 210 | ] 211 | }, 212 | { 213 | "cell_type": "code", 214 | "execution_count": null, 215 | "metadata": { 216 | "id": "bf39397c" 217 | }, 218 | "outputs": [], 219 | "source": [ 220 | "label = 'NR-AR'\n", 221 | "exdata = data[['smiles',label]]\n", 222 | "PT.AddMoleculeColumnToFrame(exdata,smilesCol='smiles',includeFingerprints=False)\n", 223 | "exdata.head()" 224 | ] 225 | }, 226 | { 227 | "cell_type": "markdown", 228 | "metadata": { 229 | "id": "7af7f5a6" 230 | }, 231 | "source": [ 232 | "Notice that some of the data above contains NaN -- probably because there is not data for that label for that molecule. We can eliminate these entries from the dataframe. Then we will make a little diagram to illustrate the toxicity values along with the molecular structures." 233 | ] 234 | }, 235 | { 236 | "cell_type": "code", 237 | "execution_count": null, 238 | "metadata": { 239 | "id": "384b5cad" 240 | }, 241 | "outputs": [], 242 | "source": [ 243 | "exdata= exdata[~exdata['ROMol'].isnull()]\n", 244 | "exdata= exdata[~exdata[label].isnull()]\n", 245 | "exdata.head()\n", 246 | "display(PT.FrameToGridImage(exdata[exdata[label]>0.95].head(5), legendsCol=label, molsPerRow=5))" 247 | ] 248 | }, 249 | { 250 | "cell_type": "markdown", 251 | "metadata": { 252 | "id": "55f66906" 253 | }, 254 | "source": [ 255 | "## RDKit Molecules\n", 256 | "Now it's time to stop fooling around and get down to business. The first thing we are going to do is introduce how to convert SMILES into molecule objects in RDKit. Once we have a molecule object, RDKit can be used for many things. Is there any good way to know everything that can be done within RDKit? Not really... A lot of jumping around on doc pages, tutorials, and trial-and-error.\n" 257 | ] 258 | }, 259 | { 260 | "cell_type": "code", 261 | "execution_count": null, 262 | "metadata": { 263 | "id": "a1c4e328" 264 | }, 265 | "outputs": [], 266 | "source": [ 267 | "from rdkit.Chem.Draw import IPythonConsole\n", 268 | "from rdkit.Chem import Draw\n", 269 | "exampleStr = exdata['smiles'][0]\n", 270 | "exampleMol = Chem.MolFromSmiles(exampleStr)\n", 271 | "print(exampleStr)\n", 272 | "\n", 273 | "# Here I will show how to check what types of methods exist\n", 274 | "# within the molecule object.\n", 275 | "mol_methods = [method_name for method_name in dir(exampleMol)]\n", 276 | "for mol_method in mol_methods:\n", 277 | " print(mol_method)\n", 278 | "exampleMol" 279 | ] 280 | }, 281 | { 282 | "cell_type": "markdown", 283 | "metadata": { 284 | "id": "883a27a9" 285 | }, 286 | "source": [ 287 | "Molecules are made of atoms and these also have properties" 288 | ] 289 | }, 290 | { 291 | "cell_type": "code", 292 | "execution_count": null, 293 | "metadata": { 294 | "id": "812c6e86" 295 | }, 296 | "outputs": [], 297 | "source": [ 298 | "ringStuff = exampleMol.GetRingInfo()\n", 299 | "for atom in exampleMol.GetAtoms():\n", 300 | " num = atom.GetAtomicNum()\n", 301 | " idx = atom.GetIdx()\n", 302 | " ri = ringStuff.NumAtomRings(idx)\n", 303 | " print(\"Atom {} with atomic number {} is in {} rings\".format(idx,num,ri))" 304 | ] 305 | }, 306 | { 307 | "cell_type": "markdown", 308 | "metadata": { 309 | "id": "20cf8659" 310 | }, 311 | "source": [ 312 | "## Fingerprints\n", 313 | "OK, so RDKit can be pretty useful for all kinds of random things (e.g., creating automated images of molecules, identifying substructures, and so on.) As it goes for machine learning, two areas of emphasis will be in the acquisition of fingerprints and molecular descriptors. RDKit offers a few different kind of fingerprints. The `RDKit fingerprint` is something akin to the `Daylight fingerprint` -- but it is not that. Meanwhile, you can also use `Morgan fingerprints`. Below we will demonstrate the generation of these fingerprints while adding a second example molecule so we can compute similarities." 314 | ] 315 | }, 316 | { 317 | "cell_type": "code", 318 | "execution_count": null, 319 | "metadata": { 320 | "id": "3971cea2" 321 | }, 322 | "outputs": [], 323 | "source": [ 324 | "exampleStr = exdata['smiles'][6]\n", 325 | "exampleMol2 = Chem.MolFromSmiles(exampleStr)\n", 326 | "print(exampleStr)\n", 327 | "exampleMol2" 328 | ] 329 | }, 330 | { 331 | "cell_type": "code", 332 | "execution_count": null, 333 | "metadata": { 334 | "id": "2601e064" 335 | }, 336 | "outputs": [], 337 | "source": [ 338 | "# Now we will create fingerprints.\n", 339 | "mols = [exampleMol, exampleMol2] # just a list of molecule objects\n", 340 | "\n", 341 | "# Create fingerprint objects\n", 342 | "# fingerprint objects contain a set of operations; because fps may be sparse\n", 343 | "# they are packaged in classes that may not be directly usable for ML applications\n", 344 | "# we can convert them to numpy arrays though if that is our purpose\n", 345 | "\n", 346 | "#These are the fingerprints\n", 347 | "RDfps= [Chem.RDKFingerprint(m) for m in mols] # list of RDKit fingerprints\n", 348 | "Mfps = [Chem.rdMolDescriptors.GetMorganFingerprintAsBitVect(m,4) for m in mols]\n", 349 | "\n", 350 | "# these are output to numpy arrays\n", 351 | "RDvecs = [np.array(fp) for fp in RDfps]\n", 352 | "Mvecs = [np.array(fp) for fp in Mfps ]\n", 353 | "\n", 354 | "# We can see that these fingerprints are very different\n", 355 | "fig,ax = plt.subplots(2,1)\n", 356 | "fig.set_size_inches(64,16)\n", 357 | "ax[0].plot(RDvecs[0],'ok')\n", 358 | "ax[1].plot(Mvecs[0],'or')" 359 | ] 360 | }, 361 | { 362 | "cell_type": "markdown", 363 | "metadata": { 364 | "id": "4c7af257" 365 | }, 366 | "source": [ 367 | "## Similarity Calculations\n", 368 | "One thing that can be useful is to express measures of similarity for molecules. There are numerous metrics that are floating around for doing things of this kind. As far as their documentation reports, RDKit enables facile calculation of the following similarity metrics: `Tanimoto, Dice, Cosine, Sokal, Russel, Kulczynski, McConnaughey, and Tversky`\n", 369 | "Inspecting the methods under `DataStructs` seems to suggest that they have even more beyond this.\n", 370 | "\n", 371 | "In the following we will make a comparison of similarities for some different metrics, as well as the different fingerprints." 372 | ] 373 | }, 374 | { 375 | "cell_type": "code", 376 | "execution_count": null, 377 | "metadata": { 378 | "id": "1121a52b" 379 | }, 380 | "outputs": [], 381 | "source": [ 382 | "from rdkit import DataStructs\n", 383 | "metType = ['Tanimoto', 'Dice', 'Cosine', 'Sokal', 'Russel', 'Kulczynski','McConnaughey']\n", 384 | "simScores = np.zeros((2,len(metType)))\n", 385 | "\n", 386 | "# ordinarily you would invoke a call to the method like\n", 387 | "# DataStructs.FingerprintSimilarity(Mfps[0],Mfps[1], metric=DataStructs.DiceSimilarity)\n", 388 | "# to iterate over the strings contained within metType, I will recognize that this things are classes with attributes\n", 389 | "for i,metric in enumerate(metType):\n", 390 | " metricName = metric + \"Similarity\"\n", 391 | " simScores[0,i] = DataStructs.FingerprintSimilarity(RDfps[0],RDfps[1], metric=getattr(DataStructs,metricName))\n", 392 | " simScores[1,i] = DataStructs.FingerprintSimilarity(Mfps[0],Mfps[1], metric=getattr(DataStructs,metricName))\n", 393 | "\n", 394 | "plt.plot(simScores[0,:],'-ok')\n", 395 | "plt.plot(simScores[1,:],'-or')\n", 396 | "# https://jcheminf.biomedcentral.com/articles/10.1186/s13321-015-0069-3" 397 | ] 398 | }, 399 | { 400 | "cell_type": "markdown", 401 | "metadata": { 402 | "id": "4e58ad97" 403 | }, 404 | "source": [ 405 | "## Descriptors in RDKit\n", 406 | "From molecule objects, we can also compute descriptors using RDKit. There are probably a zillion ways to go about doing this but there is a reasonable module `rdkit.Chem.rdMolDescriptors` that has a list of different things that can be computed. These can range from simple functions of connectivity/chemistry to geomteric descriptions and approximate surface area calculations; some don't even have documentation but still exists. We will just demonstrate a couple of these." 407 | ] 408 | }, 409 | { 410 | "cell_type": "code", 411 | "execution_count": null, 412 | "metadata": { 413 | "id": "f595cb26" 414 | }, 415 | "outputs": [], 416 | "source": [ 417 | "# Below we compute the \"Labute Accessible Surface Area\", Number of Rings, and Number of Rotatable bonds\n", 418 | "LASA = [0.0 for i in range(exdata.shape[0])]\n", 419 | "NR = [0.0 for i in range(exdata.shape[0])]\n", 420 | "NRB = [0.0 for i in range(exdata.shape[0])]\n", 421 | "for i,smiles in enumerate(exdata['smiles']):\n", 422 | " mol = Chem.MolFromSmiles(smiles)\n", 423 | " LASA[i] = np.round(Chem.rdMolDescriptors.CalcLabuteASA(mol),2)\n", 424 | " NR[i] = Chem.rdMolDescriptors.CalcNumRings(mol)\n", 425 | " NRB[i] = Chem.rdMolDescriptors.CalcNumRotatableBonds(mol)\n", 426 | "\n", 427 | "exdata['LASA'] = LASA\n", 428 | "exdata['NR'] = NR\n", 429 | "exdata['NRB'] = NRB\n", 430 | "##Remove nans\n", 431 | "#exdata = exdata[~exdata['LASA'].isnull()]\n", 432 | "#exdata = exdata[~exdata['NR'].isnull()]\n", 433 | "#exdata = exdata[~exdata['NRB'].isnull()]\n", 434 | "\n", 435 | "pd.options.display.float_format = \"{:,.2f}\".format\n", 436 | "print(\"Examples of LASA\")\n", 437 | "display(PT.FrameToGridImage(exdata.head(15), legendsCol='LASA', molsPerRow=5))\n", 438 | "print(\"\\n Examples of Number of Rings\")\n", 439 | "display(PT.FrameToGridImage(exdata.tail(15), legendsCol='NR', molsPerRow=5))\n", 440 | "\n", 441 | "exdata['ROMol'].head()" 442 | ] 443 | }, 444 | { 445 | "cell_type": "markdown", 446 | "metadata": { 447 | "id": "3262b652" 448 | }, 449 | "source": [ 450 | "## Using Fingerprints as Features\n", 451 | "In the previous few cells, our features were defined by a vector of descriptors, many of which are derived from the chemical structure. It would seem possible that we could train machine learning models to learn directly from a description of the chemical structure itself. Let's try it!" 452 | ] 453 | }, 454 | { 455 | "cell_type": "code", 456 | "execution_count": null, 457 | "metadata": { 458 | "id": "a9cb49f1" 459 | }, 460 | "outputs": [], 461 | "source": [ 462 | "fps = []\n", 463 | "for i,smiles in enumerate(exdata['smiles']):\n", 464 | " mol = Chem.MolFromSmiles(smiles)\n", 465 | " fps.append(Chem.rdMolDescriptors.GetMorganFingerprintAsBitVect(mol,5))\n", 466 | " #fps.append(Chem.RDKFingerprint(mol))\n", 467 | "\n", 468 | "features = np.array(fps)\n", 469 | "print(features.shape)" 470 | ] 471 | }, 472 | { 473 | "cell_type": "markdown", 474 | "metadata": { 475 | "id": "537eab5a" 476 | }, 477 | "source": [ 478 | "As you can see above, the default size of the fingerprint is 2048-dimensions... that would necessitate a whole lot of parameters for our machine learning model. Let's take a look at one of these fingerprints." 479 | ] 480 | }, 481 | { 482 | "cell_type": "code", 483 | "execution_count": null, 484 | "metadata": { 485 | "id": "834412cd" 486 | }, 487 | "outputs": [], 488 | "source": [ 489 | "print(list(fps[0]))\n", 490 | "print(list(fps[1]))" 491 | ] 492 | }, 493 | { 494 | "cell_type": "markdown", 495 | "metadata": { 496 | "id": "64c34615" 497 | }, 498 | "source": [ 499 | "Hmmm, a lot of ones and zeros that indicate the presence or lack of some chemical substructure (roughly speaking)... It can sometimes be the case that *none* of the molecules in our dataset feature some substructures that might be described in this 2048-dimensional substructure, suggesting that this element is zero across our dataset. Conversely, perhaps it is possible that an element is always one for *all* of the molecules in the dataset. From an ML perspective, these input elements would never differ for any feature vector and thus represent a constant to the model. So we can screen for these to potentially reduce the dimensionality of the feature vector." 500 | ] 501 | }, 502 | { 503 | "cell_type": "code", 504 | "execution_count": null, 505 | "metadata": { 506 | "id": "1f4b1665" 507 | }, 508 | "outputs": [], 509 | "source": [ 510 | "# to figure out if there are any constant elements we will sum all of our fingerprints\n", 511 | "# any bit that remains zero means that it is zero for everything\n", 512 | "# any bit that equals the number of data points means it is one for everything\n", 513 | "featureSum = np.sum(features,axis=0)\n", 514 | "alwaysOn = featureSum > features.shape[0]-0.01\n", 515 | "alwaysOff = featureSum < 0.5\n", 516 | "print(\"There are {:>4d} elements that are always on\".format(np.sum(alwaysOn)))\n", 517 | "print(\"There are {:>4d} elements that are always off\".format(np.sum(alwaysOff)))" 518 | ] 519 | }, 520 | { 521 | "cell_type": "markdown", 522 | "metadata": { 523 | "id": "1ef114f1" 524 | }, 525 | "source": [ 526 | "Seems like this isn't the case here, indicating a pretty diverse set of structures. Now let's try out some learning." 527 | ] 528 | }, 529 | { 530 | "cell_type": "code", 531 | "execution_count": null, 532 | "metadata": { 533 | "id": "217e09a3" 534 | }, 535 | "outputs": [], 536 | "source": [ 537 | "from sklearn.neural_network import MLPClassifier\n", 538 | "labels = np.array(exdata[label]).reshape([-1,1])\n", 539 | "\n", 540 | "X_train,X_test,y_train,y_test = train_test_split(features,labels,test_size = 0.2)\n", 541 | "clf = MLPClassifier(hidden_layer_sizes=[1000,500,250]).fit(X_train, y_train)\n", 542 | "y_pred = np.round(clf.predict_proba(X_test)[:,1],0)\n", 543 | "C = sklm.confusion_matrix(np.squeeze(y_test),y_pred)\n", 544 | "print((roc_auc_score(y_test, clf.predict_proba(X_test)[:,1]), clf.score(X_train,y_train),clf.score(X_test,y_test)))\n", 545 | "print(C)" 546 | ] 547 | }, 548 | { 549 | "cell_type": "code", 550 | "execution_count": null, 551 | "metadata": { 552 | "id": "tSl6PrOyxkPL" 553 | }, 554 | "outputs": [], 555 | "source": [] 556 | } 557 | ], 558 | "metadata": { 559 | "colab": { 560 | "provenance": [] 561 | }, 562 | "kernelspec": { 563 | "display_name": "Python 3", 564 | "name": "python3" 565 | }, 566 | "language_info": { 567 | "name": "python" 568 | } 569 | }, 570 | "nbformat": 4, 571 | "nbformat_minor": 0 572 | } -------------------------------------------------------------------------------- /Tuesday/Featurization.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/Tuesday/Featurization.pdf -------------------------------------------------------------------------------- /Tuesday/README.md: -------------------------------------------------------------------------------- 1 | ## Featurization of Molecules for ML 2 | 3 | [Notebook](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Tuesday/Featurization.ipynb) (same for all sessions) 4 | 5 | [PDF of slides](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Tuesday/Featurization.pdf) (same for all sessions) 6 | 7 | ### Session 1 (1:00-1:50) 8 | * Featurization (Dr. Yamil Colon, University of Notre Dame) 9 | * Break (1:50-2:00) 10 | 11 | ### Session 2 (2:00-2:50) 12 | * Tokenization and one hot encoding (Dr. Yamil Colon, University of Notre Dame) 13 | * Break (2:50-3:00) 14 | 15 | ### Session 3 (3:00-4:00) 16 | * Geometry-based descriptors of molecules (Dr. Yamil Colon, University of Notre Dame) 17 | * Wrapup (3:50-4:00) 18 | 19 | ### Recordings 20 | * [Part 1](https://www.youtube.com/watch?v=srKU5C-qVeY&list=PLeYIhs60ZS3ag-wt250z---Gh_QsgVsES&index=4) 21 | * [Part 2](https://www.youtube.com/watch?v=SCqlYeulJQA&list=PLeYIhs60ZS3ag-wt250z---Gh_QsgVsES&index=3) 22 | -------------------------------------------------------------------------------- /Wednesday/.README.md.swp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/Wednesday/.README.md.swp -------------------------------------------------------------------------------- /Wednesday/Day3_GCNNs.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "nbformat": 4, 3 | "nbformat_minor": 0, 4 | "metadata": { 5 | "colab": { 6 | "provenance": [] 7 | }, 8 | "kernelspec": { 9 | "name": "python3", 10 | "display_name": "Python 3" 11 | }, 12 | "language_info": { 13 | "name": "python" 14 | } 15 | }, 16 | "cells": [ 17 | { 18 | "cell_type": "code", 19 | "source": [ 20 | "#First, make sure the notebook is aware of the workshop data sets\n", 21 | "!git clone https://github.com/icomse/9th_workshop_ml_for_molecules.git\n", 22 | "import os\n", 23 | "os.chdir('9th_workshop_ml_for_molecules/data')" 24 | ], 25 | "metadata": { 26 | "colab": { 27 | "base_uri": "https://localhost:8080/" 28 | }, 29 | "id": "Xs9ebYrN_8YE", 30 | "outputId": "f34b86fc-5c1d-42aa-f1ad-092a05d86c8d" 31 | }, 32 | "execution_count": 1, 33 | "outputs": [ 34 | { 35 | "output_type": "stream", 36 | "name": "stdout", 37 | "text": [ 38 | "fatal: destination path '9th_workshop_ml_for_molecules' already exists and is not an empty directory.\n" 39 | ] 40 | } 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "source": [ 46 | "!pip install -q torch-scatter -f https://data.pyg.org/whl/torch-${TORCH}.html\n", 47 | "!pip install -q torch-sparse -f https://data.pyg.org/whl/torch-${TORCH}.html\n", 48 | "!pip install -q git+https://github.com/pyg-team/pytorch_geometric.git" 49 | ], 50 | "metadata": { 51 | "colab": { 52 | "base_uri": "https://localhost:8080/" 53 | }, 54 | "id": "7pIs8p5r6fB5", 55 | "outputId": "abb05f35-f3b7-4072-bcdd-ad8c793c2854" 56 | }, 57 | "execution_count": 2, 58 | "outputs": [ 59 | { 60 | "output_type": "stream", 61 | "name": "stdout", 62 | "text": [ 63 | " \u001b[1;31merror\u001b[0m: \u001b[1msubprocess-exited-with-error\u001b[0m\n", 64 | " \n", 65 | " \u001b[31m×\u001b[0m \u001b[32mpython setup.py egg_info\u001b[0m did not run successfully.\n", 66 | " \u001b[31m│\u001b[0m exit code: \u001b[1;36m1\u001b[0m\n", 67 | " \u001b[31m╰─>\u001b[0m See above for output.\n", 68 | " \n", 69 | " \u001b[1;35mnote\u001b[0m: This error originates from a subprocess, and is likely not a problem with pip.\n", 70 | " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25herror\n", 71 | "\u001b[1;31merror\u001b[0m: \u001b[1mmetadata-generation-failed\u001b[0m\n", 72 | "\n", 73 | "\u001b[31m×\u001b[0m Encountered error while generating package metadata.\n", 74 | "\u001b[31m╰─>\u001b[0m See above for output.\n", 75 | "\n", 76 | "\u001b[1;35mnote\u001b[0m: This is an issue with the package mentioned above, not pip.\n", 77 | "\u001b[1;36mhint\u001b[0m: See above for details.\n", 78 | " \u001b[1;31merror\u001b[0m: \u001b[1msubprocess-exited-with-error\u001b[0m\n", 79 | " \n", 80 | " \u001b[31m×\u001b[0m \u001b[32mpython setup.py egg_info\u001b[0m did not run successfully.\n", 81 | " \u001b[31m│\u001b[0m exit code: \u001b[1;36m1\u001b[0m\n", 82 | " \u001b[31m╰─>\u001b[0m See above for output.\n", 83 | " \n", 84 | " \u001b[1;35mnote\u001b[0m: This error originates from a subprocess, and is likely not a problem with pip.\n", 85 | " Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25herror\n", 86 | "\u001b[1;31merror\u001b[0m: \u001b[1mmetadata-generation-failed\u001b[0m\n", 87 | "\n", 88 | "\u001b[31m×\u001b[0m Encountered error while generating package metadata.\n", 89 | "\u001b[31m╰─>\u001b[0m See above for output.\n", 90 | "\n", 91 | "\u001b[1;35mnote\u001b[0m: This is an issue with the package mentioned above, not pip.\n", 92 | "\u001b[1;36mhint\u001b[0m: See above for details.\n", 93 | " Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", 94 | " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", 95 | " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", 96 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.7/1.7 MB\u001b[0m \u001b[31m31.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 97 | "\u001b[?25h Building wheel for torch-geometric (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n" 98 | ] 99 | } 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "source": [ 105 | "!pip install -q condacolab\n", 106 | "import condacolab\n", 107 | "condacolab.install()" 108 | ], 109 | "metadata": { 110 | "colab": { 111 | "base_uri": "https://localhost:8080/" 112 | }, 113 | "id": "8s96icrJ6Txn", 114 | "outputId": "12be7bc6-ab74-41f0-a7aa-a6f5c9362035" 115 | }, 116 | "execution_count": 3, 117 | "outputs": [ 118 | { 119 | "output_type": "stream", 120 | "name": "stdout", 121 | "text": [ 122 | "✨🍰✨ Everything looks OK!\n" 123 | ] 124 | } 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "source": [ 130 | "!mamba install -c conda-forge rdkit" 131 | ], 132 | "metadata": { 133 | "colab": { 134 | "base_uri": "https://localhost:8080/" 135 | }, 136 | "id": "1dA3MYXa6bOU", 137 | "outputId": "ffa817c3-bb52-4aac-f27f-e2a1e579da15" 138 | }, 139 | "execution_count": 4, 140 | "outputs": [ 141 | { 142 | "output_type": "stream", 143 | "name": "stdout", 144 | "text": [ 145 | "\n", 146 | "Looking for: ['rdkit']\n", 147 | "\n", 148 | "\u001b[?25l\u001b[2K\u001b[0G[+] 0.0s\n", 149 | "conda-forge/linux-64 ⣾ \n", 150 | "conda-forge/noarch ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.1s\n", 151 | "conda-forge/linux-64 ⣾ \n", 152 | "conda-forge/noarch ⣾ \u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.2s\n", 153 | "conda-forge/linux-64 4%\n", 154 | "conda-forge/noarch 1%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.3s\n", 155 | "conda-forge/linux-64 6%\n", 156 | "conda-forge/noarch 6%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.4s\n", 157 | "conda-forge/linux-64 9%\n", 158 | "conda-forge/noarch 13%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.5s\n", 159 | "conda-forge/linux-64 13%\n", 160 | "conda-forge/noarch 18%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.6s\n", 161 | "conda-forge/linux-64 14%\n", 162 | "conda-forge/noarch 24%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.7s\n", 163 | "conda-forge/linux-64 15%\n", 164 | "conda-forge/noarch 26%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.8s\n", 165 | "conda-forge/linux-64 17%\n", 166 | "conda-forge/noarch 28%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 0.9s\n", 167 | "conda-forge/linux-64 19%\n", 168 | "conda-forge/noarch 33%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.0s\n", 169 | "conda-forge/linux-64 21%\n", 170 | "conda-forge/noarch 38%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.1s\n", 171 | "conda-forge/linux-64 22%\n", 172 | "conda-forge/noarch 41%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.2s\n", 173 | "conda-forge/linux-64 25%\n", 174 | "conda-forge/noarch 47%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.3s\n", 175 | "conda-forge/linux-64 26%\n", 176 | "conda-forge/noarch 50%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.4s\n", 177 | "conda-forge/linux-64 29%\n", 178 | "conda-forge/noarch 53%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.5s\n", 179 | "conda-forge/linux-64 29%\n", 180 | "conda-forge/noarch 57%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.6s\n", 181 | "conda-forge/linux-64 31%\n", 182 | "conda-forge/noarch 60%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.7s\n", 183 | "conda-forge/linux-64 32%\n", 184 | "conda-forge/noarch 62%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.8s\n", 185 | "conda-forge/linux-64 33%\n", 186 | "conda-forge/noarch 63%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 1.9s\n", 187 | "conda-forge/linux-64 33%\n", 188 | "conda-forge/noarch 65%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.0s\n", 189 | "conda-forge/linux-64 34%\n", 190 | "conda-forge/noarch 67%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.1s\n", 191 | "conda-forge/linux-64 35%\n", 192 | "conda-forge/noarch 67%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.2s\n", 193 | "conda-forge/linux-64 37%\n", 194 | "conda-forge/noarch 71%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.3s\n", 195 | "conda-forge/linux-64 37%\n", 196 | "conda-forge/noarch 74%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.4s\n", 197 | "conda-forge/linux-64 39%\n", 198 | "conda-forge/noarch 76%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.5s\n", 199 | "conda-forge/linux-64 39%\n", 200 | "conda-forge/noarch 80%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.6s\n", 201 | "conda-forge/linux-64 41%\n", 202 | "conda-forge/noarch 81%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.7s\n", 203 | "conda-forge/linux-64 43%\n", 204 | "conda-forge/noarch 83%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.8s\n", 205 | "conda-forge/linux-64 43%\n", 206 | "conda-forge/noarch 88%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 2.9s\n", 207 | "conda-forge/linux-64 46%\n", 208 | "conda-forge/noarch 90%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.0s\n", 209 | "conda-forge/linux-64 49%\n", 210 | "conda-forge/noarch 97%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.1s\n", 211 | "conda-forge/linux-64 49%\n", 212 | "conda-forge/noarch 100%\u001b[2K\u001b[1A\u001b[2K\u001b[1A\u001b[2K\u001b[0Gconda-forge/noarch \n", 213 | "[+] 3.2s\n", 214 | "conda-forge/linux-64 50%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.3s\n", 215 | "conda-forge/linux-64 54%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.4s\n", 216 | "conda-forge/linux-64 57%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.5s\n", 217 | "conda-forge/linux-64 59%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.6s\n", 218 | "conda-forge/linux-64 61%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.7s\n", 219 | "conda-forge/linux-64 63%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.8s\n", 220 | "conda-forge/linux-64 65%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 3.9s\n", 221 | "conda-forge/linux-64 69%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.0s\n", 222 | "conda-forge/linux-64 73%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.1s\n", 223 | "conda-forge/linux-64 74%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.2s\n", 224 | "conda-forge/linux-64 77%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.3s\n", 225 | "conda-forge/linux-64 79%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.4s\n", 226 | "conda-forge/linux-64 83%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.5s\n", 227 | "conda-forge/linux-64 86%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.6s\n", 228 | "conda-forge/linux-64 92%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.7s\n", 229 | "conda-forge/linux-64 94%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.8s\n", 230 | "conda-forge/linux-64 94%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 4.9s\n", 231 | "conda-forge/linux-64 94%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.0s\n", 232 | "conda-forge/linux-64 94%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.1s\n", 233 | "conda-forge/linux-64 94%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.2s\n", 234 | "conda-forge/linux-64 94%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.3s\n", 235 | "conda-forge/linux-64 94%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.4s\n", 236 | "conda-forge/linux-64 94%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.5s\n", 237 | "conda-forge/linux-64 95%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.6s\n", 238 | "conda-forge/linux-64 95%\u001b[2K\u001b[1A\u001b[2K\u001b[0G[+] 5.7s\n", 239 | "conda-forge/linux-64 98%\u001b[2K\u001b[1A\u001b[2K\u001b[0Gconda-forge/linux-64 \n", 240 | "\u001b[?25h\n", 241 | "Pinned packages:\n", 242 | " - python 3.11.*\n", 243 | " - python 3.11.*\n", 244 | " - python_abi 3.11.* *cp311*\n", 245 | " - cuda-version 12.*\n", 246 | "\n", 247 | "\n", 248 | "Transaction\n", 249 | "\n", 250 | " Prefix: /usr/local\n", 251 | "\n", 252 | " All requested packages already installed\n", 253 | "\n", 254 | "\u001b[?25l\u001b[2K\u001b[0G\u001b[?25h" 255 | ] 256 | } 257 | ] 258 | }, 259 | { 260 | "cell_type": "code", 261 | "execution_count": 5, 262 | "metadata": { 263 | "id": "K_0lvzJpacZF" 264 | }, 265 | "outputs": [], 266 | "source": [ 267 | "\n", 268 | "import numpy as np\n", 269 | "import pandas as pd\n", 270 | "import matplotlib.pyplot as plt\n", 271 | "import time\n", 272 | "import os\n", 273 | "from rdkit import Chem\n", 274 | "\n", 275 | "import torch\n", 276 | "\n", 277 | "from sklearn.metrics import r2_score\n", 278 | "from sklearn.metrics import mean_absolute_error\n", 279 | "from sklearn.metrics import mean_squared_error\n", 280 | "from sklearn.preprocessing import OneHotEncoder" 281 | ] 282 | }, 283 | { 284 | "cell_type": "markdown", 285 | "source": [ 286 | "## Some Useful Functions:" 287 | ], 288 | "metadata": { 289 | "id": "es8KhqKUO42b" 290 | } 291 | }, 292 | { 293 | "cell_type": "code", 294 | "source": [ 295 | "# I usually keep these in a utils.py file and import them into my other files:\n", 296 | "def smiles2geodata(smi,y, feat_dict):\n", 297 | " \"\"\"\n", 298 | " Inputs:\n", 299 | " smi = smiles string\n", 300 | " y = target\n", 301 | " feat_dict = dictionary where keys are atoms and values are feature array (constructed using get_atom_features function)\n", 302 | "\n", 303 | " Outputs:\n", 304 | " geo_dp = pytorch geometric datapoint object\n", 305 | " \"\"\"\n", 306 | " mol = Chem.MolFromSmiles(smi)\n", 307 | " atomic_nums = [atom.GetAtomicNum() for atom in mol.GetAtoms()]\n", 308 | " atom_features = torch.tensor([feat_dict[x] for x in atomic_nums]).float()\n", 309 | " edges = get_edge_indices(mol)\n", 310 | " geo_dp = Data(x=atom_features, edge_index=edges,y=y)\n", 311 | "\n", 312 | " return geo_dp\n", 313 | "\n", 314 | "\n", 315 | "def get_edge_indices(mol):\n", 316 | " \"\"\"\n", 317 | " Inputs:\n", 318 | " mol = rdkit molecule object\n", 319 | "\n", 320 | " Outputs:\n", 321 | " torch tensor containing edge list (for inputting into smiles2geodata)\n", 322 | " \"\"\"\n", 323 | "\n", 324 | " edges =[]\n", 325 | " for bond in mol.GetBonds():\n", 326 | " edges.append((bond.GetBeginAtomIdx(),bond.GetEndAtomIdx()))\n", 327 | "\n", 328 | " edges = [[x[0] for x in edges],[x[1] for x in edges]]\n", 329 | "\n", 330 | " return torch.tensor(edges,dtype=torch.long)\n", 331 | "\n", 332 | "\n", 333 | "def get_atom_features(smi_list):\n", 334 | " \"\"\"\n", 335 | " One-hot encodes atom types and constructs a dictionary to convert atom types into feature vectors\n", 336 | "\n", 337 | " Inputs:\n", 338 | " smi_list = list of all smiles in the dataset\n", 339 | "\n", 340 | " Outputs:\n", 341 | " feat_dict = dictionary where keys are atoms and values are feature array\n", 342 | " \"\"\"\n", 343 | "\n", 344 | " atom_types = []\n", 345 | " for smi in smi_list:\n", 346 | " mol = Chem.MolFromSmiles(smi)\n", 347 | " atom_types.extend([atom.GetAtomicNum() for atom in mol.GetAtoms()])\n", 348 | "\n", 349 | " atom_set = list(set(atom_types))\n", 350 | "\n", 351 | " enc = OneHotEncoder()\n", 352 | " enc.fit(np.array(atom_set).reshape(-1,1))\n", 353 | " feat_dict = {x:enc.transform([[x]]).toarray()[0] for x in atom_set}\n", 354 | "\n", 355 | " return feat_dict" 356 | ], 357 | "metadata": { 358 | "id": "95y_ioEAO24g" 359 | }, 360 | "execution_count": 6, 361 | "outputs": [] 362 | }, 363 | { 364 | "cell_type": "markdown", 365 | "source": [ 366 | "### Building a deep learning model in Pytorch requires building multiple objects and routines:\n", 367 | "\n", 368 | "1. Dataset- object that contains your training/validation data\n", 369 | "\n", 370 | "2. Model- object that contains your model architecture and weights\n", 371 | "\n", 372 | "3. Train Routine- function that passes training data through model and updates weights\n", 373 | "\n", 374 | "4. Validation Routine- function that passes validation through model and reports performance" 375 | ], 376 | "metadata": { 377 | "id": "wOj87LmFNvsq" 378 | } 379 | }, 380 | { 381 | "cell_type": "markdown", 382 | "source": [ 383 | "## 1. Dataset" 384 | ], 385 | "metadata": { 386 | "id": "BiR1lG_2Nyyy" 387 | } 388 | }, 389 | { 390 | "cell_type": "code", 391 | "source": [ 392 | "data_path = 'aqsol.csv'\n", 393 | "df = pd.read_csv(data_path)\n", 394 | "df.head()" 395 | ], 396 | "metadata": { 397 | "colab": { 398 | "base_uri": "https://localhost:8080/", 399 | "height": 347 400 | }, 401 | "id": "A8GtZI1oNwGC", 402 | "outputId": "d6c10e63-42a0-47ac-a538-2e0c4b3ef1ec" 403 | }, 404 | "execution_count": 7, 405 | "outputs": [ 406 | { 407 | "output_type": "error", 408 | "ename": "FileNotFoundError", 409 | "evalue": "[Errno 2] No such file or directory: 'aqsol.csv'", 410 | "traceback": [ 411 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 412 | "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", 413 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mdata_path\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'aqsol.csv'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mdf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mread_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata_path\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3\u001b[0m \u001b[0mdf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhead\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 414 | "\u001b[0;32m/usr/local/lib/python3.11/site-packages/pandas/io/parsers/readers.py\u001b[0m in \u001b[0;36mread_csv\u001b[0;34m(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, date_format, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, encoding_errors, dialect, on_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options, dtype_backend)\u001b[0m\n\u001b[1;32m 1024\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mkwds_defaults\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1025\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1026\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0m_read\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1027\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1028\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", 415 | "\u001b[0;32m/usr/local/lib/python3.11/site-packages/pandas/io/parsers/readers.py\u001b[0m in \u001b[0;36m_read\u001b[0;34m(filepath_or_buffer, kwds)\u001b[0m\n\u001b[1;32m 618\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 619\u001b[0m \u001b[0;31m# Create the parser.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 620\u001b[0;31m \u001b[0mparser\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTextFileReader\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfilepath_or_buffer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 621\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 622\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mchunksize\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0miterator\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 416 | "\u001b[0;32m/usr/local/lib/python3.11/site-packages/pandas/io/parsers/readers.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, f, engine, **kwds)\u001b[0m\n\u001b[1;32m 1618\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1619\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhandles\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mIOHandles\u001b[0m \u001b[0;34m|\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1620\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_engine\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_make_engine\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mengine\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1621\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1622\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m->\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 417 | "\u001b[0;32m/usr/local/lib/python3.11/site-packages/pandas/io/parsers/readers.py\u001b[0m in \u001b[0;36m_make_engine\u001b[0;34m(self, f, engine)\u001b[0m\n\u001b[1;32m 1878\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m\"b\"\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1879\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;34m\"b\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1880\u001b[0;31m self.handles = get_handle(\n\u001b[0m\u001b[1;32m 1881\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1882\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 418 | "\u001b[0;32m/usr/local/lib/python3.11/site-packages/pandas/io/common.py\u001b[0m in \u001b[0;36mget_handle\u001b[0;34m(path_or_buf, mode, encoding, compression, memory_map, is_text, errors, storage_options)\u001b[0m\n\u001b[1;32m 871\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mioargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mencoding\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;34m\"b\"\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mioargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 872\u001b[0m \u001b[0;31m# Encoding\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 873\u001b[0;31m handle = open(\n\u001b[0m\u001b[1;32m 874\u001b[0m \u001b[0mhandle\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 875\u001b[0m \u001b[0mioargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmode\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 419 | "\u001b[0;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'aqsol.csv'" 420 | ] 421 | } 422 | ] 423 | }, 424 | { 425 | "cell_type": "code", 426 | "source": [ 427 | "from torch_geometric.data import InMemoryDataset\n", 428 | "from torch_geometric.data import Data" 429 | ], 430 | "metadata": { 431 | "id": "DNYBSTCJQk30" 432 | }, 433 | "execution_count": null, 434 | "outputs": [] 435 | }, 436 | { 437 | "cell_type": "code", 438 | "source": [ 439 | "class GeoDataset(InMemoryDataset):\n", 440 | " def __init__(self, root='./',raw_name=data_path,processed_name='lipo_processed.pt',transform=None, pre_transform=None):\n", 441 | "\n", 442 | " self.filename = os.path.join(root,raw_name)\n", 443 | " # self.processed_filename = os.path.join(root,processed_name)\n", 444 | "\n", 445 | " # read a csv from that path:\n", 446 | " self.df = pd.read_csv(self.filename)\n", 447 | "\n", 448 | " # assign dataset attribute \"input_vectors\" to be the 2048 bit vector representing each molecule:\n", 449 | " self.x = self.df[self.df.columns[0]].values\n", 450 | "\n", 451 | " # assign dataset attribute \"output_targets\" to be the scalar representing binding strength (last column):\n", 452 | " self.y = self.df[self.df.columns[-1]].values\n", 453 | "\n", 454 | "\n", 455 | " super(GeoDataset, self).__init__(root, transform, pre_transform)\n", 456 | "\n", 457 | " self.data, self.slices = torch.load(self.processed_paths[0],weights_only=False)\n", 458 | "\n", 459 | "\n", 460 | " def processed_file_names(self):\n", 461 | " return ['data.pt']\n", 462 | "\n", 463 | " def process(self):\n", 464 | "\n", 465 | " feat_dict = get_atom_features(self.x)\n", 466 | "\n", 467 | " data_list = [smiles2geodata(x,y,feat_dict) for x,y in zip(self.x,self.y)]\n", 468 | "\n", 469 | " data, slices = self.collate(data_list)\n", 470 | "\n", 471 | " torch.save((data, slices), self.processed_paths[0])\n", 472 | "" 473 | ], 474 | "metadata": { 475 | "id": "X8uxk_RXN2OK" 476 | }, 477 | "execution_count": null, 478 | "outputs": [] 479 | }, 480 | { 481 | "cell_type": "markdown", 482 | "source": [ 483 | "## 2. Model" 484 | ], 485 | "metadata": { 486 | "id": "UGRl3DCYQ0MW" 487 | } 488 | }, 489 | { 490 | "cell_type": "code", 491 | "source": [ 492 | "\n", 493 | "import torch\n", 494 | "import torch.nn as nn\n", 495 | "import torch.nn.functional as F\n", 496 | "from torch_geometric.nn import GCNConv\n", 497 | "from torch_geometric.nn import aggr" 498 | ], 499 | "metadata": { 500 | "id": "AJRZ4JBKQghV" 501 | }, 502 | "execution_count": null, 503 | "outputs": [] 504 | }, 505 | { 506 | "cell_type": "code", 507 | "source": [ 508 | "class GCN_Geo(torch.nn.Module):\n", 509 | "\n", 510 | " def __init__(self, hidden_dim_gcn=256, hidden_dim_fcn=256):\n", 511 | " super(GCN_Geo, self).__init__()\n", 512 | "\n", 513 | " self.conv1 = GCNConv(12, hidden_dim_gcn)\n", 514 | " self.conv2 = GCNConv(hidden_dim_gcn, hidden_dim_gcn)\n", 515 | "\n", 516 | " self.readout = aggr.SumAggregation()\n", 517 | "\n", 518 | " self.linear1 = nn.Linear(hidden_dim_gcn, hidden_dim_fcn)\n", 519 | " self.linear2 = nn.Linear(hidden_dim_fcn, 1)\n", 520 | "\n", 521 | " def forward(self, data):\n", 522 | "\n", 523 | " # Message passing layers:\n", 524 | " x, edge_index = data.x, data.edge_index\n", 525 | " x = self.conv1(x, edge_index)\n", 526 | " x = F.relu(x)\n", 527 | " x = self.conv2(x, edge_index)\n", 528 | " x = F.relu(x)\n", 529 | "\n", 530 | " # Aggregate to get molecule level features:\n", 531 | " x= self.readout(x,data.batch)\n", 532 | "\n", 533 | " # FCNN to predict molecular property:\n", 534 | " x = self.linear1(x)\n", 535 | " x = F.relu(x)\n", 536 | " x = self.linear2(x)\n", 537 | "\n", 538 | " return x.view(-1,)" 539 | ], 540 | "metadata": { 541 | "id": "6mQtQ1K0QosU" 542 | }, 543 | "execution_count": null, 544 | "outputs": [] 545 | }, 546 | { 547 | "cell_type": "markdown", 548 | "source": [ 549 | "## Pulling it all together" 550 | ], 551 | "metadata": { 552 | "id": "4zTbHrdq5Oih" 553 | } 554 | }, 555 | { 556 | "cell_type": "code", 557 | "source": [ 558 | "from torch_geometric.loader import DataLoader" 559 | ], 560 | "metadata": { 561 | "id": "_VHifpZW5KkP" 562 | }, 563 | "execution_count": null, 564 | "outputs": [] 565 | }, 566 | { 567 | "cell_type": "code", 568 | "source": [ 569 | "device = torch.device('cpu')\n", 570 | "model = GCN_Geo().to(device)\n", 571 | "\n", 572 | "dataset = GeoDataset()\n", 573 | "dataloader = DataLoader(dataset,batch_size=32,shuffle=True)\n", 574 | "\n", 575 | "optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=5e-4)\n", 576 | "loss_fn = torch.nn.MSELoss()" 577 | ], 578 | "metadata": { 579 | "id": "uOQV8tJF5VNM" 580 | }, 581 | "execution_count": null, 582 | "outputs": [] 583 | }, 584 | { 585 | "cell_type": "code", 586 | "source": [ 587 | "model.train()\n", 588 | "for epoch in range(30):\n", 589 | " print('Epoch: {}'.format(epoch))\n", 590 | " for batch in dataloader:\n", 591 | "\n", 592 | " optimizer.zero_grad()\n", 593 | "\n", 594 | " out = model(batch)\n", 595 | "\n", 596 | " loss = loss_fn(out.double(), batch.y.double())\n", 597 | "\n", 598 | " loss.backward()\n", 599 | "\n", 600 | " optimizer.step()" 601 | ], 602 | "metadata": { 603 | "id": "h2A8_AR_9mZW" 604 | }, 605 | "execution_count": null, 606 | "outputs": [] 607 | }, 608 | { 609 | "cell_type": "code", 610 | "source": [ 611 | "def predict(model, dataloader):\n", 612 | "\n", 613 | " # Set our model to evaluation mode:\n", 614 | " model.eval()\n", 615 | "\n", 616 | " X_all = []\n", 617 | " y_all = []\n", 618 | " pred_all = []\n", 619 | "\n", 620 | " # Remove gradients:\n", 621 | " with torch.no_grad():\n", 622 | "\n", 623 | " # Looping over the dataloader allows us to pull out or input/output data:\n", 624 | " for batch in dataloader:\n", 625 | "\n", 626 | " # Make a prediction:\n", 627 | " pred = model(batch)\n", 628 | "\n", 629 | " X_all.append(batch.x)\n", 630 | " y_all.append(batch.y)\n", 631 | " pred_all.append(pred)\n", 632 | "\n", 633 | " X_all = torch.concat(X_all)\n", 634 | " y_all = torch.concat(y_all)\n", 635 | " pred_all = torch.concat(pred_all)\n", 636 | "\n", 637 | " return X_all, y_all, pred_all" 638 | ], 639 | "metadata": { 640 | "id": "aj23zG6R-834" 641 | }, 642 | "execution_count": null, 643 | "outputs": [] 644 | }, 645 | { 646 | "cell_type": "code", 647 | "source": [ 648 | "x,y,pred = predict(model,dataloader)" 649 | ], 650 | "metadata": { 651 | "id": "HRl3jB4g_GDR" 652 | }, 653 | "execution_count": null, 654 | "outputs": [] 655 | }, 656 | { 657 | "cell_type": "code", 658 | "source": [ 659 | "plt.figure(figsize=(4,4))\n", 660 | "plt.scatter(y,pred,alpha=0.4)\n", 661 | "plt.plot([-1,4],[-1,4],color='k')\n", 662 | "plt.show()" 663 | ], 664 | "metadata": { 665 | "id": "RyqFIvbX_Owt" 666 | }, 667 | "execution_count": null, 668 | "outputs": [] 669 | }, 670 | { 671 | "cell_type": "code", 672 | "source": [ 673 | "r2_score(y,pred)" 674 | ], 675 | "metadata": { 676 | "id": "AqrsBoas_Pbm" 677 | }, 678 | "execution_count": null, 679 | "outputs": [] 680 | }, 681 | { 682 | "cell_type": "markdown", 683 | "source": [ 684 | "***HACKING:*** We didn't include training/validation splits! Can you go back and including training and validation splits, using the FCNN code from the previous section as a reference?" 685 | ], 686 | "metadata": { 687 | "id": "cnsH4AJ4F312" 688 | } 689 | }, 690 | { 691 | "cell_type": "code", 692 | "source": [], 693 | "metadata": { 694 | "id": "JMqheQtoATiL" 695 | }, 696 | "execution_count": null, 697 | "outputs": [] 698 | } 699 | ] 700 | } -------------------------------------------------------------------------------- /Wednesday/Intro_FCNN_GCNN.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/Wednesday/Intro_FCNN_GCNN.pdf -------------------------------------------------------------------------------- /Wednesday/README.md: -------------------------------------------------------------------------------- 1 | ## Using neural nets for molecules 2 | 3 | [Notebook for FCNNs](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Wednesday/Day3_FCNNs.ipynb) 4 | 5 | [Notebook for GCNNs](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Wednesday/Day3_GCNNs.ipynb) 6 | 7 | [PDF of slides](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Wednesday/Intro_FCNN_GCNN.pdf) 8 | 9 | ### Session 1 (1:00-1:50) 10 | * Fully connected neural nets for ML (Dr. Camille Bilodeau, University of Virginia) 11 | * Break (1:50-2:00) 12 | 13 | ### Session 2 (2:00-2:50) 14 | * Using Pytorch for fully connected neural nets (Dr. Camille Bilodeau, University of Virginia) 15 | * Break (2:50-3:00) 16 | 17 | ### Session 3 (3:00-4:00) 18 | * Graph neural nets for ML of molecules (Dr. Camille Bilodeau, University of Virginia) 19 | * Wrapup (3:50-4:00) 20 | 21 | ### Recordings 22 | * [Part 1](https://www.youtube.com/watch?v=oX_EADguV3Q) 23 | * [Part 2](https://youtu.be/Ckay9L-Gbw4) 24 | -------------------------------------------------------------------------------- /data/DES_SurfaceTension.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/data/DES_SurfaceTension.xlsx -------------------------------------------------------------------------------- /data/Exam_Data.txt: -------------------------------------------------------------------------------- 1 | Exam_1_Score,Exam_2_Score,Classification 2 | 34.62365962451697,78.0246928153624,0 3 | 30.28671076822607,43.89499752400101,0 4 | 35.84740876993872,72.90219802708364,0 5 | 60.18259938620976,86.30855209546826,1 6 | 79.0327360507101,75.3443764369103,1 7 | 45.08327747668339,56.3163717815305,0 8 | 61.10666453684766,96.51142588489624,1 9 | 75.02474556738889,46.55401354116538,1 10 | 76.09878670226257,87.42056971926803,1 11 | 84.43281996120035,43.53339331072109,1 12 | 95.86155507093572,38.22527805795094,0 13 | 75.01365838958247,30.60326323428011,0 14 | 82.30705337399482,76.48196330235604,1 15 | 69.36458875970939,97.71869196188608,1 16 | 39.53833914367223,76.03681085115882,0 17 | 53.9710521485623,89.20735013750205,1 18 | 69.07014406283025,52.74046973016765,1 19 | 67.94685547711617,46.67857410673128,0 20 | 70.66150955499435,92.92713789364831,1 21 | 76.97878372747498,47.57596364975532,1 22 | 67.37202754570876,42.83843832029179,0 23 | 89.67677575072079,65.79936592745237,1 24 | 50.534788289883,48.85581152764205,0 25 | 34.21206097786789,44.20952859866288,0 26 | 77.9240914545704,68.9723599933059,1 27 | 62.27101367004632,69.95445795447587,1 28 | 80.1901807509566,44.82162893218353,1 29 | 93.114388797442,38.80067033713209,0 30 | 61.83020602312595,50.25610789244621,0 31 | 38.78580379679423,64.99568095539578,0 32 | 61.379289447425,72.80788731317097,1 33 | 85.40451939411645,57.05198397627122,1 34 | 52.10797973193984,63.12762376881715,0 35 | 52.04540476831827,69.43286012045222,1 36 | 40.23689373545111,71.16774802184875,0 37 | 54.63510555424817,52.21388588061123,0 38 | 33.91550010906887,98.86943574220611,0 39 | 64.17698887494485,80.90806058670817,1 40 | 74.78925295941542,41.57341522824434,0 41 | 34.1836400264419,75.2377203360134,0 42 | 83.90239366249155,56.30804621605327,1 43 | 51.54772026906181,46.85629026349976,0 44 | 94.44336776917852,65.56892160559052,1 45 | 82.36875375713919,40.61825515970618,0 46 | 51.04775177128865,45.82270145776001,0 47 | 62.22267576120188,52.06099194836679,0 48 | 77.19303492601364,70.45820000180959,1 49 | 97.77159928000232,86.7278223300282,1 50 | 62.07306379667647,96.76882412413983,1 51 | 91.56497449807442,88.69629254546599,1 52 | 79.94481794066932,74.16311935043758,1 53 | 99.2725269292572,60.99903099844988,1 54 | 90.54671411399852,43.39060180650027,1 55 | 34.52451385320009,60.39634245837173,0 56 | 50.2864961189907,49.80453881323059,0 57 | 49.58667721632031,59.80895099453265,0 58 | 97.64563396007767,68.86157272420604,1 59 | 32.57720016809309,95.59854761387875,0 60 | 74.24869136721598,69.82457122657193,1 61 | 71.79646205863379,78.45356224515052,1 62 | 75.3956114656803,85.75993667331619,1 63 | 35.28611281526193,47.02051394723416,0 64 | 56.25381749711624,39.26147251058019,0 65 | 30.05882244669796,49.59297386723685,0 66 | 44.66826172480893,66.45008614558913,0 67 | 66.56089447242954,41.09209807936973,0 68 | 40.45755098375164,97.53518548909936,1 69 | 49.07256321908844,51.88321182073966,0 70 | 80.27957401466998,92.11606081344084,1 71 | 66.74671856944039,60.99139402740988,1 72 | 32.72283304060323,43.30717306430063,0 73 | 64.0393204150601,78.03168802018232,1 74 | 72.34649422579923,96.22759296761404,1 75 | 60.45788573918959,73.09499809758037,1 76 | 58.84095621726802,75.85844831279042,1 77 | 99.82785779692128,72.36925193383885,1 78 | 47.26426910848174,88.47586499559782,1 79 | 50.45815980285988,75.80985952982456,1 80 | 60.45555629271532,42.50840943572217,0 81 | 82.22666157785568,42.71987853716458,0 82 | 88.9138964166533,69.80378889835472,1 83 | 94.83450672430196,45.69430680250754,1 84 | 67.31925746917527,66.58935317747915,1 85 | 57.23870631569862,59.51428198012956,1 86 | 80.36675600171273,90.96014789746954,1 87 | 68.46852178591112,85.59430710452014,1 88 | 42.0754545384731,78.84478600148043,0 89 | 75.47770200533905,90.42453899753964,1 90 | 78.63542434898018,96.64742716885644,1 91 | 52.34800398794107,60.76950525602592,0 92 | 94.09433112516793,77.15910509073893,1 93 | 90.44855097096364,87.50879176484702,1 94 | 55.48216114069585,35.57070347228866,0 95 | 74.49269241843041,84.84513684930135,1 96 | 89.84580670720979,45.35828361091658,1 97 | 83.48916274498238,48.38028579728175,1 98 | 42.2617008099817,87.10385094025457,1 99 | 99.31500880510394,68.77540947206617,1 100 | 55.34001756003703,64.9319380069486,1 101 | 74.77589300092767,89.52981289513276,1 102 | -------------------------------------------------------------------------------- /data/LC.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/data/LC.mat -------------------------------------------------------------------------------- /data/MNIST.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/data/MNIST.mat -------------------------------------------------------------------------------- /data/Weights.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/data/Weights.mat -------------------------------------------------------------------------------- /data/chembl_drugs.txt.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/data/chembl_drugs.txt.gz -------------------------------------------------------------------------------- /data/linmod.csv: -------------------------------------------------------------------------------- 1 | inputs,outputs 2 | 8.894,16.107 3 | 8.691,16.509 4 | 11.080,16.941 5 | 16.344,17.382 6 | 13.662,17.831 7 | 15.298,18.300 8 | 19.965,18.770 9 | 13.363,19.272 10 | 24.169,19.784 11 | 23.522,20.293 12 | 14.252,20.844 13 | 20.339,21.391 14 | 15.574,21.965 15 | 17.254,22.544 16 | 14.523,23.149 17 | 26.607,23.753 18 | 25.983,24.374 19 | 17.311,25.025 20 | 15.638,25.675 21 | 21.745,26.351 22 | 18.401,27.017 23 | 18.592,27.716 24 | 20.894,28.445 25 | 23.727,29.168 26 | 20.332,29.901 27 | 19.098,30.658 28 | 29.516,31.433 29 | 27.527,32.225 30 | 17.999,33.026 31 | 31.719,33.833 32 | 28.920,34.655 33 | 23.396,35.516 34 | 32.852,36.361 35 | 21.982,37.239 36 | 20.468,38.135 37 | 35.189,39.036 38 | 23.305,39.953 39 | 25.251,40.866 40 | 34.384,41.821 41 | 22.118,42.788 42 | 29.019,43.760 43 | 29.816,44.750 44 | 33.277,45.756 45 | 25.831,46.767 46 | 29.087,47.807 47 | 35.362,48.846 48 | 33.251,49.902 49 | 37.606,50.985 50 | 30.401,52.081 51 | 29.286,53.178 52 | 37.339,54.305 53 | 33.033,55.432 54 | 38.304,56.578 55 | 32.814,57.745 56 | 40.875,58.931 57 | 40.671,60.120 58 | 35.752,61.322 59 | 39.145,62.555 60 | 35.786,63.775 61 | 42.676,65.036 62 | 43.582,66.307 63 | 42.436,67.589 64 | 40.683,68.875 65 | 31.933,70.194 66 | 33.118,71.511 67 | 35.643,72.847 68 | 46.872,74.201 69 | 33.309,75.567 70 | 43.412,76.951 71 | 33.624,78.339 72 | 36.661,79.760 73 | 37.324,81.181 74 | 45.092,82.623 75 | 46.328,84.068 76 | 39.367,85.546 77 | 36.136,87.018 78 | 37.587,88.531 79 | 43.433,90.030 80 | 48.174,91.569 81 | 49.651,93.106 82 | 47.206,94.657 83 | 37.934,96.241 84 | 44.925,97.821 85 | 45.973,99.420 86 | 50.981,101.036 87 | 53.979,102.670 88 | 48.728,104.304 89 | 42.299,105.964 90 | 55.103,107.638 91 | 52.231,109.325 92 | 48.731,111.017 93 | 42.484,112.744 94 | 56.213,114.462 95 | 56.832,116.220 96 | 53.092,117.983 97 | 52.820,119.757 98 | 45.118,121.545 99 | 58.586,123.339 100 | 53.853,125.154 101 | 45.761,126.996 102 | 45.402,128.837 103 | 58.139,130.709 104 | 57.777,132.581 105 | 58.322,134.477 106 | 48.867,136.368 107 | 60.376,138.301 108 | 53.183,140.231 109 | 53.924,142.181 110 | 48.729,144.143 111 | 59.189,146.117 112 | 58.017,148.114 113 | 57.466,150.113 114 | 60.471,152.133 115 | 63.401,154.176 116 | 60.205,156.230 117 | 65.517,158.278 118 | 60.152,160.367 119 | 66.499,162.454 120 | 65.436,164.567 121 | 53.633,166.685 122 | 62.120,168.840 123 | 57.062,170.977 124 | 56.088,173.148 125 | 66.593,175.337 126 | 58.498,177.519 127 | 68.501,179.739 128 | 61.116,181.959 129 | 55.455,184.200 130 | 62.478,186.457 131 | 65.458,188.724 132 | 64.519,191.014 133 | 71.783,193.298 134 | 62.278,195.616 135 | 64.529,197.950 136 | 65.048,200.291 137 | 68.988,202.650 138 | 64.081,205.009 139 | 70.583,207.393 140 | 73.365,209.803 141 | 60.232,212.217 142 | -------------------------------------------------------------------------------- /data/long_paths.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/data/long_paths.npz -------------------------------------------------------------------------------- /data/paths.npz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/icomse/9th_workshop_ml_for_molecules/d52d44d0095fd438c9df9cf5a6a34289556bd751/data/paths.npz -------------------------------------------------------------------------------- /data/perovskite_data.csv: -------------------------------------------------------------------------------- 1 | ABX3,exp_label,is_train,A,B,X,nA,nB,nX,rA (Ang),rB (Ang),rX (Ang),t,tau,t_pred,tau_pred,tau_prob 2 | AgBrO3,-1.0,1,Ag,Br,O,1,5,-2,1.28,0.31,1.4,1.11,6.43,-1,-1,0.05 3 | AgCdBr3,-1.0,1,Ag,Cd,Br,1,2,-1,1.28,0.95,1.96,0.79,5.58,-1,-1,0.12 4 | PbAgBr3,-1.0,1,Pb,Ag,Br,2,1,-1,1.49,1.15,1.96,0.78,7.71,-1,-1,0.01 5 | AgCaCl3,-1.0,1,Ag,Ca,Cl,1,2,-1,1.28,1.0,1.81,0.78,6.0,-1,-1,0.07 6 | AgClO3,-1.0,1,Ag,Cl,O,1,5,-2,1.28,0.12,1.4,1.25,15.17,-1,-1,0.0 7 | AgMgCl3,-1.0,1,Ag,Mg,Cl,1,2,-1,1.28,0.72,1.81,0.86,4.6,1,-1,0.34 8 | AgSnCl3,-1.0,1,Ag,Sn,Cl,1,2,-1,1.28,1.15,1.81,0.74,10.97,-1,-1,0.0 9 | AgCoF3,1.0,1,Ag,Co,F,1,2,-1,1.28,0.74,1.33,0.89,3.96,1,1,0.64 10 | AgCuF3,1.0,1,Ag,Cu,F,1,2,-1,1.28,0.73,1.33,0.9,3.94,1,1,0.64 11 | AgMgF3,1.0,1,Ag,Mg,F,1,2,-1,1.28,0.72,1.33,0.9,3.94,1,1,0.65 12 | AgMnF3,1.0,1,Ag,Mn,F,1,2,-1,1.28,0.83,1.33,0.85,4.16,1,1,0.54 13 | AgNiF3,1.0,1,Ag,Ni,F,1,2,-1,1.28,0.69,1.33,0.91,3.93,1,1,0.65 14 | PbAgF3,-1.0,1,Pb,Ag,F,2,1,-1,1.49,1.15,1.33,0.8,7.16,-1,-1,0.02 15 | AgZnF3,1.0,1,Ag,Zn,F,1,2,-1,1.28,0.74,1.33,0.89,3.95,1,1,0.64 16 | AgNO3,-1.0,1,Ag,N,O,1,5,-2,1.28,0.13,1.4,1.24,14.07,-1,-1,0.0 17 | AgNbO3,1.0,1,Ag,Nb,O,1,5,-2,1.28,0.64,1.4,0.93,4.07,1,1,0.58 18 | AgPO3,-1.0,1,Ag,P,O,1,5,-2,1.28,0.38,1.4,1.06,5.46,-1,-1,0.13 19 | AgSbO3,-1.0,1,Ag,Sb,O,1,5,-2,1.28,0.6,1.4,0.95,4.15,1,1,0.55 20 | AgTaO3,1.0,1,Ag,Ta,O,1,5,-2,1.28,0.64,1.4,0.93,4.07,1,1,0.58 21 | AgVO3,-1.0,1,Ag,V,O,1,5,-2,1.28,0.54,1.4,0.98,4.34,1,-1,0.46 22 | AlBO3,-1.0,1,Al,B,O,3,3,-2,0.54,0.27,1.4,0.82,4.88,-1,-1,0.25 23 | BiAlO3,1.0,1,Bi,Al,O,3,3,-2,1.17,0.54,1.4,0.94,2.0,1,1,0.97 24 | CeAlO3,1.0,1,Ce,Al,O,3,3,-2,1.34,0.54,1.4,1.0,1.8,1,1,0.97 25 | ErAlO3,1.0,1,Er,Al,O,3,3,-2,1.06,0.54,1.4,0.9,2.3,1,1,0.95 26 | EuAlO3,1.0,1,Eu,Al,O,3,3,-2,1.12,0.54,1.4,0.92,2.12,1,1,0.96 27 | FeAlO3,-1.0,1,Fe,Al,O,3,3,-2,0.78,0.54,1.4,0.8,5.22,-1,-1,0.17 28 | LaAlO3,1.0,1,La,Al,O,3,3,-2,1.36,0.54,1.4,1.01,1.79,1,1,0.97 29 | NdAlO3,1.0,1,Nd,Al,O,3,3,-2,1.27,0.54,1.4,0.98,1.85,1,1,0.97 30 | PrAlO3,1.0,1,Pr,Al,O,3,3,-2,1.18,0.54,1.4,0.94,1.98,1,1,0.97 31 | SmAlO3,1.0,1,Sm,Al,O,3,3,-2,1.24,0.54,1.4,0.96,1.89,1,1,0.97 32 | TbAlO3,1.0,1,Tb,Al,O,3,3,-2,1.1,0.54,1.4,0.91,2.19,1,1,0.96 33 | TmAlO3,1.0,1,Tm,Al,O,3,3,-2,1.05,0.54,1.4,0.9,2.34,1,1,0.95 34 | YAlO3,1.0,1,Y,Al,O,3,3,-2,1.08,0.54,1.4,0.9,2.26,1,1,0.96 35 | YbAlO3,1.0,1,Yb,Al,O,3,3,-2,1.04,0.54,1.4,0.89,2.38,1,1,0.95 36 | BaAmO3,1.0,1,Ba,Am,O,2,4,-2,1.61,0.85,1.4,0.95,3.58,1,1,0.78 37 | SrAmO3,1.0,1,Sr,Am,O,2,4,-2,1.44,0.85,1.4,0.89,4.07,1,1,0.58 38 | AmVO3,1.0,1,Am,V,O,4,2,-2,0.95,0.79,1.4,0.76,11.85,-1,-1,0.0 39 | LiAsO3,-1.0,1,Li,As,O,1,5,-2,0.92,0.46,1.4,0.88,4.93,1,-1,0.24 40 | NaAsO3,-1.0,1,Na,As,O,1,5,-2,1.39,0.46,1.4,1.06,4.78,-1,-1,0.28 41 | SbAsO3,-1.0,1,Sb,As,O,3,3,-2,0.76,0.58,1.4,0.77,7.96,-1,-1,0.01 42 | CrBO3,-1.0,1,Cr,B,O,3,3,-2,0.62,0.27,1.4,0.85,4.49,1,-1,0.39 43 | ErBO3,-1.0,1,Er,B,O,3,3,-2,1.06,0.27,1.4,1.04,4.8,1,-1,0.27 44 | EuBO3,-1.0,1,Eu,B,O,3,3,-2,1.12,0.27,1.4,1.07,4.93,-1,-1,0.24 45 | FeBO3,-1.0,1,Fe,B,O,3,3,-2,0.78,0.27,1.4,0.92,4.35,1,-1,0.45 46 | GdBO3,-1.0,1,Gd,B,O,3,3,-2,1.11,0.27,1.4,1.06,4.9,-1,-1,0.25 47 | HoBO3,-1.0,1,Ho,B,O,3,3,-2,1.12,0.27,1.4,1.07,4.93,-1,-1,0.24 48 | InBO3,-1.0,1,In,B,O,3,3,-2,0.92,0.27,1.4,0.98,4.52,1,-1,0.38 49 | LaBO3,-1.0,1,La,B,O,3,3,-2,1.36,0.27,1.4,1.17,5.53,-1,-1,0.12 50 | ScBO3,-1.0,1,Sc,B,O,3,3,-2,0.87,0.27,1.4,0.96,4.45,1,-1,0.41 51 | TmBO3,-1.0,1,Tm,B,O,3,3,-2,1.05,0.27,1.4,1.04,4.78,1,-1,0.28 52 | VBO3,-1.0,1,V,B,O,3,3,-2,0.64,0.27,1.4,0.86,4.42,1,-1,0.42 53 | YBO3,-1.0,1,Y,B,O,3,3,-2,1.08,0.27,1.4,1.05,4.83,1,-1,0.27 54 | CsBaBr3,-1.0,1,Cs,Ba,Br,1,2,-1,1.88,1.35,1.96,0.82,4.66,-1,-1,0.32 55 | KBaBr3,-1.0,1,K,Ba,Br,1,2,-1,1.64,1.35,1.96,0.77,6.69,-1,-1,0.03 56 | BaNaBr3,-1.0,1,Ba,Na,Br,2,1,-1,1.61,1.02,1.96,0.85,4.84,1,-1,0.26 57 | RbBaBr3,-1.0,1,Rb,Ba,Br,1,2,-1,1.72,1.35,1.96,0.79,5.71,-1,-1,0.1 58 | BaCO3,-1.0,1,Ba,C,O,2,4,-2,1.61,0.16,1.4,1.36,13.47,-1,-1,0.0 59 | BaCeO3,1.0,1,Ba,Ce,O,2,4,-2,1.61,0.87,1.4,0.94,3.62,1,1,0.76 60 | CsBaCl3,-1.0,1,Cs,Ba,Cl,1,2,-1,1.88,1.35,1.81,0.83,4.55,1,-1,0.37 61 | KBaCl3,-1.0,1,K,Ba,Cl,1,2,-1,1.64,1.35,1.81,0.77,6.58,-1,-1,0.04 62 | BaLiCl3,-1.0,1,Ba,Li,Cl,2,1,-1,1.61,0.76,1.81,0.94,4.03,1,1,0.61 63 | BaNaCl3,-1.0,1,Ba,Na,Cl,2,1,-1,1.61,1.02,1.81,0.85,4.69,1,-1,0.31 64 | BaCoO3,-1.0,1,Ba,Co,O,2,4,-2,1.61,0.53,1.4,1.1,4.11,-1,1,0.57 65 | BaCrO3,-1.0,1,Ba,Cr,O,2,4,-2,1.61,0.55,1.4,1.09,4.0,-1,1,0.62 66 | CsBaF3,-1.0,1,Cs,Ba,F,1,2,-1,1.88,1.35,1.33,0.85,4.19,1,-1,0.53 67 | KBaF3,-1.0,1,K,Ba,F,1,2,-1,1.64,1.35,1.33,0.78,6.23,-1,-1,0.06 68 | BaGeO3,-1.0,1,Ba,Ge,O,2,4,-2,1.61,0.53,1.4,1.1,4.11,-1,1,0.57 69 | BaHfO3,1.0,1,Ba,Hf,O,2,4,-2,1.61,0.71,1.4,1.01,3.51,1,1,0.8 70 | BaIrO3,1.0,1,Ba,Ir,O,2,4,-2,1.61,0.62,1.4,1.05,3.68,1,1,0.74 71 | BaMnO3,-1.0,1,Ba,Mn,O,2,4,-2,1.61,0.53,1.4,1.1,4.11,-1,1,0.57 72 | BaMoO3,1.0,1,Ba,Mo,O,2,4,-2,1.61,0.65,1.4,1.04,3.62,1,1,0.77 73 | BaNpO3,1.0,1,Ba,Np,O,2,4,-2,1.61,0.87,1.4,0.94,3.62,1,1,0.76 74 | BaPaO3,1.0,1,Ba,Pa,O,2,4,-2,1.61,0.9,1.4,0.93,3.71,1,1,0.74 75 | BaPbO3,1.0,1,Ba,Pb,O,2,4,-2,1.61,0.78,1.4,0.98,3.49,1,1,0.8 76 | BaSiO3,-1.0,1,Ba,Si,O,2,4,-2,1.61,0.4,1.4,1.18,5.28,-1,-1,0.16 77 | BaThO3,1.0,1,Ba,Th,O,2,4,-2,1.61,0.94,1.4,0.91,3.86,1,1,0.68 78 | BaTiO3,1.0,1,Ba,Ti,O,2,4,-2,1.61,0.6,1.4,1.06,3.75,-1,1,0.72 79 | BaUO3,1.0,1,Ba,U,O,2,4,-2,1.61,0.89,1.4,0.93,3.68,1,1,0.75 80 | KBeCl3,-1.0,1,K,Be,Cl,1,2,-1,1.64,0.45,1.81,1.08,5.84,-1,-1,0.09 81 | NaBeCl3,-1.0,1,Na,Be,Cl,1,2,-1,1.39,0.45,1.81,1.0,5.76,1,-1,0.09 82 | RbBeCl3,-1.0,1,Rb,Be,Cl,1,2,-1,1.72,0.45,1.81,1.1,5.87,-1,-1,0.08 83 | TlBeCl3,-1.0,1,Tl,Be,Cl,1,2,-1,1.7,0.45,1.81,1.1,5.86,-1,-1,0.08 84 | CsBeF3,1.0,1,Cs,Be,F,1,2,-1,1.88,0.45,1.33,1.28,4.88,-1,-1,0.25 85 | RbBeF3,-1.0,1,Rb,Be,F,1,2,-1,1.72,0.45,1.33,1.21,4.81,-1,-1,0.27 86 | BiInO3,1.0,1,Bi,In,O,3,3,-2,1.17,0.8,1.4,0.83,4.29,1,-1,0.48 87 | KBiO3,-1.0,1,K,Bi,O,1,5,-2,1.64,0.76,1.4,1.0,3.65,1,1,0.76 88 | LiBiO3,-1.0,1,Li,Bi,O,1,5,-2,0.92,0.76,1.4,0.76,7.18,-1,-1,0.02 89 | BiMnO3,1.0,1,Bi,Mn,O,3,3,-2,1.17,0.64,1.4,0.89,2.31,1,1,0.95 90 | NaBiO3,-1.0,1,Na,Bi,O,1,5,-2,1.39,0.76,1.4,0.91,3.87,1,1,0.67 91 | BiScO3,1.0,1,Bi,Sc,O,3,3,-2,1.17,0.74,1.4,0.85,3.32,1,1,0.84 92 | CsBrO3,-1.0,1,Cs,Br,O,1,5,-2,1.88,0.31,1.4,1.36,6.88,-1,-1,0.03 93 | KBrO3,-1.0,1,K,Br,O,1,5,-2,1.64,0.31,1.4,1.26,6.69,-1,-1,0.03 94 | NaBrO3,-1.0,1,Na,Br,O,1,5,-2,1.39,0.31,1.4,1.15,6.5,-1,-1,0.04 95 | RbBrO3,-1.0,1,Rb,Br,O,1,5,-2,1.72,0.31,1.4,1.29,6.75,-1,-1,0.03 96 | TlBrO3,-1.0,1,Tl,Br,O,1,5,-2,1.7,0.31,1.4,1.28,6.74,-1,-1,0.03 97 | CaLiBr3,-1.0,1,Ca,Li,Br,2,1,-1,1.34,0.76,1.96,0.86,4.8,1,-1,0.28 98 | NaCaBr3,-1.0,1,Na,Ca,Br,1,2,-1,1.39,1.0,1.96,0.8,5.18,-1,-1,0.18 99 | CsCdBr3,1.0,1,Cs,Cd,Br,1,2,-1,1.88,0.95,1.96,0.93,3.96,1,1,0.63 100 | NaCdBr3,-1.0,1,Na,Cd,Br,1,2,-1,1.39,0.95,1.96,0.81,4.91,-1,-1,0.24 101 | RbCdBr3,1.0,1,Rb,Cd,Br,1,2,-1,1.72,0.95,1.96,0.89,4.11,1,1,0.56 102 | KCoBr3,-1.0,1,K,Co,Br,1,2,-1,1.64,0.74,1.96,0.94,4.42,1,-1,0.42 103 | LiCoBr3,-1.0,1,Li,Co,Br,1,2,-1,0.92,0.74,1.96,0.75,7.48,-1,-1,0.01 104 | CsHgBr3,1.0,1,Cs,Hg,Br,1,2,-1,1.88,1.02,1.96,0.91,3.94,1,1,0.65 105 | CsMnBr3,-1.0,1,Cs,Mn,Br,1,2,-1,1.88,0.83,1.96,0.97,4.13,1,1,0.56 106 | CsNiBr3,-1.0,1,Cs,Ni,Br,1,2,-1,1.88,0.69,1.96,1.02,4.56,1,-1,0.36 107 | CsSnBr3,1.0,1,Cs,Sn,Br,1,2,-1,1.88,1.15,1.96,0.87,4.03,1,1,0.6 108 | CsTiBr3,-1.0,1,Cs,Ti,Br,1,2,-1,1.88,0.86,1.96,0.96,4.07,1,1,0.58 109 | LiMgBr3,-1.0,1,Li,Mg,Br,1,2,-1,0.92,0.72,1.96,0.76,6.94,-1,-1,0.03 110 | SrLiBr3,-1.0,1,Sr,Li,Br,2,1,-1,1.44,0.76,1.96,0.88,4.51,1,-1,0.38 111 | NaMgBr3,-1.0,1,Na,Mg,Br,1,2,-1,1.39,0.72,1.96,0.88,4.66,1,-1,0.32 112 | RbMnBr3,-1.0,1,Rb,Mn,Br,1,2,-1,1.72,0.83,1.96,0.93,4.21,1,-1,0.52 113 | SrNaBr3,-1.0,1,Sr,Na,Br,2,1,-1,1.44,1.02,1.96,0.81,6.11,-1,-1,0.06 114 | RbNiBr3,-1.0,1,Rb,Ni,Br,1,2,-1,1.72,0.69,1.96,0.98,4.57,1,-1,0.36 115 | CdCO3,-1.0,1,Cd,C,O,2,4,-2,1.31,0.16,1.4,1.23,12.54,-1,-1,0.0 116 | CoCO3,-1.0,1,Co,C,O,2,4,-2,0.9,0.16,1.4,1.04,11.26,1,-1,0.0 117 | MgCO3,-1.0,1,Mg,C,O,2,4,-2,0.89,0.16,1.4,1.04,11.23,1,-1,0.0 118 | PbCO3,-1.0,1,Pb,C,O,2,4,-2,1.49,0.16,1.4,1.31,13.1,-1,-1,0.0 119 | SrCO3,-1.0,1,Sr,C,O,2,4,-2,1.44,0.16,1.4,1.29,12.94,-1,-1,0.0 120 | CsCaCl3,1.0,1,Cs,Ca,Cl,1,2,-1,1.88,1.0,1.81,0.93,3.79,1,1,0.71 121 | CaCuCl3,-1.0,1,Ca,Cu,Cl,2,1,-1,1.34,0.77,1.81,0.86,4.63,1,-1,0.33 122 | KCaCl3,1.0,1,K,Ca,Cl,1,2,-1,1.64,1.0,1.81,0.87,4.13,1,1,0.56 123 | NaCaCl3,-1.0,1,Na,Ca,Cl,1,2,-1,1.39,1.0,1.81,0.81,5.03,-1,-1,0.21 124 | RbCaCl3,1.0,1,Rb,Ca,Cl,1,2,-1,1.72,1.0,1.81,0.89,3.98,1,1,0.63 125 | CsCaF3,1.0,1,Cs,Ca,F,1,2,-1,1.88,1.0,1.33,0.97,3.31,1,1,0.84 126 | KCaF3,1.0,1,K,Ca,F,1,2,-1,1.64,1.0,1.33,0.9,3.65,1,1,0.76 127 | CaLiF3,-1.0,1,Ca,Li,F,2,1,-1,1.34,0.76,1.33,0.9,3.97,1,1,0.63 128 | NaCaF3,-1.0,1,Na,Ca,F,1,2,-1,1.39,1.0,1.33,0.83,4.55,1,-1,0.36 129 | CaHfO3,1.0,1,Ca,Hf,O,2,4,-2,1.34,0.71,1.4,0.92,3.91,1,1,0.66 130 | KCaI3,-1.0,1,K,Ca,I,1,2,-1,1.64,1.0,2.2,0.85,4.52,1,-1,0.38 131 | NaCaI3,-1.0,1,Na,Ca,I,1,2,-1,1.39,1.0,2.2,0.79,5.42,-1,-1,0.14 132 | RbCaI3,-1.0,1,Rb,Ca,I,1,2,-1,1.72,1.0,2.2,0.87,4.37,1,-1,0.44 133 | CaIrO3,1.0,1,Ca,Ir,O,2,4,-2,1.34,0.62,1.4,0.96,3.86,1,1,0.68 134 | CaNbO3,1.0,1,Ca,Nb,O,2,4,-2,1.34,0.68,1.4,0.93,3.87,1,1,0.67 135 | CaPbO3,1.0,1,Ca,Pb,O,2,4,-2,1.34,0.78,1.4,0.89,4.12,1,1,0.56 136 | CaRuO3,1.0,1,Ca,Ru,O,2,4,-2,1.34,0.62,1.4,0.96,3.87,1,1,0.68 137 | CaSiO3,1.0,1,Ca,Si,O,2,4,-2,1.34,0.4,1.4,1.08,5.04,-1,-1,0.21 138 | CaSnO3,1.0,1,Ca,Sn,O,2,4,-2,1.34,0.69,1.4,0.93,3.88,1,1,0.67 139 | CaTiO3,1.0,1,Ca,Ti,O,2,4,-2,1.34,0.6,1.4,0.97,3.88,1,1,0.67 140 | CaUO3,1.0,1,Ca,U,O,2,4,-2,1.34,0.89,1.4,0.85,4.93,1,-1,0.24 141 | CaVO3,1.0,1,Ca,V,O,2,4,-2,1.34,0.58,1.4,0.98,3.93,1,1,0.65 142 | CaZrO3,1.0,1,Ca,Zr,O,2,4,-2,1.34,0.72,1.4,0.91,3.94,1,1,0.65 143 | CdCuCl3,-1.0,1,Cd,Cu,Cl,2,1,-1,1.31,0.77,1.81,0.86,4.75,1,-1,0.29 144 | KCdCl3,1.0,1,K,Cd,Cl,1,2,-1,1.64,0.95,1.81,0.88,4.07,1,1,0.59 145 | NaCdCl3,-1.0,1,Na,Cd,Cl,1,2,-1,1.39,0.95,1.81,0.82,4.75,-1,-1,0.29 146 | RbCdCl3,1.0,1,Rb,Cd,Cl,1,2,-1,1.72,0.95,1.81,0.9,3.96,1,1,0.64 147 | TlCdCl3,1.0,1,Tl,Cd,Cl,1,2,-1,1.7,0.95,1.81,0.9,3.98,1,1,0.63 148 | CsCdF3,1.0,1,Cs,Cd,F,1,2,-1,1.88,0.95,1.33,1.0,3.3,1,1,0.84 149 | KCdF3,1.0,1,K,Cd,F,1,2,-1,1.64,0.95,1.33,0.92,3.56,1,1,0.78 150 | NaCdF3,-1.0,1,Na,Cd,F,1,2,-1,1.39,0.95,1.33,0.84,4.24,1,-1,0.5 151 | RbCdF3,1.0,1,Rb,Cd,F,1,2,-1,1.72,0.95,1.33,0.95,3.45,1,1,0.81 152 | TlCdF3,1.0,1,Tl,Cd,F,1,2,-1,1.7,0.95,1.33,0.94,3.48,1,1,0.8 153 | CdGeO3,1.0,1,Cd,Ge,O,2,4,-2,1.31,0.53,1.4,0.99,4.1,1,1,0.57 154 | KCdI3,-1.0,1,K,Cd,I,1,2,-1,1.64,0.95,2.2,0.86,4.48,1,-1,0.4 155 | NaCdI3,-1.0,1,Na,Cd,I,1,2,-1,1.39,0.95,2.2,0.81,5.16,-1,-1,0.18 156 | TlCdI3,-1.0,1,Tl,Cd,I,1,2,-1,1.7,0.95,2.2,0.88,4.39,1,-1,0.43 157 | CdPbO3,-1.0,1,Cd,Pb,O,2,4,-2,1.31,0.78,1.4,0.88,4.25,1,-1,0.5 158 | CdSO3,-1.0,1,Cd,S,O,2,4,-2,1.31,0.37,1.4,1.08,5.38,-1,-1,0.14 159 | CdSeO3,-1.0,1,Cd,Se,O,2,4,-2,1.31,0.5,1.4,1.01,4.24,1,-1,0.5 160 | TeCdO3,-1.0,1,Te,Cd,O,4,2,-2,0.97,0.95,1.4,0.71,181.51,-1,-1,0.0 161 | CeCrO3,1.0,1,Ce,Cr,O,4,2,-2,1.14,0.8,1.4,0.82,1.84,-1,1,0.97 162 | CeFeO3,1.0,1,Ce,Fe,O,4,2,-2,1.14,0.78,1.4,0.82,1.2,-1,1,0.99 163 | CeLuO3,1.0,1,Ce,Lu,O,3,3,-2,1.34,0.86,1.4,0.86,3.18,1,1,0.87 164 | SrCeO3,1.0,1,Sr,Ce,O,2,4,-2,1.44,0.87,1.4,0.88,4.18,1,1,0.53 165 | CeVO3,1.0,1,Ce,V,O,4,2,-2,1.14,0.79,1.4,0.82,1.51,-1,1,0.98 166 | KClO3,-1.0,1,K,Cl,O,1,5,-2,1.64,0.12,1.4,1.41,15.89,-1,-1,0.0 167 | RbClO3,-1.0,1,Rb,Cl,O,1,5,-2,1.72,0.12,1.4,1.45,16.05,-1,-1,0.0 168 | RbCoCl3,-1.0,1,Rb,Co,Cl,1,2,-1,1.72,0.74,1.81,0.98,4.19,1,-1,0.53 169 | CsCrCl3,-1.0,1,Cs,Cr,Cl,1,2,-1,1.88,0.8,1.81,1.0,4.01,1,1,0.61 170 | CrLiCl3,-1.0,1,Cr,Li,Cl,2,1,-1,0.8,0.76,1.81,0.72,39.43,-1,-1,0.0 171 | NaCrCl3,-1.0,1,Na,Cr,Cl,1,2,-1,1.39,0.8,1.81,0.87,4.41,1,-1,0.43 172 | RbCrCl3,1.0,1,Rb,Cr,Cl,1,2,-1,1.72,0.8,1.81,0.96,4.07,1,1,0.58 173 | CsEuCl3,1.0,1,Cs,Eu,Cl,1,2,-1,1.88,1.17,1.81,0.88,3.94,1,1,0.65 174 | CsFeCl3,-1.0,1,Cs,Fe,Cl,1,2,-1,1.88,0.78,1.81,1.01,4.06,1,1,0.59 175 | CsGeCl3,-1.0,1,Cs,Ge,Cl,1,2,-1,1.88,0.73,1.81,1.03,4.2,1,-1,0.52 176 | CsHgCl3,1.0,1,Cs,Hg,Cl,1,2,-1,1.88,1.02,1.81,0.92,3.79,1,1,0.71 177 | CsMnCl3,1.0,1,Cs,Mn,Cl,1,2,-1,1.88,0.83,1.81,0.99,3.95,1,1,0.64 178 | CsNiCl3,-1.0,1,Cs,Ni,Cl,1,2,-1,1.88,0.69,1.81,1.04,4.34,1,-1,0.46 179 | CsSnCl3,1.0,1,Cs,Sn,Cl,1,2,-1,1.88,1.15,1.81,0.88,3.9,1,1,0.66 180 | CsSrCl3,1.0,1,Cs,Sr,Cl,1,2,-1,1.88,1.18,1.81,0.87,3.95,1,1,0.64 181 | CsVCl3,-1.0,1,Cs,V,Cl,1,2,-1,1.88,0.79,1.81,1.0,4.04,1,1,0.6 182 | RbEuCl3,-1.0,1,Rb,Eu,Cl,1,2,-1,1.72,1.17,1.81,0.84,4.36,1,-1,0.45 183 | KFeCl3,1.0,1,K,Fe,Cl,1,2,-1,1.64,0.78,1.81,0.94,4.15,1,1,0.55 184 | RbFeCl3,-1.0,1,Rb,Fe,Cl,1,2,-1,1.72,0.78,1.81,0.96,4.11,1,1,0.57 185 | KMnCl3,1.0,1,K,Mn,Cl,1,2,-1,1.64,0.83,1.81,0.92,4.08,1,1,0.58 186 | KNiCl3,-1.0,1,K,Ni,Cl,1,2,-1,1.64,0.69,1.81,0.98,4.37,1,-1,0.44 187 | KSmCl3,-1.0,1,K,Sm,Cl,1,2,-1,1.64,1.22,1.81,0.81,5.03,-1,-1,0.21 188 | LiMgCl3,-1.0,1,Li,Mg,Cl,1,2,-1,0.92,0.72,1.81,0.76,6.73,-1,-1,0.03 189 | LiNiCl3,-1.0,1,Li,Ni,Cl,1,2,-1,0.92,0.69,1.81,0.77,6.26,-1,-1,0.05 190 | PbLiCl3,-1.0,1,Pb,Li,Cl,2,1,-1,1.49,0.76,1.81,0.91,4.21,1,-1,0.52 191 | VLiCl3,-1.0,1,V,Li,Cl,2,1,-1,0.79,0.76,1.81,0.72,52.08,-1,-1,0.0 192 | NaMnCl3,-1.0,1,Na,Mn,Cl,1,2,-1,1.39,0.83,1.81,0.86,4.43,1,-1,0.42 193 | RbMnCl3,1.0,1,Rb,Mn,Cl,1,2,-1,1.72,0.83,1.81,0.95,4.02,1,1,0.61 194 | NaNiCl3,-1.0,1,Na,Ni,Cl,1,2,-1,1.39,0.69,1.81,0.91,4.5,1,-1,0.39 195 | SnNaCl3,-1.0,1,Sn,Na,Cl,2,1,-1,1.15,1.02,1.81,0.74,16.57,-1,-1,0.0 196 | NaZnCl3,-1.0,1,Na,Zn,Cl,1,2,-1,1.39,0.74,1.81,0.89,4.43,1,-1,0.42 197 | TlPbCl3,-1.0,1,Tl,Pb,Cl,1,2,-1,1.7,1.19,1.81,0.83,4.53,1,-1,0.37 198 | RbSrCl3,-1.0,1,Rb,Sr,Cl,1,2,-1,1.72,1.18,1.81,0.83,4.4,1,-1,0.43 199 | TlSrCl3,-1.0,1,Tl,Sr,Cl,1,2,-1,1.7,1.18,1.81,0.83,4.48,1,-1,0.39 200 | TlZnCl3,-1.0,1,Tl,Zn,Cl,1,2,-1,1.7,0.74,1.81,0.97,4.21,1,-1,0.52 201 | DyCoO3,1.0,1,Dy,Co,O,3,3,-2,1.08,0.61,1.4,0.87,2.57,1,1,0.94 202 | KCoF3,1.0,1,K,Co,F,1,2,-1,1.64,0.74,1.33,1.01,3.58,1,1,0.78 203 | RbCoF3,1.0,1,Rb,Co,F,1,2,-1,1.72,0.74,1.33,1.04,3.54,1,1,0.79 204 | TlCoF3,1.0,1,Tl,Co,F,1,2,-1,1.7,0.74,1.33,1.03,3.55,1,1,0.78 205 | GdCoO3,1.0,1,Gd,Co,O,3,3,-2,1.11,0.61,1.4,0.88,2.43,1,1,0.95 206 | HoCoO3,1.0,1,Ho,Co,O,3,3,-2,1.12,0.61,1.4,0.89,2.36,1,1,0.95 207 | KCoI3,-1.0,1,K,Co,I,1,2,-1,1.64,0.74,2.2,0.92,4.74,1,-1,0.29 208 | LaCoO3,1.0,1,La,Co,O,3,3,-2,1.36,0.61,1.4,0.97,1.64,1,1,0.98 209 | CoMnO3,-1.0,1,Co,Mn,O,2,4,-2,0.9,0.53,1.4,0.84,5.06,1,-1,0.21 210 | NdCoO3,1.0,1,Nd,Co,O,3,3,-2,1.27,0.61,1.4,0.94,1.81,1,1,0.97 211 | PrCoO3,1.0,1,Pr,Co,O,3,3,-2,1.18,0.61,1.4,0.91,2.09,1,1,0.96 212 | CoSeO3,-1.0,1,Co,Se,O,2,4,-2,0.9,0.5,1.4,0.86,4.92,1,-1,0.24 213 | CoSiO3,-1.0,1,Co,Si,O,2,4,-2,0.9,0.4,1.4,0.9,5.05,1,-1,0.21 214 | SrCoO3,1.0,1,Sr,Co,O,2,4,-2,1.44,0.53,1.4,1.04,4.08,1,1,0.58 215 | TeCoO3,-1.0,1,Te,Co,O,4,2,-2,0.97,0.74,1.4,0.78,5.61,-1,-1,0.11 216 | CoTiO3,-1.0,1,Co,Ti,O,2,4,-2,0.9,0.6,1.4,0.81,5.81,-1,-1,0.09 217 | YCoO3,1.0,1,Y,Co,O,3,3,-2,1.08,0.61,1.4,0.87,2.63,1,1,0.93 218 | DyCrO3,1.0,1,Dy,Cr,O,3,3,-2,1.08,0.62,1.4,0.87,2.61,1,1,0.93 219 | ErCrO3,1.0,1,Er,Cr,O,3,3,-2,1.06,0.62,1.4,0.86,2.76,1,1,0.92 220 | EuCrO3,1.0,1,Eu,Cr,O,3,3,-2,1.12,0.62,1.4,0.88,2.39,1,1,0.95 221 | KCrF3,1.0,1,K,Cr,F,1,2,-1,1.64,0.8,1.33,0.99,3.52,1,1,0.79 222 | NaCrF3,1.0,1,Na,Cr,F,1,2,-1,1.39,0.8,1.33,0.9,3.81,1,1,0.7 223 | RbCrF3,1.0,1,Rb,Cr,F,1,2,-1,1.72,0.8,1.33,1.01,3.47,1,1,0.81 224 | GdCrO3,1.0,1,Gd,Cr,O,3,3,-2,1.11,0.62,1.4,0.88,2.46,1,1,0.94 225 | LaCrO3,1.0,1,La,Cr,O,3,3,-2,1.36,0.62,1.4,0.97,1.64,1,1,0.98 226 | LuCrO3,1.0,1,Lu,Cr,O,3,3,-2,1.03,0.62,1.4,0.85,3.0,1,1,0.89 227 | CrMoO3,-1.0,1,Cr,Mo,O,2,4,-2,0.8,0.65,1.4,0.76,10.01,-1,-1,0.0 228 | NdCrO3,1.0,1,Nd,Cr,O,3,3,-2,1.27,0.62,1.4,0.94,1.82,1,1,0.97 229 | PrCrO3,1.0,1,Pr,Cr,O,3,3,-2,1.18,0.62,1.4,0.91,2.11,1,1,0.96 230 | PuCrO3,1.0,1,Pu,Cr,O,4,2,-2,0.96,0.8,1.4,0.76,12.08,-1,-1,0.0 231 | ScCrO3,1.0,1,Sc,Cr,O,3,3,-2,0.87,0.62,1.4,0.8,5.51,-1,-1,0.12 232 | TmCrO3,1.0,1,Tm,Cr,O,3,3,-2,1.05,0.62,1.4,0.86,2.84,1,1,0.91 233 | VCrO3,-1.0,1,V,Cr,O,3,3,-2,0.64,0.62,1.4,0.72,71.63,-1,-1,0.0 234 | YCrO3,1.0,1,Y,Cr,O,3,3,-2,1.08,0.62,1.4,0.87,2.67,1,1,0.93 235 | YbCrO3,1.0,1,Yb,Cr,O,3,3,-2,1.04,0.62,1.4,0.86,2.92,1,1,0.9 236 | CsDyI3,1.0,1,Cs,Dy,I,1,2,-1,1.88,1.07,2.2,0.88,4.17,1,1,0.54 237 | CsMgF3,1.0,1,Cs,Mg,F,1,2,-1,1.88,0.72,1.33,1.11,3.57,-1,1,0.78 238 | CsMnF3,-1.0,1,Cs,Mn,F,1,2,-1,1.88,0.83,1.33,1.05,3.37,1,1,0.83 239 | CsGeI3,-1.0,1,Cs,Ge,I,1,2,-1,1.88,0.73,2.2,0.98,4.74,1,-1,0.3 240 | CsMgI3,-1.0,1,Cs,Mg,I,1,2,-1,1.88,0.72,2.2,0.99,4.78,1,-1,0.28 241 | CsMnI3,-1.0,1,Cs,Mn,I,1,2,-1,1.88,0.83,2.2,0.95,4.42,1,-1,0.42 242 | CsNiI3,-1.0,1,Cs,Ni,I,1,2,-1,1.88,0.69,2.2,1.0,4.91,1,-1,0.24 243 | CsPbI3,1.0,1,Cs,Pb,I,1,2,-1,1.88,1.19,2.2,0.85,4.3,1,-1,0.47 244 | CsSnI3,1.0,1,Cs,Sn,I,1,2,-1,1.88,1.15,2.2,0.86,4.24,1,-1,0.5 245 | CsSrI3,-1.0,1,Cs,Sr,I,1,2,-1,1.88,1.18,2.2,0.85,4.29,1,-1,0.48 246 | CsTiI3,-1.0,1,Cs,Ti,I,1,2,-1,1.88,0.86,2.2,0.94,4.35,1,-1,0.45 247 | CsTmI3,1.0,1,Cs,Tm,I,1,2,-1,1.88,1.03,2.2,0.89,4.17,1,1,0.54 248 | CsVI3,-1.0,1,Cs,V,I,1,2,-1,1.88,0.79,2.2,0.96,4.53,1,-1,0.37 249 | CsYbI3,1.0,1,Cs,Yb,I,1,2,-1,1.88,1.02,2.2,0.9,4.17,1,1,0.54 250 | CsNbO3,-1.0,1,Cs,Nb,O,1,5,-2,1.88,0.64,1.4,1.14,3.91,-1,1,0.66 251 | CsVO3,-1.0,1,Cs,V,O,1,5,-2,1.88,0.54,1.4,1.2,4.38,-1,-1,0.44 252 | KCuF3,1.0,1,K,Cu,F,1,2,-1,1.64,0.73,1.33,1.02,3.6,1,1,0.77 253 | RbCuF3,1.0,1,Rb,Cu,F,1,2,-1,1.72,0.73,1.33,1.05,3.57,1,1,0.78 254 | TlCuF3,1.0,1,Tl,Cu,F,1,2,-1,1.7,0.73,1.33,1.04,3.58,1,1,0.78 255 | CuGeO3,-1.0,1,Cu,Ge,O,2,4,-2,0.73,0.53,1.4,0.78,7.25,-1,-1,0.02 256 | LaCuO3,1.0,1,La,Cu,O,3,3,-2,1.36,0.54,1.4,1.01,1.77,1,1,0.97 257 | CuNbO3,-1.0,1,Cu,Nb,O,1,5,-2,0.77,0.64,1.4,0.75,7.69,-1,-1,0.01 258 | CuVO3,-1.0,1,Cu,V,O,1,5,-2,0.77,0.54,1.4,0.79,5.61,-1,-1,0.11 259 | DyFeO3,1.0,1,Dy,Fe,O,3,3,-2,1.08,0.64,1.4,0.86,2.89,1,1,0.91 260 | RbDyI3,1.0,1,Rb,Dy,I,1,2,-1,1.72,1.07,2.2,0.85,4.44,1,-1,0.41 261 | DyMnO3,1.0,1,Dy,Mn,O,3,3,-2,1.08,0.64,1.4,0.86,2.89,1,1,0.91 262 | DyNiO3,1.0,1,Dy,Ni,O,3,3,-2,1.08,0.6,1.4,0.88,2.5,1,1,0.94 263 | DyRhO3,1.0,1,Dy,Rh,O,3,3,-2,1.08,0.66,1.4,0.85,3.12,1,1,0.88 264 | DyTiO3,1.0,1,Dy,Ti,O,3,3,-2,1.08,0.67,1.4,0.85,3.19,1,1,0.86 265 | DyVO3,1.0,1,Dy,V,O,3,3,-2,1.08,0.64,1.4,0.86,2.84,1,1,0.91 266 | ErFeO3,1.0,1,Er,Fe,O,3,3,-2,1.06,0.64,1.4,0.85,3.08,1,1,0.88 267 | ErMnO3,1.0,1,Er,Mn,O,3,3,-2,1.06,0.64,1.4,0.85,3.08,1,1,0.88 268 | ErNiO3,1.0,1,Er,Ni,O,3,3,-2,1.06,0.6,1.4,0.87,2.63,1,1,0.93 269 | ErTiO3,1.0,1,Er,Ti,O,3,3,-2,1.06,0.67,1.4,0.84,3.41,1,1,0.82 270 | ErVO3,1.0,1,Er,V,O,3,3,-2,1.06,0.64,1.4,0.85,3.02,1,1,0.89 271 | EuFeO3,1.0,1,Eu,Fe,O,3,3,-2,1.12,0.64,1.4,0.87,2.61,1,1,0.93 272 | EuGaO3,1.0,1,Eu,Ga,O,3,3,-2,1.12,0.62,1.4,0.88,2.42,1,1,0.95 273 | EuMnO3,1.0,1,Eu,Mn,O,3,3,-2,1.12,0.64,1.4,0.87,2.61,1,1,0.93 274 | EuNiO3,1.0,1,Eu,Ni,O,3,3,-2,1.12,0.6,1.4,0.89,2.31,1,1,0.95 275 | EuScO3,1.0,1,Eu,Sc,O,3,3,-2,1.12,0.74,1.4,0.83,3.94,1,1,0.64 276 | KFeF3,1.0,1,K,Fe,F,1,2,-1,1.64,0.78,1.33,1.0,3.53,1,1,0.79 277 | NaFeF3,1.0,1,Na,Fe,F,1,2,-1,1.39,0.78,1.33,0.91,3.79,1,1,0.71 278 | TlFeF3,1.0,1,Tl,Fe,F,1,2,-1,1.7,0.78,1.33,1.02,3.5,1,1,0.8 279 | KHgF3,1.0,1,K,Hg,F,1,2,-1,1.64,1.02,1.33,0.89,3.69,1,1,0.74 280 | KMgF3,1.0,1,K,Mg,F,1,2,-1,1.64,0.72,1.33,1.02,3.61,1,1,0.77 281 | KMnF3,1.0,1,K,Mn,F,1,2,-1,1.64,0.83,1.33,0.97,3.5,1,1,0.8 282 | KNiF3,1.0,1,K,Ni,F,1,2,-1,1.64,0.69,1.33,1.04,3.67,1,1,0.75 283 | KVF3,1.0,1,K,V,F,1,2,-1,1.64,0.79,1.33,0.99,3.53,1,1,0.79 284 | KZnF3,1.0,1,K,Zn,F,1,2,-1,1.64,0.74,1.33,1.01,3.58,1,1,0.78 285 | LiMgF3,-1.0,1,Li,Mg,F,1,2,-1,0.92,0.72,1.33,0.78,6.06,-1,-1,0.07 286 | MnLiF3,-1.0,1,Mn,Li,F,2,1,-1,0.96,0.76,1.33,0.77,8.56,-1,-1,0.0 287 | PbLiF3,-1.0,1,Pb,Li,F,2,1,-1,1.49,0.76,1.33,0.95,3.57,1,1,0.78 288 | LiZnF3,-1.0,1,Li,Zn,F,1,2,-1,0.92,0.74,1.33,0.77,6.51,-1,-1,0.04 289 | NaMgF3,1.0,1,Na,Mg,F,1,2,-1,1.39,0.72,1.33,0.94,3.78,1,1,0.71 290 | NaMnF3,1.0,1,Na,Mn,F,1,2,-1,1.39,0.83,1.33,0.89,3.85,1,1,0.68 291 | RbMnF3,1.0,1,Rb,Mn,F,1,2,-1,1.72,0.83,1.33,1.0,3.45,1,1,0.81 292 | TlMnF3,1.0,1,Tl,Mn,F,1,2,-1,1.7,0.83,1.33,0.99,3.46,1,1,0.81 293 | NaNiF3,1.0,1,Na,Ni,F,1,2,-1,1.39,0.69,1.33,0.95,3.8,1,1,0.7 294 | PbNaF3,-1.0,1,Pb,Na,F,2,1,-1,1.49,1.02,1.33,0.85,5.01,1,-1,0.22 295 | NaZnF3,1.0,1,Na,Zn,F,1,2,-1,1.39,0.74,1.33,0.93,3.78,1,1,0.71 296 | RbPbF3,1.0,1,Rb,Pb,F,1,2,-1,1.72,1.19,1.33,0.86,4.04,1,1,0.6 297 | RbSrF3,-1.0,1,Rb,Sr,F,1,2,-1,1.72,1.18,1.33,0.86,4.0,1,1,0.62 298 | RbVF3,1.0,1,Rb,V,F,1,2,-1,1.72,0.79,1.33,1.02,3.48,1,1,0.8 299 | RbZnF3,1.0,1,Rb,Zn,F,1,2,-1,1.72,0.74,1.33,1.04,3.55,1,1,0.78 300 | FeGaO3,-1.0,1,Fe,Ga,O,3,3,-2,0.78,0.62,1.4,0.76,9.7,-1,-1,0.0 301 | GdFeO3,1.0,1,Gd,Fe,O,3,3,-2,1.11,0.64,1.4,0.87,2.7,1,1,0.92 302 | HoFeO3,1.0,1,Ho,Fe,O,3,3,-2,1.12,0.64,1.4,0.87,2.61,1,1,0.93 303 | TlFeI3,-1.0,1,Tl,Fe,I,1,2,-1,1.7,0.78,2.2,0.93,4.62,1,-1,0.34 304 | InFeO3,-1.0,1,In,Fe,O,3,3,-2,0.92,0.64,1.4,0.8,5.22,-1,-1,0.17 305 | LaFeO3,1.0,1,La,Fe,O,3,3,-2,1.36,0.64,1.4,0.95,1.65,1,1,0.98 306 | FeMnO3,-1.0,1,Fe,Mn,O,2,4,-2,0.92,0.53,1.4,0.85,4.94,1,-1,0.24 307 | PrFeO3,1.0,1,Pr,Fe,O,3,3,-2,1.18,0.64,1.4,0.89,2.26,1,1,0.95 308 | FeSO3,-1.0,1,Fe,S,O,2,4,-2,0.92,0.37,1.4,0.93,5.24,1,-1,0.17 309 | FeSiO3,-1.0,1,Fe,Si,O,2,4,-2,0.92,0.4,1.4,0.91,5.02,1,-1,0.21 310 | SmFeO3,1.0,1,Sm,Fe,O,3,3,-2,1.24,0.64,1.4,0.91,1.99,1,1,0.97 311 | TbFeO3,1.0,1,Tb,Fe,O,3,3,-2,1.1,0.64,1.4,0.86,2.79,1,1,0.92 312 | FeTiO3,-1.0,1,Fe,Ti,O,2,4,-2,0.92,0.6,1.4,0.82,5.57,-1,-1,0.12 313 | TmFeO3,1.0,1,Tm,Fe,O,3,3,-2,1.05,0.64,1.4,0.85,3.17,1,1,0.87 314 | YFeO3,1.0,1,Y,Fe,O,3,3,-2,1.08,0.64,1.4,0.86,2.96,1,1,0.9 315 | GdGaO3,1.0,1,Gd,Ga,O,3,3,-2,1.11,0.62,1.4,0.88,2.5,1,1,0.94 316 | InGaO3,-1.0,1,In,Ga,O,3,3,-2,0.92,0.62,1.4,0.81,4.54,-1,-1,0.37 317 | LaGaO3,1.0,1,La,Ga,O,3,3,-2,1.36,0.62,1.4,0.97,1.64,1,1,0.98 318 | NdGaO3,1.0,1,Nd,Ga,O,3,3,-2,1.27,0.62,1.4,0.93,1.83,1,1,0.97 319 | PrGaO3,1.0,1,Pr,Ga,O,3,3,-2,1.18,0.62,1.4,0.9,2.13,1,1,0.96 320 | YGaO3,1.0,1,Y,Ga,O,3,3,-2,1.08,0.62,1.4,0.87,2.71,1,1,0.92 321 | GdMnO3,1.0,1,Gd,Mn,O,3,3,-2,1.11,0.64,1.4,0.87,2.7,1,1,0.92 322 | GdNiO3,1.0,1,Gd,Ni,O,3,3,-2,1.11,0.6,1.4,0.89,2.37,1,1,0.95 323 | GdScO3,1.0,1,Gd,Sc,O,3,3,-2,1.11,0.74,1.4,0.83,4.14,1,1,0.55 324 | GdTiO3,1.0,1,Gd,Ti,O,3,3,-2,1.11,0.67,1.4,0.86,2.96,1,1,0.9 325 | GdVO3,1.0,1,Gd,V,O,3,3,-2,1.11,0.64,1.4,0.87,2.66,1,1,0.93 326 | RbGeI3,-1.0,1,Rb,Ge,I,1,2,-1,1.72,0.73,2.2,0.95,4.76,1,-1,0.29 327 | TlGeI3,-1.0,1,Tl,Ge,I,1,2,-1,1.7,0.73,2.2,0.94,4.77,1,-1,0.29 328 | MgGeO3,-1.0,1,Mg,Ge,O,2,4,-2,0.89,0.53,1.4,0.84,5.12,1,-1,0.19 329 | GeMnO3,-1.0,1,Ge,Mn,O,2,4,-2,0.73,0.53,1.4,0.78,7.25,-1,-1,0.02 330 | PbGeO3,1.0,1,Pb,Ge,O,2,4,-2,1.49,0.53,1.4,1.06,4.08,1,1,0.58 331 | SrGeO3,1.0,1,Sr,Ge,O,2,4,-2,1.44,0.53,1.4,1.04,4.08,1,1,0.58 332 | PbHfO3,1.0,1,Pb,Hf,O,2,4,-2,1.49,0.71,1.4,0.97,3.63,1,1,0.76 333 | SrHfO3,1.0,1,Sr,Hf,O,2,4,-2,1.44,0.71,1.4,0.95,3.71,1,1,0.73 334 | NaHgI3,-1.0,1,Na,Hg,I,1,2,-1,1.39,1.02,2.2,0.79,5.56,-1,-1,0.12 335 | HgSeO3,-1.0,1,Hg,Se,O,2,4,-2,1.14,0.5,1.4,0.95,4.33,1,-1,0.46 336 | HgTiO3,1.0,1,Hg,Ti,O,2,4,-2,1.14,0.6,1.4,0.9,4.26,1,-1,0.49 337 | HoNiO3,1.0,1,Ho,Ni,O,3,3,-2,1.12,0.6,1.4,0.89,2.31,1,1,0.95 338 | HoScO3,1.0,1,Ho,Sc,O,3,3,-2,1.12,0.74,1.4,0.83,3.94,1,1,0.64 339 | HoTiO3,1.0,1,Ho,Ti,O,3,3,-2,1.12,0.67,1.4,0.86,2.85,1,1,0.91 340 | ILiO3,-1.0,1,I,Li,O,5,1,-2,0.95,0.76,1.4,0.77,4.85,-1,-1,0.26 341 | NaIO3,1.0,1,Na,I,O,1,5,-2,1.39,0.95,1.4,0.84,4.32,1,-1,0.47 342 | TlIO3,1.0,1,Tl,I,O,1,5,-2,1.7,0.95,1.4,0.93,3.55,1,1,0.78 343 | KMgI3,-1.0,1,K,Mg,I,1,2,-1,1.64,0.72,2.2,0.93,4.82,1,-1,0.27 344 | KMnI3,-1.0,1,K,Mn,I,1,2,-1,1.64,0.83,2.2,0.9,4.55,1,-1,0.36 345 | KTiI3,-1.0,1,K,Ti,I,1,2,-1,1.64,0.86,2.2,0.89,4.51,1,-1,0.38 346 | KTmI3,-1.0,1,K,Tm,I,1,2,-1,1.64,1.03,2.2,0.84,4.56,1,-1,0.36 347 | LiMgI3,-1.0,1,Li,Mg,I,1,2,-1,0.92,0.72,2.2,0.76,7.27,-1,-1,0.02 348 | NaMgI3,-1.0,1,Na,Mg,I,1,2,-1,1.39,0.72,2.2,0.87,4.99,1,-1,0.22 349 | RbMgI3,-1.0,1,Rb,Mg,I,1,2,-1,1.72,0.72,2.2,0.95,4.8,1,-1,0.28 350 | RbMnI3,-1.0,1,Rb,Mn,I,1,2,-1,1.72,0.83,2.2,0.91,4.49,1,-1,0.39 351 | TlMnI3,-1.0,1,Tl,Mn,I,1,2,-1,1.7,0.83,2.2,0.91,4.51,1,-1,0.38 352 | TlPbI3,-1.0,1,Tl,Pb,I,1,2,-1,1.7,1.19,2.2,0.81,4.85,-1,-1,0.26 353 | RbSnI3,-1.0,1,Rb,Sn,I,1,2,-1,1.72,1.15,2.2,0.83,4.63,1,-1,0.33 354 | RbTiI3,-1.0,1,Rb,Ti,I,1,2,-1,1.72,0.86,2.2,0.91,4.44,1,-1,0.41 355 | RbTmI3,1.0,1,Rb,Tm,I,1,2,-1,1.72,1.03,2.2,0.86,4.39,1,-1,0.43 356 | RbVI3,-1.0,1,Rb,V,I,1,2,-1,1.72,0.79,2.2,0.93,4.58,1,-1,0.35 357 | RbYbI3,-1.0,1,Rb,Yb,I,1,2,-1,1.72,1.02,2.2,0.86,4.38,1,-1,0.44 358 | LaInO3,1.0,1,La,In,O,3,3,-2,1.36,0.8,1.4,0.89,2.36,1,1,0.95 359 | InMnO3,-1.0,1,In,Mn,O,3,3,-2,0.92,0.64,1.4,0.8,5.22,-1,-1,0.17 360 | NdInO3,1.0,1,Nd,In,O,3,3,-2,1.27,0.8,1.4,0.86,3.05,1,1,0.89 361 | SmInO3,1.0,1,Sm,In,O,3,3,-2,1.24,0.8,1.4,0.85,3.36,1,1,0.83 362 | SrIrO3,1.0,1,Sr,Ir,O,2,4,-2,1.44,0.62,1.4,0.99,3.76,1,1,0.72 363 | KNO3,-1.0,1,K,N,O,1,5,-2,1.64,0.13,1.4,1.4,14.75,-1,-1,0.0 364 | KNbO3,1.0,1,K,Nb,O,1,5,-2,1.64,0.64,1.4,1.05,3.91,1,1,0.66 365 | KPO3,-1.0,1,K,P,O,1,5,-2,1.64,0.38,1.4,1.21,5.64,-1,-1,0.11 366 | KSbO3,-1.0,1,K,Sb,O,1,5,-2,1.64,0.6,1.4,1.07,4.05,-1,1,0.59 367 | KTaO3,1.0,1,K,Ta,O,1,5,-2,1.64,0.64,1.4,1.05,3.91,1,1,0.66 368 | KUO3,1.0,1,K,U,O,1,5,-2,1.64,0.76,1.4,1.0,3.65,1,1,0.76 369 | KVO3,-1.0,1,K,V,O,1,5,-2,1.64,0.54,1.4,1.11,4.33,-1,-1,0.46 370 | LaLuO3,1.0,1,La,Lu,O,3,3,-2,1.36,0.86,1.4,0.86,2.99,1,1,0.89 371 | LaMnO3,1.0,1,La,Mn,O,3,3,-2,1.36,0.64,1.4,0.95,1.65,1,1,0.98 372 | LaNiO3,1.0,1,La,Ni,O,3,3,-2,1.36,0.6,1.4,0.98,1.64,1,1,0.98 373 | LaScO3,1.0,1,La,Sc,O,3,3,-2,1.36,0.74,1.4,0.91,1.98,1,1,0.97 374 | LaTiO3,1.0,1,La,Ti,O,3,3,-2,1.36,0.67,1.4,0.94,1.69,1,1,0.98 375 | LaTlO3,-1.0,1,La,Tl,O,3,3,-2,1.36,0.88,1.4,0.85,3.31,1,1,0.84 376 | LaTmO3,1.0,1,La,Tm,O,3,3,-2,1.36,0.88,1.4,0.86,3.24,1,1,0.86 377 | LaVO3,1.0,1,La,V,O,3,3,-2,1.36,0.64,1.4,0.96,1.64,1,1,0.98 378 | LaYO3,1.0,1,La,Y,O,3,3,-2,1.36,0.9,1.4,0.85,3.54,1,1,0.79 379 | LaYbO3,1.0,1,La,Yb,O,3,3,-2,1.36,0.87,1.4,0.86,3.08,1,1,0.88 380 | LiNO3,-1.0,1,Li,N,O,1,5,-2,0.92,0.13,1.4,1.07,13.39,-1,-1,0.0 381 | LiNbO3,-1.0,1,Li,Nb,O,1,5,-2,0.92,0.64,1.4,0.8,5.15,-1,-1,0.19 382 | LiPO3,-1.0,1,Li,P,O,1,5,-2,0.92,0.38,1.4,0.92,5.42,1,-1,0.14 383 | LiReO3,-1.0,1,Li,Re,O,1,5,-2,0.92,0.58,1.4,0.83,4.85,1,-1,0.26 384 | LiSbO3,-1.0,1,Li,Sb,O,1,5,-2,0.92,0.6,1.4,0.82,4.92,-1,-1,0.24 385 | LiTaO3,-1.0,1,Li,Ta,O,1,5,-2,0.92,0.64,1.4,0.8,5.15,-1,-1,0.19 386 | LiVO3,-1.0,1,Li,V,O,1,5,-2,0.92,0.54,1.4,0.85,4.79,1,-1,0.28 387 | LuMnO3,1.0,1,Lu,Mn,O,3,3,-2,1.03,0.64,1.4,0.84,3.38,1,1,0.83 388 | PrLuO3,1.0,1,Pr,Lu,O,3,3,-2,1.18,0.86,1.4,0.81,5.7,-1,-1,0.1 389 | LuTiO3,1.0,1,Lu,Ti,O,3,3,-2,1.03,0.67,1.4,0.83,3.79,1,1,0.71 390 | MgSeO3,-1.0,1,Mg,Se,O,2,4,-2,0.89,0.5,1.4,0.85,4.97,1,-1,0.23 391 | MgSiO3,1.0,1,Mg,Si,O,2,4,-2,0.89,0.4,1.4,0.9,5.06,1,-1,0.2 392 | MgVO3,-1.0,1,Mg,V,O,2,4,-2,0.89,0.58,1.4,0.82,5.58,-1,-1,0.12 393 | NdMnO3,1.0,1,Nd,Mn,O,3,3,-2,1.27,0.64,1.4,0.92,1.89,1,1,0.97 394 | NiMnO3,-1.0,1,Ni,Mn,O,2,4,-2,0.69,0.53,1.4,0.77,8.51,-1,-1,0.0 395 | PrMnO3,1.0,1,Pr,Mn,O,3,3,-2,1.18,0.64,1.4,0.89,2.26,1,1,0.95 396 | MnSO3,-1.0,1,Mn,S,O,2,4,-2,0.96,0.37,1.4,0.94,5.23,1,-1,0.17 397 | MnSiO3,-1.0,1,Mn,Si,O,2,4,-2,0.96,0.4,1.4,0.93,4.98,1,-1,0.22 398 | SmMnO3,1.0,1,Sm,Mn,O,3,3,-2,1.24,0.64,1.4,0.91,1.99,1,1,0.97 399 | SnMnO3,-1.0,1,Sn,Mn,O,2,4,-2,1.15,0.53,1.4,0.93,4.24,1,-1,0.5 400 | SrMnO3,1.0,1,Sr,Mn,O,2,4,-2,1.44,0.53,1.4,1.04,4.08,1,1,0.58 401 | TbMnO3,1.0,1,Tb,Mn,O,3,3,-2,1.1,0.64,1.4,0.86,2.79,1,1,0.92 402 | TiMnO3,-1.0,1,Ti,Mn,O,3,3,-2,0.67,0.64,1.4,0.72,75.12,-1,-1,0.0 403 | YbMnO3,1.0,1,Yb,Mn,O,3,3,-2,1.04,0.64,1.4,0.84,3.27,1,1,0.85 404 | SrMoO3,1.0,1,Sr,Mo,O,2,4,-2,1.44,0.65,1.4,0.98,3.72,1,1,0.73 405 | NaNO3,-1.0,1,Na,N,O,1,5,-2,1.39,0.13,1.4,1.29,14.28,-1,-1,0.0 406 | TlNO3,-1.0,1,Tl,N,O,1,5,-2,1.7,0.13,1.4,1.43,14.86,-1,-1,0.0 407 | NaPO3,-1.0,1,Na,P,O,1,5,-2,1.39,0.38,1.4,1.11,5.5,-1,-1,0.13 408 | NaUO3,1.0,1,Na,U,O,1,5,-2,1.39,0.76,1.4,0.91,3.87,1,1,0.67 409 | NaVO3,-1.0,1,Na,V,O,1,5,-2,1.39,0.54,1.4,1.02,4.32,1,-1,0.47 410 | RbNbO3,1.0,1,Rb,Nb,O,1,5,-2,1.72,0.64,1.4,1.08,3.91,-1,1,0.66 411 | SrNbO3,1.0,1,Sr,Nb,O,2,4,-2,1.44,0.68,1.4,0.97,3.7,1,1,0.74 412 | NdNiO3,1.0,1,Nd,Ni,O,3,3,-2,1.27,0.6,1.4,0.94,1.8,1,1,0.97 413 | NdRhO3,1.0,1,Nd,Rh,O,3,3,-2,1.27,0.66,1.4,0.91,1.96,1,1,0.97 414 | NdScO3,1.0,1,Nd,Sc,O,3,3,-2,1.27,0.74,1.4,0.88,2.47,1,1,0.94 415 | NdTiO3,1.0,1,Nd,Ti,O,3,3,-2,1.27,0.67,1.4,0.91,1.98,1,1,0.97 416 | NdVO3,1.0,1,Nd,V,O,3,3,-2,1.27,0.64,1.4,0.93,1.87,1,1,0.97 417 | PrNiO3,1.0,1,Pr,Ni,O,3,3,-2,1.18,0.6,1.4,0.91,2.06,1,1,0.96 418 | NiSeO3,-1.0,1,Ni,Se,O,2,4,-2,0.69,0.5,1.4,0.78,7.37,-1,-1,0.02 419 | NiTiO3,-1.0,1,Ni,Ti,O,2,4,-2,0.69,0.6,1.4,0.74,15.66,-1,-1,0.0 420 | YNiO3,1.0,1,Y,Ni,O,3,3,-2,1.08,0.6,1.4,0.88,2.55,1,1,0.94 421 | RbPO3,-1.0,1,Rb,P,O,1,5,-2,1.72,0.38,1.4,1.24,5.68,-1,-1,0.1 422 | RbPaO3,1.0,1,Rb,Pa,O,1,5,-2,1.72,0.78,1.4,1.01,3.58,1,1,0.77 423 | PbSO3,-1.0,1,Pb,S,O,2,4,-2,1.49,0.37,1.4,1.15,5.57,-1,-1,0.12 424 | PbSeO3,-1.0,1,Pb,Se,O,2,4,-2,1.49,0.5,1.4,1.08,4.26,-1,-1,0.5 425 | PbSiO3,-1.0,1,Pb,Si,O,2,4,-2,1.49,0.4,1.4,1.14,5.17,-1,-1,0.18 426 | SrPbO3,1.0,1,Sr,Pb,O,2,4,-2,1.44,0.78,1.4,0.92,3.8,1,1,0.7 427 | PbTeO3,-1.0,1,Pb,Te,O,2,4,-2,1.49,0.97,1.4,0.86,4.6,1,-1,0.34 428 | PbTiO3,1.0,1,Pb,Ti,O,2,4,-2,1.49,0.6,1.4,1.02,3.78,1,1,0.71 429 | PrRhO3,1.0,1,Pr,Rh,O,3,3,-2,1.18,0.66,1.4,0.88,2.39,1,1,0.95 430 | PrRuO3,1.0,1,Pr,Ru,O,3,3,-2,1.18,0.68,1.4,0.88,2.51,1,1,0.94 431 | PrScO3,1.0,1,Pr,Sc,O,3,3,-2,1.18,0.74,1.4,0.85,3.22,1,1,0.86 432 | PrTiO3,1.0,1,Pr,Ti,O,3,3,-2,1.18,0.67,1.4,0.88,2.43,1,1,0.95 433 | PrVO3,1.0,1,Pr,V,O,3,3,-2,1.18,0.64,1.4,0.89,2.23,1,1,0.96 434 | PrYbO3,1.0,1,Pr,Yb,O,3,3,-2,1.18,0.87,1.4,0.8,5.92,-1,-1,0.08 435 | PuVO3,1.0,1,Pu,V,O,4,2,-2,0.96,0.79,1.4,0.76,10.71,-1,-1,0.0 436 | RbTaO3,1.0,1,Rb,Ta,O,1,5,-2,1.72,0.64,1.4,1.08,3.91,-1,1,0.66 437 | RbVO3,-1.0,1,Rb,V,O,1,5,-2,1.72,0.54,1.4,1.14,4.34,-1,-1,0.46 438 | SmRhO3,1.0,1,Sm,Rh,O,3,3,-2,1.24,0.66,1.4,0.9,2.08,1,1,0.96 439 | TbRhO3,1.0,1,Tb,Rh,O,3,3,-2,1.1,0.66,1.4,0.85,3.01,1,1,0.89 440 | SrRuO3,1.0,1,Sr,Ru,O,2,4,-2,1.44,0.62,1.4,0.99,3.77,1,1,0.71 441 | TlSbO3,-1.0,1,Tl,Sb,O,1,5,-2,1.7,0.6,1.4,1.1,4.05,-1,1,0.59 442 | SmScO3,1.0,1,Sm,Sc,O,3,3,-2,1.24,0.74,1.4,0.87,2.68,1,1,0.93 443 | YScO3,1.0,1,Y,Sc,O,3,3,-2,1.08,0.74,1.4,0.82,4.68,-1,-1,0.31 444 | ZnSeO3,-1.0,1,Zn,Se,O,2,4,-2,0.9,0.5,1.4,0.86,4.92,1,-1,0.24 445 | SrSiO3,-1.0,1,Sr,Si,O,2,4,-2,1.44,0.4,1.4,1.12,5.12,-1,-1,0.19 446 | ZnSiO3,-1.0,1,Zn,Si,O,2,4,-2,0.9,0.4,1.4,0.9,5.05,1,-1,0.21 447 | SmVO3,1.0,1,Sm,V,O,3,3,-2,1.24,0.64,1.4,0.92,1.98,1,1,0.97 448 | SmYO3,-1.0,1,Sm,Y,O,3,3,-2,1.24,0.9,1.4,0.81,5.45,-1,-1,0.13 449 | SrSnO3,1.0,1,Sr,Sn,O,2,4,-2,1.44,0.69,1.4,0.96,3.7,1,1,0.74 450 | ZnSnO3,-1.0,1,Zn,Sn,O,2,4,-2,0.9,0.69,1.4,0.78,7.85,-1,-1,0.01 451 | SrVO3,1.0,1,Sr,V,O,2,4,-2,1.44,0.58,1.4,1.01,3.87,1,1,0.67 452 | SrZrO3,1.0,1,Sr,Zr,O,2,4,-2,1.44,0.72,1.4,0.95,3.72,1,1,0.73 453 | TbTiO3,1.0,1,Tb,Ti,O,3,3,-2,1.1,0.67,1.4,0.85,3.07,1,1,0.88 454 | TeZnO3,-1.0,1,Te,Zn,O,4,2,-2,0.97,0.74,1.4,0.78,5.26,-1,-1,0.16 455 | TmTiO3,1.0,1,Tm,Ti,O,3,3,-2,1.05,0.67,1.4,0.84,3.53,1,1,0.79 456 | YTiO3,1.0,1,Y,Ti,O,3,3,-2,1.08,0.67,1.4,0.85,3.27,1,1,0.85 457 | YbTiO3,1.0,1,Yb,Ti,O,3,3,-2,1.04,0.67,1.4,0.83,3.65,1,1,0.75 458 | ZnTiO3,-1.0,1,Zn,Ti,O,2,4,-2,0.9,0.6,1.4,0.81,5.81,-1,-1,0.09 459 | TlVO3,-1.0,1,Tl,V,O,3,3,-2,0.98,0.64,1.4,0.82,3.97,-1,1,0.63 460 | YVO3,1.0,1,Y,V,O,3,3,-2,1.08,0.64,1.4,0.86,2.9,1,1,0.9 461 | YYbO3,-1.0,1,Y,Yb,O,3,3,-2,1.08,0.87,1.4,0.77,9.98,-1,-1,0.0 462 | AgBiO3,-1.0,-1,Ag,Bi,O,1,5,-2,1.28,0.76,1.4,0.88,4.07,1,1,0.58 463 | DyAlO3,1.0,-1,Dy,Al,O,3,3,-2,1.08,0.54,1.4,0.91,2.23,1,1,0.96 464 | GdAlO3,1.0,-1,Gd,Al,O,3,3,-2,1.11,0.54,1.4,0.92,2.15,1,1,0.96 465 | HoAlO3,1.0,-1,Ho,Al,O,3,3,-2,1.12,0.54,1.4,0.92,2.12,1,1,0.96 466 | ScAlO3,1.0,-1,Sc,Al,O,3,3,-2,0.87,0.54,1.4,0.83,3.65,1,1,0.75 467 | DyBO3,-1.0,-1,Dy,B,O,3,3,-2,1.08,0.27,1.4,1.05,4.85,1,-1,0.26 468 | LuBO3,-1.0,-1,Lu,B,O,3,3,-2,1.03,0.27,1.4,1.03,4.74,1,-1,0.3 469 | SmBO3,-1.0,-1,Sm,B,O,3,3,-2,1.24,0.27,1.4,1.12,5.22,-1,-1,0.17 470 | TiBO3,-1.0,-1,Ti,B,O,3,3,-2,0.67,0.27,1.4,0.88,4.38,1,-1,0.44 471 | BaLiBr3,-1.0,-1,Ba,Li,Br,2,1,-1,1.61,0.76,1.96,0.93,4.22,1,-1,0.51 472 | BaNaF3,-1.0,-1,Ba,Na,F,2,1,-1,1.61,1.02,1.33,0.88,4.22,1,-1,0.51 473 | BaNbO3,1.0,-1,Ba,Nb,O,2,4,-2,1.61,0.68,1.4,1.02,3.55,1,1,0.78 474 | BaNiO3,-1.0,-1,Ba,Ni,O,2,4,-2,1.61,0.48,1.4,1.13,4.46,-1,-1,0.4 475 | BaPuO3,1.0,-1,Ba,Pu,O,2,4,-2,1.61,0.86,1.4,0.94,3.6,1,1,0.77 476 | BaRuO3,-1.0,-1,Ba,Ru,O,2,4,-2,1.61,0.62,1.4,1.05,3.7,1,1,0.74 477 | BaSnO3,1.0,-1,Ba,Sn,O,2,4,-2,1.61,0.69,1.4,1.02,3.54,1,1,0.79 478 | BaTeO3,-1.0,-1,Ba,Te,O,2,4,-2,1.61,0.97,1.4,0.9,3.99,1,1,0.62 479 | BaZrO3,1.0,-1,Ba,Zr,O,2,4,-2,1.61,0.72,1.4,1.0,3.5,1,1,0.8 480 | LiBeCl3,-1.0,-1,Li,Be,Cl,1,2,-1,0.92,0.45,1.81,0.85,5.88,1,-1,0.08 481 | BiFeO3,1.0,-1,Bi,Fe,O,3,3,-2,1.17,0.64,1.4,0.89,2.31,1,1,0.95 482 | CsPbBr3,1.0,-1,Cs,Pb,Br,1,2,-1,1.88,1.19,1.96,0.86,4.1,1,1,0.57 483 | PbLiBr3,-1.0,-1,Pb,Li,Br,2,1,-1,1.49,0.76,1.96,0.9,4.4,1,-1,0.43 484 | CaCO3,-1.0,-1,Ca,C,O,2,4,-2,1.34,0.16,1.4,1.24,12.63,-1,-1,0.0 485 | CuCO3,-1.0,-1,Cu,C,O,2,4,-2,0.73,0.16,1.4,0.97,10.76,1,-1,0.0 486 | MnCO3,-1.0,-1,Mn,C,O,2,4,-2,0.96,0.16,1.4,1.07,11.45,-1,-1,0.0 487 | CaLiCl3,-1.0,-1,Ca,Li,Cl,2,1,-1,1.34,0.76,1.81,0.87,4.6,1,-1,0.35 488 | CaCrO3,1.0,-1,Ca,Cr,O,2,4,-2,1.34,0.55,1.4,0.99,4.02,1,1,0.61 489 | RbCaF3,1.0,-1,Rb,Ca,F,1,2,-1,1.72,1.0,1.33,0.93,3.5,1,1,0.8 490 | CaGeO3,1.0,-1,Ca,Ge,O,2,4,-2,1.34,0.53,1.4,1.0,4.09,1,1,0.57 491 | CaMnO3,1.0,-1,Ca,Mn,O,2,4,-2,1.34,0.53,1.4,1.0,4.09,1,1,0.57 492 | CaMoO3,1.0,-1,Ca,Mo,O,2,4,-2,1.34,0.65,1.4,0.95,3.85,1,1,0.68 493 | CsCdCl3,1.0,-1,Cs,Cd,Cl,1,2,-1,1.88,0.95,1.81,0.95,3.8,1,1,0.7 494 | CdCuI3,-1.0,-1,Cd,Cu,I,2,1,-1,1.31,0.77,2.2,0.84,5.26,1,-1,0.16 495 | CdSnO3,1.0,-1,Cd,Sn,O,2,4,-2,1.31,0.69,1.4,0.92,3.95,1,1,0.64 496 | CdTiO3,1.0,-1,Cd,Ti,O,2,4,-2,1.31,0.6,1.4,0.96,3.92,1,1,0.65 497 | CeGaO3,1.0,-1,Ce,Ga,O,3,3,-2,1.34,0.62,1.4,0.96,1.67,1,1,0.98 498 | CeTiO3,1.0,-1,Ce,Ti,O,4,2,-2,1.14,0.86,1.4,0.79,4.44,-1,-1,0.41 499 | CeTmO3,1.0,-1,Ce,Tm,O,3,3,-2,1.34,0.88,1.4,0.85,3.45,1,1,0.81 500 | CeYbO3,1.0,-1,Ce,Yb,O,3,3,-2,1.34,0.87,1.4,0.85,3.28,1,1,0.85 501 | NaClO3,-1.0,-1,Na,Cl,O,1,5,-2,1.39,0.12,1.4,1.3,15.4,-1,-1,0.0 502 | CsCoCl3,-1.0,-1,Cs,Co,Cl,1,2,-1,1.88,0.74,1.81,1.02,4.16,1,1,0.54 503 | CsMgCl3,-1.0,-1,Cs,Mg,Cl,1,2,-1,1.88,0.72,1.81,1.03,4.23,1,-1,0.51 504 | CsPbCl3,1.0,-1,Cs,Pb,Cl,1,2,-1,1.88,1.19,1.81,0.87,3.98,1,1,0.63 505 | CsZnCl3,-1.0,-1,Cs,Zn,Cl,1,2,-1,1.88,0.74,1.81,1.02,4.17,1,1,0.54 506 | CuZnCl3,-1.0,-1,Cu,Zn,Cl,1,2,-1,0.77,0.74,1.81,0.72,27.63,-1,-1,0.0 507 | TlEuCl3,-1.0,-1,Tl,Eu,Cl,1,2,-1,1.7,1.17,1.81,0.83,4.44,1,-1,0.41 508 | KMgCl3,-1.0,-1,K,Mg,Cl,1,2,-1,1.64,0.72,1.81,0.96,4.28,1,-1,0.48 509 | KSrCl3,-1.0,-1,K,Sr,Cl,1,2,-1,1.64,1.18,1.81,0.82,4.76,-1,-1,0.29 510 | RbMgCl3,-1.0,-1,Rb,Mg,Cl,1,2,-1,1.72,0.72,1.81,0.99,4.26,1,-1,0.5 511 | TlMgCl3,-1.0,-1,Tl,Mg,Cl,1,2,-1,1.7,0.72,1.81,0.98,4.26,1,-1,0.49 512 | TlMnCl3,1.0,-1,Tl,Mn,Cl,1,2,-1,1.7,0.83,1.81,0.94,4.04,1,1,0.6 513 | PbNaCl3,-1.0,-1,Pb,Na,Cl,2,1,-1,1.49,1.02,1.81,0.82,5.48,-1,-1,0.13 514 | SrNaCl3,-1.0,-1,Sr,Na,Cl,2,1,-1,1.44,1.02,1.81,0.81,5.96,-1,-1,0.08 515 | RbZnCl3,-1.0,-1,Rb,Zn,Cl,1,2,-1,1.72,0.74,1.81,0.98,4.2,1,-1,0.52 516 | NaCoF3,1.0,-1,Na,Co,F,1,2,-1,1.39,0.74,1.33,0.93,3.78,1,1,0.71 517 | GeCoO3,-1.0,-1,Ge,Co,O,2,4,-2,0.73,0.53,1.4,0.78,7.25,-1,-1,0.02 518 | SmCoO3,1.0,-1,Sm,Co,O,3,3,-2,1.24,0.61,1.4,0.93,1.89,1,1,0.97 519 | TbCoO3,1.0,-1,Tb,Co,O,3,3,-2,1.1,0.61,1.4,0.88,2.5,1,1,0.94 520 | TlCrF3,1.0,-1,Tl,Cr,F,1,2,-1,1.7,0.8,1.33,1.01,3.48,1,1,0.8 521 | HoCrO3,1.0,-1,Ho,Cr,O,3,3,-2,1.12,0.62,1.4,0.88,2.39,1,1,0.95 522 | SmCrO3,1.0,-1,Sm,Cr,O,3,3,-2,1.24,0.62,1.4,0.93,1.9,1,1,0.97 523 | TbCrO3,1.0,-1,Tb,Cr,O,3,3,-2,1.1,0.62,1.4,0.88,2.54,1,1,0.94 524 | CsHgF3,1.0,-1,Cs,Hg,F,1,2,-1,1.88,1.02,1.33,0.97,3.32,1,1,0.84 525 | CsPbF3,1.0,-1,Cs,Pb,F,1,2,-1,1.88,1.19,1.33,0.9,3.57,1,1,0.78 526 | CsSrF3,1.0,-1,Cs,Sr,F,1,2,-1,1.88,1.18,1.33,0.9,3.55,1,1,0.79 527 | CsIO3,1.0,-1,Cs,I,O,1,5,-2,1.88,0.95,1.4,0.99,3.37,1,1,0.83 528 | NaCuF3,1.0,-1,Na,Cu,F,1,2,-1,1.39,0.73,1.33,0.93,3.78,1,1,0.71 529 | CuSeO3,-1.0,-1,Cu,Se,O,2,4,-2,0.73,0.5,1.4,0.79,6.52,-1,-1,0.04 530 | CuSiO3,-1.0,-1,Cu,Si,O,2,4,-2,0.73,0.4,1.4,0.84,5.57,1,-1,0.12 531 | TeCuO3,-1.0,-1,Te,Cu,O,4,2,-2,0.97,0.73,1.4,0.79,4.62,-1,-1,0.34 532 | DyScO3,1.0,-1,Dy,Sc,O,3,3,-2,1.08,0.74,1.4,0.82,4.54,-1,-1,0.37 533 | LaErO3,1.0,-1,La,Er,O,3,3,-2,1.36,0.89,1.4,0.85,3.38,1,1,0.83 534 | ErRhO3,1.0,-1,Er,Rh,O,3,3,-2,1.06,0.66,1.4,0.84,3.34,1,1,0.84 535 | EuRhO3,1.0,-1,Eu,Rh,O,3,3,-2,1.12,0.66,1.4,0.86,2.8,1,1,0.92 536 | EuTiO3,1.0,-1,Eu,Ti,O,3,3,-2,1.12,0.67,1.4,0.86,2.85,1,1,0.91 537 | RbFeF3,1.0,-1,Rb,Fe,F,1,2,-1,1.72,0.78,1.33,1.02,3.49,1,1,0.8 538 | RbHgF3,1.0,-1,Rb,Hg,F,1,2,-1,1.72,1.02,1.33,0.92,3.53,1,1,0.79 539 | NaVF3,1.0,-1,Na,V,F,1,2,-1,1.39,0.79,1.33,0.91,3.8,1,1,0.7 540 | LuFeO3,1.0,-1,Lu,Fe,O,3,3,-2,1.03,0.64,1.4,0.84,3.38,1,1,0.83 541 | NdFeO3,1.0,-1,Nd,Fe,O,3,3,-2,1.27,0.64,1.4,0.92,1.89,1,1,0.97 542 | YbFeO3,1.0,-1,Yb,Fe,O,3,3,-2,1.04,0.64,1.4,0.84,3.27,1,1,0.85 543 | GdRhO3,1.0,-1,Gd,Rh,O,3,3,-2,1.11,0.66,1.4,0.86,2.9,1,1,0.9 544 | ZnGeO3,-1.0,-1,Zn,Ge,O,2,4,-2,0.9,0.53,1.4,0.84,5.06,1,-1,0.21 545 | KHgI3,-1.0,-1,K,Hg,I,1,2,-1,1.64,1.02,2.2,0.84,4.54,1,-1,0.37 546 | HgTeO3,-1.0,-1,Hg,Te,O,2,4,-2,1.14,0.97,1.4,0.76,12.0,-1,-1,0.0 547 | LaHoO3,1.0,-1,La,Ho,O,3,3,-2,1.36,0.9,1.4,0.85,3.55,1,1,0.78 548 | HoMnO3,1.0,-1,Ho,Mn,O,3,3,-2,1.12,0.64,1.4,0.87,2.61,1,1,0.93 549 | HoRhO3,1.0,-1,Ho,Rh,O,3,3,-2,1.12,0.66,1.4,0.86,2.8,1,1,0.92 550 | KIO3,1.0,-1,K,I,O,1,5,-2,1.64,0.95,1.4,0.91,3.64,1,1,0.76 551 | RbIO3,1.0,-1,Rb,I,O,1,5,-2,1.72,0.95,1.4,0.94,3.52,1,1,0.79 552 | MnLiI3,-1.0,-1,Mn,Li,I,2,1,-1,0.96,0.76,2.2,0.75,9.71,-1,-1,0.0 553 | RbPbI3,-1.0,-1,Rb,Pb,I,1,2,-1,1.72,1.19,2.2,0.82,4.77,-1,-1,0.28 554 | YInO3,-1.0,-1,Y,In,O,3,3,-2,1.08,0.8,1.4,0.8,6.39,-1,-1,0.05 555 | KPaO3,1.0,-1,K,Pa,O,1,5,-2,1.64,0.78,1.4,0.99,3.62,1,1,0.76 556 | LaRhO3,1.0,-1,La,Rh,O,3,3,-2,1.36,0.66,1.4,0.95,1.68,1,1,0.98 557 | LaRuO3,1.0,-1,La,Ru,O,3,3,-2,1.36,0.68,1.4,0.94,1.71,1,1,0.98 558 | MgTiO3,-1.0,-1,Mg,Ti,O,2,4,-2,0.89,0.6,1.4,0.81,5.94,-1,-1,0.08 559 | MnSeO3,-1.0,-1,Mn,Se,O,2,4,-2,0.96,0.5,1.4,0.88,4.69,1,-1,0.31 560 | YMnO3,1.0,-1,Y,Mn,O,3,3,-2,1.08,0.64,1.4,0.86,2.96,1,1,0.9 561 | RbNO3,-1.0,-1,Rb,N,O,1,5,-2,1.72,0.13,1.4,1.44,14.89,-1,-1,0.0 562 | NaNbO3,1.0,-1,Na,Nb,O,1,5,-2,1.39,0.64,1.4,0.97,3.99,1,1,0.62 563 | NaPaO3,1.0,-1,Na,Pa,O,1,5,-2,1.39,0.78,1.4,0.9,3.88,1,1,0.67 564 | NaSbO3,1.0,-1,Na,Sb,O,1,5,-2,1.39,0.6,1.4,0.99,4.09,1,1,0.58 565 | NaTaO3,1.0,-1,Na,Ta,O,1,5,-2,1.39,0.64,1.4,0.97,3.99,1,1,0.62 566 | NaWO3,1.0,-1,Na,W,O,1,5,-2,1.39,0.62,1.4,0.98,4.04,1,1,0.6 567 | SmNiO3,1.0,-1,Sm,Ni,O,3,3,-2,1.24,0.6,1.4,0.93,1.87,1,1,0.97 568 | TlNiO3,1.0,-1,Tl,Ni,O,3,3,-2,0.98,0.6,1.4,0.84,3.32,1,1,0.84 569 | TmNiO3,1.0,-1,Tm,Ni,O,3,3,-2,1.05,0.6,1.4,0.87,2.7,1,1,0.92 570 | YbNiO3,1.0,-1,Yb,Ni,O,3,3,-2,1.04,0.6,1.4,0.86,2.77,1,1,0.92 571 | PbZrO3,1.0,-1,Pb,Zr,O,2,4,-2,1.49,0.72,1.4,0.96,3.64,1,1,0.76 572 | SrPuO3,1.0,-1,Sr,Pu,O,2,4,-2,1.44,0.86,1.4,0.89,4.12,1,1,0.56 573 | RbUO3,1.0,-1,Rb,U,O,1,5,-2,1.72,0.76,1.4,1.02,3.61,1,1,0.77 574 | SmTiO3,1.0,-1,Sm,Ti,O,3,3,-2,1.24,0.67,1.4,0.9,2.11,1,1,0.96 575 | SrTeO3,-1.0,-1,Sr,Te,O,2,4,-2,1.44,0.97,1.4,0.85,4.96,1,-1,0.23 576 | SrTiO3,1.0,-1,Sr,Ti,O,2,4,-2,1.44,0.6,1.4,1.0,3.8,1,1,0.7 577 | YTmO3,-1.0,-1,Y,Tm,O,3,3,-2,1.08,0.88,1.4,0.77,10.9,-1,-1,0.0 -------------------------------------------------------------------------------- /postworkshop.md: -------------------------------------------------------------------------------- 1 | **Overall Deep Learning and ML resources** 2 | 3 | - https://www.deeplearningbook.org/ 4 | 5 | **Molecularly focused ML** 6 | 7 | - Deep Learning for Molecules and Materials (Andrew White) https://dmol.pub/ 8 | -------------------------------------------------------------------------------- /setup.md: -------------------------------------------------------------------------------- 1 | # Day 1 2 | * Log in to [colab.research.google.com](https://colab.research.google.com/) with a google account 3 | * [Click here to open a copy of the Day 1 notebook](https://colab.research.google.com/github/icomse/9th_workshop_ml_for_molecules/blob/main/Monday/Day1_IntroToML.ipynb) 4 | * [Notebook source](https://github.com/icomse/9th_workshop_ml_for_molecules/blob/main/Monday/Day1_IntroToML.ipynb) 5 | * The "File" dropdown in google colab will have options for saving to your own repositories, google drive, and downloading. 6 | * In the notebooks, use Shift+Return to run the code in a cell 7 | --------------------------------------------------------------------------------