Skip to content

Commit

Permalink
fix to dbscan tolerances for euclidean cases
Browse files Browse the repository at this point in the history
  • Loading branch information
Joel Bernier committed Apr 24, 2017
1 parent be25c64 commit b0b3d54
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions hexrd/findorientations.py
Original file line number Diff line number Diff line change
Expand Up @@ -316,10 +316,13 @@ def quat_distance(x, y):

@clustering_algorithm('dbscan')
def cluster_dbscan(qfib_r, qsym, cl_radius, min_samples):
# CAVEAT: the euclidean misorientation of two quaternions
# is ~2x smaller than the true quaternion misorientation
# for magnitudes < ~5deg
_check_dbscan()
dbscan = sklearn.cluster.dbscan
pts = qfib_r.T
_, labels = dbscan(pts, eps=np.radians(cl_radius),
_, labels = dbscan(pts, eps=0.5*np.radians(cl_radius),
min_samples=min_samples, metric='minkowski', p=2)
labels = _normalize_labels_from_dbscan(labels)
qbar = _compute_centroids_dense(labels, qfib_r, qsym)
Expand All @@ -329,10 +332,13 @@ def cluster_dbscan(qfib_r, qsym, cl_radius, min_samples):

@clustering_algorithm('ort-dbscan')
def cluster_ort_dbscan(qfib_r, qsym, cl_radius, min_samples):
# CAVEAT: the euclidean misorientation of the vector parts of two
# quaternion is ~2.01x smaller than the true quaternion misorientation
# for magnitudes < ~5deg
_check_dbscan()
dbscan = sklearn.cluster.dbscan
pts = qfib_r[1:, :].T
_, labels = dbscan(pts, eps=0.9*np.radians(cl_radius),
_, labels = dbscan(pts, eps=0.49*np.radians(cl_radius),
min_samples=min_samples, metric='minkowski', p=2)
labels = _normalize_labels_from_dbscan(labels)
qbar = _compute_centroids_dense(labels, qfib_r, qsym)
Expand All @@ -345,8 +351,8 @@ def cluster_sph_dbscan(qfib_r, qsym, cl_radius, min_samples):
_check_dbscan()
num_ors = qfib_r.shape[1]
if num_ors > 25000:
msg = 'Size too big for sph-dbscan. Defaulting to ort-dbscan.'
raise ClusteringError(msg, alternative='ort-dbscan')
msg = 'Size too big for sph-dbscan. Defaulting to dbscan.'
raise ClusteringError(msg, alternative='dbscan')

dbscan = sklearn.cluster.dbscan
pts = qfib_r.T
Expand Down

0 comments on commit b0b3d54

Please sign in to comment.