From db47ff8606b14e4cdddc0e317972c3515b9c788b Mon Sep 17 00:00:00 2001
From: David Luevano Alvarado <55825613+luevano@users.noreply.github.com>
Date: Sun, 23 Feb 2020 21:03:39 -0700
Subject: Fix adj matrix issue with cc bonds)

---
 ml_exp/__main__.py        | 11 ++++++++---
 ml_exp/compound.py        |  6 ++++--
 ml_exp/representations.py | 29 ++++++++++++++---------------
 3 files changed, 26 insertions(+), 20 deletions(-)

diff --git a/ml_exp/__main__.py b/ml_exp/__main__.py
index 17119623e..124ce8cd9 100644
--- a/ml_exp/__main__.py
+++ b/ml_exp/__main__.py
@@ -25,6 +25,11 @@ from ml_exp.compound import Compound
 
 if __name__ == '__main__':
     print('Initialize test')
-    test = []
-    for i in range(1, 10):
-        test.append(Compound(f'/home/luevano/py/ml_exp/data/qm7/000{i}.xyz'))
+    mol_name = '/home/luevano/py/ml_exp/data/qm7/0004.xyz'
+    mol = Compound(mol_name)
+    mol.gen_cm(size=1, as_eig=False)
+    mol.gen_ljm(size=1, as_eig=False)
+    mol.gen_am(size=1)
+
+    print(mol.n, mol.atoms, mol.atoms_nc)
+    print(mol.am)
diff --git a/ml_exp/compound.py b/ml_exp/compound.py
index d4dc9b7c0..d499e6b83 100644
--- a/ml_exp/compound.py
+++ b/ml_exp/compound.py
@@ -39,7 +39,8 @@ class Compound:
         self.atoms = None
         self.atoms_nc = None
         self.coordinates = None
-        self.energy = None
+        self.pbe0 = None
+        self.delta = None
 
         self.cm = None
         self.ljm = None
@@ -91,8 +92,8 @@ class Compound:
                                         bohr_ru=bohr_ru)
 
     def gen_am(self,
-               use_forces=False,
                size=23,
+               use_forces=False,
                bohr_ru=False):
         """
         Generate the Adjacency Matrix for the compund.
@@ -104,6 +105,7 @@ class Compound:
         fnm, bonds, forces = first_neighbor_matrix(self.coordinates,
                                                    self.atoms_nc,
                                                    self.atoms,
+                                                   size=size,
                                                    use_forces=use_forces,
                                                    bohr_ru=bohr_ru)
 
diff --git a/ml_exp/representations.py b/ml_exp/representations.py
index 796d15f98..11c30dfd2 100644
--- a/ml_exp/representations.py
+++ b/ml_exp/representations.py
@@ -39,7 +39,7 @@ def coulomb_matrix(coords,
     if bohr_ru:
         cr = 0.52917721067
     else:
-        cr = 1
+        cr = 1.0
 
     n = coords.shape[0]
 
@@ -106,7 +106,7 @@ def lennard_jones_matrix(coords,
     if bohr_ru:
         cr = 0.52917721067
     else:
-        cr = 1
+        cr = 1.0
 
     n = coords.shape[0]
 
@@ -168,6 +168,7 @@ def lennard_jones_matrix(coords,
 def first_neighbor_matrix(coords,
                           nc,
                           atoms,
+                          size=23,
                           use_forces=False,
                           bohr_ru=False):
     """
@@ -179,7 +180,7 @@ def first_neighbor_matrix(coords,
     bohr_ru: if radius units should be in bohr's radius units.
     NOTE: Bond distance of carbon to other elements
         are (for atoms present in the qm7 dataset):
-            C: 1.20 - 1.53 A
+            C: 1.20 - 1.54 A (Edited to 1.19 - 1.54 A)
             H: 1.06 - 1.12 A
             O: 1.43 - 2.15 A
             N: 1.47 - 2.10 A
@@ -188,7 +189,7 @@ def first_neighbor_matrix(coords,
     if bohr_ru:
         cr = 0.52917721067
     else:
-        cr = 1
+        cr = 1.0
 
     n = coords.shape[0]
 
@@ -196,6 +197,11 @@ def first_neighbor_matrix(coords,
         raise ValueError('Compound size is different than the nuclear charge\
                          size. Arrays are not of the right shape.')
 
+    if size < n:
+        print('Error. Compound size (n) is greater han (size). Using (n)',
+              'instead of (size).')
+        size = n
+
     # Possible bonds.
     cc_bond = sorted(['C', 'C'])
     ch_bond = sorted(['C', 'H'])
@@ -203,16 +209,12 @@ def first_neighbor_matrix(coords,
     cn_bond = sorted(['C', 'N'])
     cs_bond = sorted(['C', 'S'])
 
-    if use_forces:
-        fnm = np.zeros((n, n), dtype=float)
-    else:
-        fnm = np.zeros((n, n), dtype=int)
+    fnm = np.zeros((size, size), dtype=float)
 
     bonds = []
     forces = []
     for i, xyz_i in enumerate(coords):
         for j, xyz_j in enumerate(coords):
-
             # Ignore the diagonal.
             if i != j:
                 bond = sorted([atoms[i], atoms[j]])
@@ -220,7 +222,7 @@ def first_neighbor_matrix(coords,
                 r = np.linalg.norm(rv)/cr
 
                 # Check for each type of bond.
-                if (cc_bond == bond) and (r >= 1.20 and r <= 1.53):
+                if (cc_bond == bond) and (r >= 1.19 and r <= 1.54):
                     fnm[i, j] = 1.0
                     if j > i:
                         bonds.append((i, j))
@@ -257,7 +259,7 @@ def first_neighbor_matrix(coords,
 def adjacency_matrix(fnm,
                      bonds,
                      forces,
-                     size=23):
+                     size=22):
     """
     Calculates the adjacency matrix given the bond list.
     fnm: first neighbour matrix.
@@ -272,10 +274,7 @@ def adjacency_matrix(fnm,
               instead of (size).')
         size = n
 
-    if forces:
-        am = np.zeros((size, size), dtype=float)
-    else:
-        am = np.zeros((size, size), dtype=int)
+    am = np.zeros((size, size), dtype=float)
 
     for i, bond_i in enumerate(bonds):
         for j, bond_j in enumerate(bonds):
-- 
cgit v1.2.3-70-g09d2