Skip to content

Commit df267c0

Browse files
authored
Merge pull request ACEsuit#173 from ACEsuit/descriptor
Descriptor
2 parents cf41ad5 + 8b1f2c2 commit df267c0

File tree

3 files changed

+33
-13
lines changed

3 files changed

+33
-13
lines changed

docs/src/tutorials/descriptor.jl

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,30 +12,27 @@ dataset, _, _ = ACEpotentials.example_dataset("Si_tiny");
1212

1313
# An ACE basis specifies a vector of invariant features of atomic environments and can therefore be used as a general descriptor.
1414

15-
basis = ACE1x.ace_basis( elements = [:Si],
16-
order = 3, # body-order - 1
17-
totaldegree = 8, );
15+
basis = ACE1x.ace_basis(elements = [:Si],
16+
rcut = 5.5,
17+
order = 3, # body-order - 1
18+
totaldegree = 8);
1819

1920
# Compute an averaged structural descriptor for each configuration.
2021

2122
descriptors = []
2223
config_types = []
2324
for atoms in dataset
24-
descriptor = zeros(length(basis))
25-
for i in 1:length(atoms)
26-
descriptor += site_energy(basis, atoms, i)
27-
end
28-
descriptor /= length(atoms)
29-
push!(descriptors, descriptor)
25+
struct_descriptor = sum(site_descriptors(basis, atoms)) / length(atoms)
26+
push!(descriptors, struct_descriptor)
3027
push!(config_types, atoms.data["config_type"].data)
3128
end
3229

3330
# Finally, extract the descriptor principal components and plot. Note the segregation by configuration type.
3431

35-
descriptors1 = hcat(descriptors...)
36-
M = fit(PCA, descriptors1; maxoutdim=3, pratio=1)
37-
descriptors_trans = transform(M, descriptors1)
32+
descriptors = hcat(descriptors...)
33+
M = fit(PCA, descriptors; maxoutdim=3, pratio=1)
34+
descriptors_trans = transform(M, descriptors)
3835
p = scatter(
3936
descriptors_trans[1,:], descriptors_trans[2,:], descriptors_trans[3,:],
4037
marker=:circle, linewidth=0, group=config_types, legend=:right)
41-
plot!(p, xlabel="PC1", ylabel="PC2", zlabel="PC3", camera=(40,10))
38+
plot!(p, xlabel="PC1", ylabel="PC2", zlabel="PC3", camera=(20,10))

src/ACEpotentials.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ include("atoms_data.jl")
1111
include("model.jl")
1212
include("export.jl")
1313
include("example_data.jl")
14+
include("descriptor.jl")
1415

1516
include("analysis/potential_analysis.jl")
1617
include("analysis/dataset_analysis.jl")

src/descriptor.jl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
export site_descriptor, site_descriptors
2+
3+
4+
"""
5+
site_descriptor(basis, atoms::AbstractAtoms, i::Integer)
6+
7+
Compute the site descriptor for the `i`th atom in `atoms`.
8+
"""
9+
function site_descriptor(basis, atoms::AbstractAtoms, i::Integer)
10+
return site_energy(basis, atoms, i)
11+
end
12+
13+
14+
"""
15+
site_descriptors(basis, atoms::AbstractAtoms)
16+
17+
Compute site descriptors for all atoms in `atoms`, returning them as
18+
a vector of vectors.
19+
"""
20+
function site_descriptors(basis, atoms::AbstractAtoms)
21+
return [site_descriptor(basis, atoms, i) for i in 1:length(atoms)]
22+
end

0 commit comments

Comments
 (0)