@@ -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
2122descriptors = []
2223config_types = []
2324for 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)
3128end
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 )
3835p = 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 ))
0 commit comments