static int gt_repfind_runner(GT_UNUSED int argc, GT_UNUSED const char **argv, GT_UNUSED int parsed_args, void *tool_arguments, GtError *err) { bool haserr = false; Maxpairsoptions *arguments = tool_arguments; GtLogger *logger = NULL; GtQuerymatch *querymatchspaceptr = gt_querymatch_new(); GtXdropmatchinfo xdropmatchinfo; gt_error_check(err); xdropmatchinfo.querymatchspaceptr = querymatchspaceptr; xdropmatchinfo.useq = gt_seqabstract_new_empty(); xdropmatchinfo.vseq = gt_seqabstract_new_empty(); xdropmatchinfo.arbitscores.mat = 2; xdropmatchinfo.arbitscores.mis = -2; xdropmatchinfo.arbitscores.ins = -3; xdropmatchinfo.arbitscores.del = -3; xdropmatchinfo.frontresource = gt_frontresource_new(100UL); xdropmatchinfo.res = gt_xdrop_resources_new(&xdropmatchinfo.arbitscores); xdropmatchinfo.belowscore = 5L; logger = gt_logger_new(arguments->beverbose, GT_LOGGER_DEFLT_PREFIX, stdout); if (parsed_args < argc) { gt_error_set(err,"superfluous arguments: \"%s\"",argv[argc-1]); haserr = true; } if (!haserr) { if (gt_str_array_size(arguments->queryfiles) == 0) { if (arguments->samples == 0) { if (arguments->forward) { GtProcessmaxpairs processmaxpairs; void *processmaxpairsdata; if (arguments->searchspm) { processmaxpairs = gt_simplesuffixprefixmatchoutput; processmaxpairsdata = NULL; } else { if (arguments->extendseed) { processmaxpairs = gt_simplexdropselfmatchoutput; processmaxpairsdata = (void *) &xdropmatchinfo; } else { processmaxpairs = gt_simpleexactselfmatchoutput; processmaxpairsdata = (void *) querymatchspaceptr; } } if (gt_callenummaxpairs(gt_str_get(arguments->indexname), arguments->userdefinedleastlength, arguments->scanfile, processmaxpairs, processmaxpairsdata, logger, err) != 0) { haserr = true; } } if (!haserr && arguments->reverse) { if (gt_callenumselfmatches(gt_str_get(arguments->indexname), GT_READMODE_REVERSE, arguments->userdefinedleastlength, /*arguments->extendseed ? gt_processxdropquerymatches :*/ gt_querymatch_output, /*arguments->extendseed ? (void *) &xdropmatchinfo :*/ NULL, logger, err) != 0) { haserr = true; } } } else { if (gt_testmaxpairs(gt_str_get(arguments->indexname), arguments->samples, arguments->userdefinedleastlength, (GtUword) (100 * arguments->userdefinedleastlength), logger, err) != 0) { haserr = true; } } } else { if (gt_callenumquerymatches(gt_str_get(arguments->indexname), arguments->queryfiles, false, true, false, arguments->userdefinedleastlength, NULL, arguments->extendseed ? gt_processxdropquerymatches : gt_querymatch_output, arguments->extendseed ? (void *) &xdropmatchinfo : NULL, logger, err) != 0) { haserr = true; } } } gt_querymatch_delete(querymatchspaceptr); gt_seqabstract_delete(xdropmatchinfo.useq); gt_seqabstract_delete(xdropmatchinfo.vseq); gt_xdrop_resources_delete(xdropmatchinfo.res); gt_frontresource_delete(xdropmatchinfo.frontresource); gt_logger_delete(logger); return haserr ? -1 : 0; }
int gt_xdrop_unit_test(GT_UNUSED GtError *err) { int had_err = 0, i, j, s; const GtUchar *strings[GT_XDROP_NUM_OF_TESTS] = {(const GtUchar*) "TTTTTTTTTTTTTTTAAAGGGTTTCCCAAAGGGTTTCCCTTTTTTTTTTTTTTT", (const GtUchar*) "TTTTTTTTTTTTTTTTTTTGGGGCCCCAAAATTTTTTTTTTTTTTT", (const GtUchar*) "TTTTTTTTTTTTTTTNNNNTTTTGGGGCCCCAAAATTTTTTTTTTTTTTT", (const GtUchar*) "TTTTTTTTTTTTTTTAAAGGGTTTCGCAAAGGGTTTCCCTTTTTTTTTTTTTTT", (const GtUchar*) "TTTTTTTTTTTTTTTAAAGGGTTTCCAAAGGGTTTCCCCTTTTTTTTTTTTTTT", (const GtUchar*) "TTTTTTTTTTTTTTTAAAGGGTTTCCTCAAAGGGTTTCCTTTTTTTTTTTTTTT", (const GtUchar*) "TTTTTTTTTTTTTTTAAACAGATCACCCGCTTTTTTTTTTTTTTTT", (const GtUchar*) "TTTTTTTTTTTTTTTAAACGGGTTTCTCAAAGGGTTCCCTTTTTTTTTTTTTTT"}; GtUword lengths[GT_XDROP_NUM_OF_TESTS] = {54UL, 46UL, 50UL, 54UL, 54UL, 54UL, 46UL, 54UL}, eval_scores[GT_XDROP_NUM_OF_TESTS * GT_XDROP_NUM_OF_TESTS * GT_XDROP_NUM_OF_TESTS] = {0, 13UL, 0, 1UL, 4UL, 1UL, 0, 7UL, 13UL, 0, 0, 14UL, 15UL, 14UL, 0, 15UL, 0, 0, 0, 0, 0, 0, 0, 0, 1UL, 14UL, 0, 0, 1UL, 2UL, 0, 1UL, 4UL, 15UL, 0, 1UL, 0, 8UL, 0, 1UL, 1UL, 14UL, 0, 2UL, 8UL, 0, 0, 4UL, 0, 0, 0, 0, 0, 0, 0, 0, 7UL, 15UL, 0, 1UL, 1UL, 4UL, 0, 0, 0, 13UL, 0, 1UL, 4UL, 5UL, 14UL, 7UL, 13UL, 0, 0, 14UL, 15UL, 14UL, 12UL, 15UL, 0, 0, 0, 20UL, 0, 19UL, 17UL, 0, 1UL, 14UL, 20UL, 0, 5UL, 6UL, 15UL, 8UL, 4UL, 15UL, 0, 5UL, 0, 8UL, 15UL, 10UL, 5UL, 14UL, 19UL, 6UL, 8UL, 0, 14UL, 4UL, 14UL, 12UL, 17UL, 15UL, 15UL, 14UL, 0, 14UL, 7UL, 15UL, 0, 8UL, 10UL, 4UL, 14UL, 0, 0, 13UL, 19UL, 1UL, 2UL, 2UL, 13UL, 3UL, 13UL, 0, 9UL, 14UL, 14UL, 13UL, 12UL, 14UL, 17UL, 4UL, 0, 18UL, 19UL, 16UL, 16UL, 18UL, 1UL, 14UL, 18UL, 0, 2UL, 3UL, 13UL, 3UL, 2UL, 14UL, 18UL, 2UL, 0, 4UL, 13UL, 4UL, 2UL, 13UL, 19UL, 3UL, 4UL, 0, 13UL, 3UL, 14UL, 12UL, 17UL, 13UL, 13UL, 14UL, 0, 14UL, 3UL, 14UL, 18UL, 3UL, 4UL, 3UL, 13UL, 0, 0, 13UL, 17UL, 1UL, 2UL, 2UL, 14UL, 3UL, 13UL, 0, 4UL, 14UL, 15UL, 13UL, 12UL, 14UL, 19UL, 9UL, 0, 18UL, 18UL, 19UL, 17UL, 18UL, 1UL, 14UL, 18UL, 0, 2UL, 3UL, 13UL, 3UL, 2UL, 14UL, 19UL, 2UL, 0, 4UL, 13UL, 4UL, 2UL, 13UL, 16UL, 3UL, 4UL, 0, 14UL, 3UL, 13UL, 12UL, 16UL, 13UL, 13UL, 13UL, 0, 13UL, 3UL, 14UL, 18UL, 3UL, 4UL, 3UL, 14UL, 0, 0, 0, 0, 1UL, 1UL, 1UL, 0, 1UL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1UL, 0, 0, 0, 1UL, 0, 0, 1UL, 1UL, 0, 0, 1UL, 0, 0, 0, 1UL, 1UL, 0, 0, 0, 0, 0, 0, 1UL, 0, 0, 0, 0, 0, 0, 0, 0, 1UL, 0, 0, 1UL, 1UL, 1UL, 0, 0, 0, 0, 0, 1UL, 1UL, 1UL, 0, 1UL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1UL, 0, 0, 0, 1UL, 2UL, 0, 1UL, 1UL, 0, 0, 1UL, 0, 0, 0, 1UL, 1UL, 0, 0, 2UL, 0, 0, 0, 1UL, 0, 0, 0, 0, 0, 0, 0, 0, 1UL, 0, 0, 1UL, 1UL, 1UL, 0, 0, 0, 13UL, 17UL, 1UL, 2UL, 2UL, 13UL, 3UL, 13UL, 0, 4UL, 14UL, 14UL, 13UL, 12UL, 14UL, 17UL, 4UL, 0, 18UL, 19UL, 16UL, 16UL, 19UL, 1UL, 14UL, 18UL, 0, 2UL, 3UL, 13UL, 3UL, 2UL, 14UL, 19UL, 2UL, 0, 4UL, 13UL, 4UL, 2UL, 13UL, 16UL, 3UL, 4UL, 0, 13UL, 3UL, 13UL, 12UL, 16UL, 13UL, 13UL, 13UL, 0, 13UL, 3UL, 14UL, 19UL, 3UL, 4UL, 3UL, 13UL, 0, 0, 13UL, 0, 1UL, 2UL, 2UL, 5UL, 3UL, 13UL, 0, 0, 14UL, 15UL, 13UL, 0, 14UL, 0, 0, 0, 0, 0, 0, 0, 0, 1UL, 14UL, 0, 0, 2UL, 3UL, 5UL, 3UL, 2UL, 15UL, 0, 2UL, 0, 4UL, 5UL, 4UL, 2UL, 13UL, 0, 3UL, 4UL, 0, 6UL, 3UL, 5UL, 0, 0, 5UL, 5UL, 6UL, 0, 5UL, 3UL, 14UL, 0, 3UL, 4UL, 3UL, 5UL, 0}; GtSeqabstract *useq, *vseq; GtXdropArbitraryscores score[GT_XDROP_NUM_OF_TESTS] = {{2, -2, -2, -2}, {2, -1, -1, -1}, {2, -1, -5, -2}, {2, -1, -2, -5}, {3, -2, -3, -3}, {3, -1, -1, -1}, {4, -1, -3, -3}, {10, -3, -8, -8}}; GtXdropresources *resources; GtXdropbest best; GtXdropscore dropscore = (GtXdropscore) 12; GtMultieoplist *edit_ops = NULL; GtAlignment *alignment; bool rightextension = true; gt_error_check(err); for (s = 0; s < GT_XDROP_NUM_OF_TESTS; ++s) { resources = gt_xdrop_resources_new(&score[s]); for (i = 0; i < GT_XDROP_NUM_OF_TESTS && !had_err; ++i) { for (j = 0; j < GT_XDROP_NUM_OF_TESTS; ++j) { useq = gt_seqabstract_new_gtuchar(rightextension,GT_READMODE_FORWARD, strings[i], lengths[i], 0,lengths[i]); vseq = gt_seqabstract_new_gtuchar(rightextension, GT_READMODE_FORWARD, strings[j], lengths[j], 0,lengths[j]); gt_evalxdroparbitscoresextend(true, &best, resources, useq, vseq, dropscore); edit_ops = gt_xdrop_backtrack(resources, &best); gt_ensure(edit_ops != NULL); alignment = gt_alignment_new_with_seqs(strings[i], best.ivalue, strings[j], best.jvalue); gt_alignment_set_multieop_list(alignment, edit_ops); gt_ensure(eval_scores[s*64+i*8+j] == gt_alignment_eval(alignment)); gt_multieoplist_delete(edit_ops); gt_alignment_delete(alignment); if (i == j) { gt_evalxdroparbitscoresextend(false, &best, resources, useq, vseq, dropscore); edit_ops = gt_xdrop_backtrack(resources, &best); alignment = gt_alignment_new_with_seqs(strings[i], best.ivalue, strings[j], best.jvalue); gt_alignment_set_multieop_list(alignment, edit_ops); gt_ensure(eval_scores[s*64+i*8+j] == gt_alignment_eval(alignment)); gt_multieoplist_delete(edit_ops); gt_alignment_delete(alignment); } gt_seqabstract_delete(useq); gt_seqabstract_delete(vseq); } } gt_xdrop_resources_delete(resources); } return had_err; }