Skip to content
This repository was archived by the owner on Dec 8, 2024. It is now read-only.

bobfix #46

Merged
merged 1 commit into from
Mar 6, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions qml/frepresentations.f90
Original file line number Diff line number Diff line change
Expand Up @@ -816,9 +816,9 @@ subroutine fgenerate_bob(atomic_charges, coordinates, nuclear_charges, id, &
enddo
enddo

start_indices(i) = start_indices(i) + natoms1
start_indices(i) = start_indices(i) + nmax(i)

nbag = (natoms1 * natoms1 - natoms1) / 2
nbag = (nmax(i) * nmax(i) - nmax(i)) / 2
! sort
do j = 1, nbag
k = minloc(bag(:nbag), dim=1)
Expand All @@ -845,7 +845,7 @@ subroutine fgenerate_bob(atomic_charges, coordinates, nuclear_charges, id, &
enddo

! sort
nbag = natoms1 * natoms2
nbag = nmax(i) * nmax(j)
do k = 1, nbag
l = minloc(bag(:nbag), dim=1)
cm(start_indices(i) + nbag - k + 1) = bag(l)
Expand Down
33 changes: 1 addition & 32 deletions qml/representations.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
from .frepresentations import fgenerate_local_coulomb_matrix
from .frepresentations import fgenerate_atomic_coulomb_matrix
from .frepresentations import fgenerate_eigenvalue_coulomb_matrix
from .frepresentations import fgenerate_bob

from .data import NUCLEAR_CHARGE

Expand Down Expand Up @@ -294,37 +295,6 @@ def generate_bob(nuclear_charges, coordinates, atomtypes, size=23, asize = {"O":
:return: 1D representation
:rtype: numpy array
"""
natoms = len(nuclear_charges)

coulomb_matrix = fgenerate_unsorted_coulomb_matrix(nuclear_charges, coordinates, size)

coulomb_matrix = vector_to_matrix(coulomb_matrix)
descriptor = []
atomtypes = np.asarray(atomtypes)
for atom1, size1 in sorted(asize.items()):
pos1 = np.where(atomtypes == atom1)[0]
feature_vector = np.zeros(size1)
feature_vector[:pos1.size] = np.diag(coulomb_matrix)[pos1]
feature_vector.sort()
descriptor.append(feature_vector[:])
for atom2, size2 in sorted(asize.items()):
if atom1 > atom2:
continue
if atom1 == atom2:
size = size1*(size1-1)//2
feature_vector = np.zeros(size)
sub_matrix = coulomb_matrix[np.ix_(pos1,pos1)]
feature_vector[:pos1.size*(pos1.size-1)//2] = sub_matrix[np.triu_indices(pos1.size, 1)]
feature_vector.sort()
descriptor.append(feature_vector[:])
else:
pos2 = np.where(atomtypes == atom2)[0]
feature_vector = np.zeros(size1*size2)
feature_vector[:pos1.size*pos2.size] = coulomb_matrix[np.ix_(pos1,pos2)].ravel()
feature_vector.sort()
descriptor.append(feature_vector[:])

return np.concatenate(descriptor)

n = 0
atoms = sorted(asize, key=asize.get)
Expand All @@ -340,7 +310,6 @@ def generate_bob(nuclear_charges, coordinates, atomtypes, size=23, asize = {"O":

return fgenerate_bob(nuclear_charges, coordinates, nuclear_charges, ids, nmax, n)


def get_slatm_mbtypes(nuclear_charges, pbc='000'):
"""
Get the list of minimal types of many-body terms in a dataset. This resulting list
Expand Down
Loading