inj_wfs = Bank.from_sims(sims, inj_approx, noise_model, flow)
del xmldoc2, sims[:]
if verbose:
    print "Loaded %d injections" % len(inj_wfs)
    inj_format = "".join("%s: %s   " % name_format for name_format in zip(inj_approx.param_names, inj_approx.param_formats))

# main worker loop
match_map = np.empty(len(inj_wfs), dtype=[("inj_index", np.uint32), ("inj_sigmasq", np.float32), ("match", np.float32), ("best_match_tmplt_index", np.uint32)])
for inj_ind, inj_wf in enumerate(inj_wfs):

    if verbose:
        print "injection %d/%d" % (inj_ind+1, len(inj_wfs))
        print inj_format % inj_wf.params

    # NB: sigmasq set during argmax_match
    match_tup = bank.argmax_match(inj_wf)

    if verbose:
        print "\tbest matching template:  ",
        print bank._templates[match_tup[1]].params
        print "\tbest match:  %f\n" % match_tup[0]

    match_map[inj_ind] = (inj_ind, inj_wf.sigmasq) + match_tup
    inj_wf.clear()  # prune inj waveform


if verbose:
    print "total number of match calculations:", bank._nmatch

# merge process and process_params tables, then complete ourselves
table.reset_next_ids((lsctables.ProcessTable, lsctables.ProcessParamsTable))
# FIXME: this (potentially) breaks using mixed template bank approximants
match_map = np.empty(len(sims),
                     dtype=[("match", np.float32),
                            ("inj_sigmasq", np.float32)])
inj_bank = Bank(noise_model, flow)
tmplts = lsctables.SnglInspiralTable()
for j, sim in enumerate(sims):

    inj_wf = inj_approx.from_sim(sim, bank=inj_bank)
    inj_ind = opts.injection_min + j
    if verbose:
        print("injection %d/%d" % (j + 1, len(sims)))
        print(inj_format % inj_wf.params)

    # NB: sigmasq set during argmax_match
    match_tup = bank.argmax_match(inj_wf)

    if verbose:
        print("\tbest matching template:  ", end=' ')
        print(bank._templates[match_tup[1]].params)
        print("\tbest match:  %f\n" % match_tup[0])

    match_map[j] = (match_tup[0], inj_wf.sigmasq)
    tmplts.append(bank._templates[match_tup[1]].to_sngl())

if verbose:
    print("total number of match calculations:", bank._nmatch)

# write out results
h5file = H5File("%s.h5" % usertag, "w")
h5file.create_dataset("/sim_inspiral",