@time_multi_normxcorr.register('<STR_LIT>')<EOL>def _time_threaded_normxcorr(templates, stream, *args, **kwargs):
no_chans = np.zeros(len(templates))<EOL>chans = [[] for _ in range(len(templates))]<EOL>array_dict_tuple = _get_array_dicts(templates, stream)<EOL>stream_dict, template_dict, pad_dict, seed_ids = array_dict_tuple<EOL>cccsums = np.zeros([len(templates),<EOL>len(stream[<NUM_LIT:0>]) - len(templates[<NUM_LIT:0>][<NUM_LIT:0>]) + <NUM_LIT:1>])<EOL>for seed_id in seed_ids:<EOL><INDENT>tr_cc, tr_chans = time_multi_normxcorr(<EOL>template_dict[seed_id], stream_dict[seed_id], pad_dict[seed_id],<EOL>True)<EOL>cccsums = np.sum([cccsums, tr_cc], axis=<NUM_LIT:0>)<EOL>no_chans += tr_chans.astype(np.int)<EOL>for chan, state in zip(chans, tr_chans):<EOL><INDENT>if state:<EOL><INDENT>chan.append((seed_id.split('<STR_LIT:.>')[<NUM_LIT:1>],<EOL>seed_id.split('<STR_LIT:.>')[-<NUM_LIT:1>].split('<STR_LIT:_>')[<NUM_LIT:0>]))<EOL><DEDENT><DEDENT><DEDENT>return cccsums, no_chans, chans<EOL>
Use the threaded time-domain routine for concurrency

:type templates: list
:param templates:
    A list of templates, where each one should be an obspy.Stream object
    containing multiple traces of seismic data and the relevant header
    information.
:type stream: obspy.core.stream.Stream
:param stream:
    A single Stream object to be correlated with the templates.

:returns:
    New list of :class:`numpy.ndarray` objects.  These will contain
    the correlation sums for each template for this day of data.
:rtype: list
:returns:
    list of ints as number of channels used for each cross-correlation.
:rtype: list
:returns:
    list of list of tuples of station, channel for all cross-correlations.
:rtype: list