r1005: insert arbitrary header lines
This commit is contained in:
parent
15c93e7a52
commit
b5f6ed3020
17
bwa.c
17
bwa.c
|
|
@ -367,13 +367,13 @@ int bwa_idx2mem(bwaidx_t *idx)
|
||||||
* SAM header routines *
|
* SAM header routines *
|
||||||
***********************/
|
***********************/
|
||||||
|
|
||||||
void bwa_print_sam_hdr(const bntseq_t *bns, const char *rg_line)
|
void bwa_print_sam_hdr(const bntseq_t *bns, const char *hdr_line)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
extern char *bwa_pg;
|
extern char *bwa_pg;
|
||||||
for (i = 0; i < bns->n_seqs; ++i)
|
for (i = 0; i < bns->n_seqs; ++i)
|
||||||
err_printf("@SQ\tSN:%s\tLN:%d\n", bns->anns[i].name, bns->anns[i].len);
|
err_printf("@SQ\tSN:%s\tLN:%d\n", bns->anns[i].name, bns->anns[i].len);
|
||||||
if (rg_line) err_printf("%s\n", rg_line);
|
if (hdr_line) err_printf("%s\n", hdr_line);
|
||||||
if (bwa_pg) err_printf("%s\n", bwa_pg);
|
if (bwa_pg) err_printf("%s\n", bwa_pg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -422,3 +422,16 @@ err_set_rg:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *bwa_insert_header(const char *s, char *hdr)
|
||||||
|
{
|
||||||
|
int len = 0;
|
||||||
|
if (s == 0 || s[0] != '@') return hdr;
|
||||||
|
if (hdr) {
|
||||||
|
len = strlen(hdr);
|
||||||
|
hdr = realloc(hdr, len + strlen(s) + 2);
|
||||||
|
hdr[len++] = '\n';
|
||||||
|
strcpy(hdr + len, s);
|
||||||
|
} else hdr = strdup(s);
|
||||||
|
bwa_escape(hdr + len);
|
||||||
|
return hdr;
|
||||||
|
}
|
||||||
|
|
|
||||||
3
bwa.h
3
bwa.h
|
|
@ -51,8 +51,9 @@ extern "C" {
|
||||||
int bwa_idx2mem(bwaidx_t *idx);
|
int bwa_idx2mem(bwaidx_t *idx);
|
||||||
int bwa_mem2idx(int64_t l_mem, uint8_t *mem, bwaidx_t *idx);
|
int bwa_mem2idx(int64_t l_mem, uint8_t *mem, bwaidx_t *idx);
|
||||||
|
|
||||||
void bwa_print_sam_hdr(const bntseq_t *bns, const char *rg_line);
|
void bwa_print_sam_hdr(const bntseq_t *bns, const char *hdr_line);
|
||||||
char *bwa_set_rg(const char *s);
|
char *bwa_set_rg(const char *s);
|
||||||
|
char *bwa_insert_header(const char *s, char *hdr);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
16
fastmap.c
16
fastmap.c
|
|
@ -44,7 +44,7 @@ int main_mem(int argc, char *argv[])
|
||||||
kseq_t *ks, *ks2 = 0;
|
kseq_t *ks, *ks2 = 0;
|
||||||
bseq1_t *seqs;
|
bseq1_t *seqs;
|
||||||
bwaidx_t *idx;
|
bwaidx_t *idx;
|
||||||
char *p, *rg_line = 0;
|
char *p, *rg_line = 0, *hdr_line = 0;
|
||||||
const char *mode = 0;
|
const char *mode = 0;
|
||||||
void *ko = 0, *ko2 = 0;
|
void *ko = 0, *ko2 = 0;
|
||||||
int64_t n_processed = 0;
|
int64_t n_processed = 0;
|
||||||
|
|
@ -55,7 +55,7 @@ int main_mem(int argc, char *argv[])
|
||||||
|
|
||||||
opt = mem_opt_init();
|
opt = mem_opt_init();
|
||||||
memset(&opt0, 0, sizeof(mem_opt_t));
|
memset(&opt0, 0, sizeof(mem_opt_t));
|
||||||
while ((c = getopt(argc, argv, "epaFMCSPHVYjk:c:v:s:r:t:R:A:B:O:E:U:w:L:d:T:Q:D:m:I:N:W:x:G:h:y:K:X:")) >= 0) {
|
while ((c = getopt(argc, argv, "epaFMCSPVYjk:c:v:s:r:t:R:A:B:O:E:U:w:L:d:T:Q:D:m:I:N:W:x:G:h:y:K:X:H:")) >= 0) {
|
||||||
if (c == 'k') opt->min_seed_len = atoi(optarg), opt0.min_seed_len = 1;
|
if (c == 'k') opt->min_seed_len = atoi(optarg), opt0.min_seed_len = 1;
|
||||||
else if (c == 'x') mode = optarg;
|
else if (c == 'x') mode = optarg;
|
||||||
else if (c == 'w') opt->w = atoi(optarg), opt0.w = 1;
|
else if (c == 'w') opt->w = atoi(optarg), opt0.w = 1;
|
||||||
|
|
@ -115,6 +115,8 @@ int main_mem(int argc, char *argv[])
|
||||||
opt->pen_clip3 = strtol(p+1, &p, 10);
|
opt->pen_clip3 = strtol(p+1, &p, 10);
|
||||||
} else if (c == 'R') {
|
} else if (c == 'R') {
|
||||||
if ((rg_line = bwa_set_rg(optarg)) == 0) return 1; // FIXME: memory leak
|
if ((rg_line = bwa_set_rg(optarg)) == 0) return 1; // FIXME: memory leak
|
||||||
|
} else if (c == 'H') {
|
||||||
|
hdr_line = bwa_insert_header(optarg, hdr_line);
|
||||||
} else if (c == 'I') { // specify the insert size distribution
|
} else if (c == 'I') { // specify the insert size distribution
|
||||||
pes0 = pes;
|
pes0 = pes;
|
||||||
pes[1].failed = 0;
|
pes[1].failed = 0;
|
||||||
|
|
@ -135,6 +137,12 @@ int main_mem(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
else return 1;
|
else return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rg_line) {
|
||||||
|
hdr_line = bwa_insert_header(rg_line, hdr_line);
|
||||||
|
free(rg_line);
|
||||||
|
}
|
||||||
|
|
||||||
if (opt->n_threads < 1) opt->n_threads = 1;
|
if (opt->n_threads < 1) opt->n_threads = 1;
|
||||||
if (optind + 1 >= argc || optind + 3 < argc) {
|
if (optind + 1 >= argc || optind + 3 < argc) {
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
|
|
@ -169,6 +177,7 @@ int main_mem(int argc, char *argv[])
|
||||||
fprintf(stderr, "\nInput/output options:\n\n");
|
fprintf(stderr, "\nInput/output options:\n\n");
|
||||||
fprintf(stderr, " -p smart pairing (ignoring in2.fq)\n");
|
fprintf(stderr, " -p smart pairing (ignoring in2.fq)\n");
|
||||||
fprintf(stderr, " -R STR read group header line such as '@RG\\tID:foo\\tSM:bar' [null]\n");
|
fprintf(stderr, " -R STR read group header line such as '@RG\\tID:foo\\tSM:bar' [null]\n");
|
||||||
|
fprintf(stderr, " -H STR insert an arbitrary header line [null]\n");
|
||||||
fprintf(stderr, " -j ignore ALT contigs\n");
|
fprintf(stderr, " -j ignore ALT contigs\n");
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
fprintf(stderr, " -v INT verbose level: 1=error, 2=warning, 3=message, 4+=debugging [%d]\n", bwa_verbose);
|
fprintf(stderr, " -v INT verbose level: 1=error, 2=warning, 3=message, 4+=debugging [%d]\n", bwa_verbose);
|
||||||
|
|
@ -261,7 +270,7 @@ int main_mem(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!(opt->flag & MEM_F_ALN_REG))
|
if (!(opt->flag & MEM_F_ALN_REG))
|
||||||
bwa_print_sam_hdr(idx->bns, rg_line);
|
bwa_print_sam_hdr(idx->bns, hdr_line);
|
||||||
actual_chunk_size = fixed_chunk_size > 0? fixed_chunk_size : opt->chunk_size * opt->n_threads;
|
actual_chunk_size = fixed_chunk_size > 0? fixed_chunk_size : opt->chunk_size * opt->n_threads;
|
||||||
while ((seqs = bseq_read(actual_chunk_size, &n, ks, ks2)) != 0) {
|
while ((seqs = bseq_read(actual_chunk_size, &n, ks, ks2)) != 0) {
|
||||||
int64_t size = 0;
|
int64_t size = 0;
|
||||||
|
|
@ -301,6 +310,7 @@ int main_mem(int argc, char *argv[])
|
||||||
free(seqs);
|
free(seqs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free(hdr_line);
|
||||||
free(opt);
|
free(opt);
|
||||||
bwa_idx_destroy(idx);
|
bwa_idx_destroy(idx);
|
||||||
kseq_destroy(ks);
|
kseq_destroy(ks);
|
||||||
|
|
|
||||||
2
main.c
2
main.c
|
|
@ -4,7 +4,7 @@
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
#ifndef PACKAGE_VERSION
|
#ifndef PACKAGE_VERSION
|
||||||
#define PACKAGE_VERSION "0.7.10-r998-dirty"
|
#define PACKAGE_VERSION "0.7.10-r1005-dirty"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int bwa_fa2pac(int argc, char *argv[]);
|
int bwa_fa2pac(int argc, char *argv[]);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue