# 5.4.1.3. eqcorrscan.utils.clustering.cluster

`eqcorrscan.utils.clustering.``cluster`(template_list, show=True, corr_thresh=0.3, allow_shift=False, shift_len=0, save_corrmat=False, cores='all', debug=1)

  Cluster template waveforms based on average correlations.

  Function to take a set of templates and cluster them, will return groups as lists of streams. Clustering is done by computing the cross-channel correlation sum of each stream in stream_list with every other stream in the list. `scipy.cluster.hierarchy` functions are then used to compute the complete distance matrix, where distance is 1 minus the normalised cross-correlation sum such that larger distances are less similar events. Groups are then created by clustering the distance matrix at distances less than 1 - corr_thresh.

  Will compute the distance matrix in parallel, using all available cores

  Parameters: | template_list (list) List of tuples of the template (`obspy.core.stream.Stream`) and the template id to compute clustering for show (bool) plot linkage on screen if True, defaults to True corr_thresh (float) Cross-channel correlation threshold for grouping allow_shift (bool) Whether to allow the templates to shift when correlating shift_len (int) How many samples to allow the templates to shift in time save_corrmat (bool) If True will save the distance matrix to dist_mat.npy in the local directory. cores (int) number of cores to use when computing the distance matrix, defaults to ‘all’ which will work out how many cpus are available and hog them. debug (int) Level of debugging from 1-5, higher is more output, currently only level 1 implemented.
  Returns: | List of groups. Each group is a list of `obspy.core.stream.Stream` making up that group.