else { // validate multiple baf
if (hout->n_targets != hin->n_targets) {
fprintf(stderr, "[bam_merge_core] file '%s' has different number of target sequences. Abort!\n", fn[i]);
- abort();
+ exit(1);
}
for (j = 0; j < hout->n_targets; ++j) {
- if (strcmp(hout->target_name[j], hin->target_name[j]) || hout->target_len[j] != hin->target_len[j]) {
- fprintf(stderr, "[bam_merge_core] file '%s' has a different target sequence. Abort!\n", fn[i]);
- abort();
+ if (strcmp(hout->target_name[j], hin->target_name[j])) {
+ fprintf(stderr, "[bam_merge_core] different target sequence name: '%s' != '%s' in file '%s'. Abort!\n",
+ hout->target_name[j], hin->target_name[j], fn[i]);
+ exit(1);
}
+ if (hout->target_len[j] != hin->target_len[j])
+ fprintf(stderr, "[bam_merge_core] different target sequence length: %d != %d in file '%s'. Continue.\n",
+ hout->target_len[j], hin->target_len[j], fn[i]);
}
bam_header_destroy(hin);
}
case 'n': is_by_qname = 1; break;
}
}
- if (optind + 3 >= argc) {
+ if (optind + 2 >= argc) {
fprintf(stderr, "Usage: samtools merge [-n] <out.bam> <in1.bam> <in2.bam> [...]\n");
return 1;
}
fns[i] = (char*)calloc(strlen(prefix) + 20, 1);
sprintf(fns[i], "%s.%.4d.bam", prefix, i);
}
- bam_merge_core(0, fnout, n, fns);
+ bam_merge_core(is_by_qname, fnout, n, fns);
free(fnout);
for (i = 0; i < n; ++i) {
unlink(fns[i]);
}
}
if (optind + 2 > argc) {
- fprintf(stderr, "Usage: samtools sort [-n] [-m <maxMem>] <in.baf> <out.prefix>\n");
+ fprintf(stderr, "Usage: samtools sort [-n] [-m <maxMem>] <in.bam> <out.prefix>\n");
return 1;
}
bam_sort_core(is_by_qname, argv[optind], argv[optind+1], max_mem);