r962: abort given wrong RG line; resolves #541
This commit is contained in:
parent
47b646acbf
commit
3c0d05d272
12
format.c
12
format.c
|
|
@ -79,11 +79,11 @@ static char *mm_escape(char *s)
|
|||
return s;
|
||||
}
|
||||
|
||||
static void sam_write_rg_line(kstring_t *str, const char *s)
|
||||
static int sam_write_rg_line(kstring_t *str, const char *s)
|
||||
{
|
||||
char *p, *q, *r, *rg_line = 0;
|
||||
memset(mm_rg_id, 0, 256);
|
||||
if (s == 0) return;
|
||||
if (s == 0) return 0;
|
||||
if (strstr(s, "@RG") != s) {
|
||||
if (mm_verbose >= 1) fprintf(stderr, "[ERROR] the read group line is not started with @RG\n");
|
||||
goto err_set_rg;
|
||||
|
|
@ -108,20 +108,23 @@ static void sam_write_rg_line(kstring_t *str, const char *s)
|
|||
for (q = p, r = mm_rg_id; *q && *q != '\t' && *q != '\n'; ++q)
|
||||
*r++ = *q;
|
||||
mm_sprintf_lite(str, "%s\n", rg_line);
|
||||
return 0;
|
||||
|
||||
err_set_rg:
|
||||
free(rg_line);
|
||||
return -1;
|
||||
}
|
||||
|
||||
void mm_write_sam_hdr(const mm_idx_t *idx, const char *rg, const char *ver, int argc, char *argv[])
|
||||
int mm_write_sam_hdr(const mm_idx_t *idx, const char *rg, const char *ver, int argc, char *argv[])
|
||||
{
|
||||
kstring_t str = {0,0,0};
|
||||
int ret = 0;
|
||||
if (idx) {
|
||||
uint32_t i;
|
||||
for (i = 0; i < idx->n_seq; ++i)
|
||||
mm_sprintf_lite(&str, "@SQ\tSN:%s\tLN:%d\n", idx->seq[i].name, idx->seq[i].len);
|
||||
}
|
||||
if (rg) sam_write_rg_line(&str, rg);
|
||||
if (rg) ret = sam_write_rg_line(&str, rg);
|
||||
mm_sprintf_lite(&str, "@PG\tID:minimap2\tPN:minimap2");
|
||||
if (ver) mm_sprintf_lite(&str, "\tVN:%s", ver);
|
||||
if (argc > 1) {
|
||||
|
|
@ -132,6 +135,7 @@ void mm_write_sam_hdr(const mm_idx_t *idx, const char *rg, const char *ver, int
|
|||
}
|
||||
mm_err_puts(str.s);
|
||||
free(str.s);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void write_cs_core(kstring_t *s, const uint8_t *tseq, const uint8_t *qseq, const mm_reg1_t *r, char *tmp, int no_iden, int write_tag)
|
||||
|
|
|
|||
12
main.c
12
main.c
|
|
@ -7,7 +7,7 @@
|
|||
#include "mmpriv.h"
|
||||
#include "ketopt.h"
|
||||
|
||||
#define MM_VERSION "2.17-r961-dirty"
|
||||
#define MM_VERSION "2.17-r962-dirty"
|
||||
|
||||
#ifdef __linux__
|
||||
#include <sys/resource.h>
|
||||
|
|
@ -356,13 +356,19 @@ int main(int argc, char *argv[])
|
|||
return 1;
|
||||
}
|
||||
if ((opt.flag & MM_F_OUT_SAM) && idx_rdr->n_parts == 1) {
|
||||
int ret;
|
||||
if (mm_idx_reader_eof(idx_rdr)) {
|
||||
mm_write_sam_hdr(mi, rg, MM_VERSION, argc, argv);
|
||||
ret = mm_write_sam_hdr(mi, rg, MM_VERSION, argc, argv);
|
||||
} else {
|
||||
mm_write_sam_hdr(0, rg, MM_VERSION, argc, argv);
|
||||
ret = mm_write_sam_hdr(0, rg, MM_VERSION, argc, argv);
|
||||
if (opt.split_prefix == 0 && mm_verbose >= 2)
|
||||
fprintf(stderr, "[WARNING]\033[1;31m For a multi-part index, no @SQ lines will be outputted. Please use --split-prefix.\033[0m\n");
|
||||
}
|
||||
if (ret != 0) {
|
||||
mm_idx_destroy(mi);
|
||||
mm_idx_reader_close(idx_rdr);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
if (mm_verbose >= 3)
|
||||
fprintf(stderr, "[M::%s::%.3f*%.2f] loaded/built the index for %d target sequence(s)\n",
|
||||
|
|
|
|||
2
mmpriv.h
2
mmpriv.h
|
|
@ -59,7 +59,7 @@ uint32_t ks_ksmall_uint32_t(size_t n, uint32_t arr[], size_t kk);
|
|||
|
||||
void mm_sketch(void *km, const char *str, int len, int w, int k, uint32_t rid, int is_hpc, mm128_v *p);
|
||||
|
||||
void mm_write_sam_hdr(const mm_idx_t *mi, const char *rg, const char *ver, int argc, char *argv[]);
|
||||
int mm_write_sam_hdr(const mm_idx_t *mi, const char *rg, const char *ver, int argc, char *argv[]);
|
||||
void mm_write_paf(kstring_t *s, const mm_idx_t *mi, const mm_bseq1_t *t, const mm_reg1_t *r, void *km, int opt_flag);
|
||||
void mm_write_paf3(kstring_t *s, const mm_idx_t *mi, const mm_bseq1_t *t, const mm_reg1_t *r, void *km, int opt_flag, int rep_len);
|
||||
void mm_write_sam(kstring_t *s, const mm_idx_t *mi, const mm_bseq1_t *t, const mm_reg1_t *r, int n_regs, const mm_reg1_t *regs);
|
||||
|
|
|
|||
Loading…
Reference in New Issue